Sécurité : ce que le code garantit¶
| Garantie | Où dans le code | Test |
|---|---|---|
Confirmation humaine avant toute action ; les outils dangereux (listés, ou annotés destructiveHint par leur serveur MCP) ne sont jamais auto-confirmés, même en mode performance ou avec -y |
lyra/core/constants.py (DANGEROUS_TOOLS, DESTRUCTIVE_TOOLS), lyra/daemon/actions.py (_should_skip_confirmation) |
tests/unit/test_confirm_prompt.py |
| Arguments validés par liste blanche avant tout script shell (noms de VM, chemins, commentaires) | scripts/async_mcp_wrapper.py, lyra/core/validation.py |
tests/unit/test_async_wrapper_validation.py |
| Lecture de l'état réel avant d'agir (read-first) | lyra/core/validation.py (validate_vm_existence) |
tests/unit/rules/ |
Scripts privilégiés copiés en root et autorisés un par un dans sudoers.d, jamais de sudo global |
installer/core/steps/mcps.py |
tests/installer/test_mcps_sudoers.py |
Secrets hors de config.yaml (fichier secrets.yaml en 0600, jeton GitHub jamais écrit sur disque) |
secrets.yaml.example, installer/core/gitauth.py |
tests/installer/test_gitauth.py |
| Aucun chemin personnel ni adresse privée dans le dépôt | garde-fou CI (workflow) | tests/unit/test_paths.py |
Versions vérifiables : tag signé, uv.lock contrôlé en CI, chaque wheel et sdist publié avec sbom.json (CycloneDX) et deux attestations Sigstore (provenance, SBOM) |
.github/workflows/release.yml, procédure |
gh attestation verify <wheel> --owner amineutron |
| Local par défaut : aucune sortie réseau sans configuration explicite | docs/user/DATA_FLOWS.md |
vérification par grep décrite dans le document |
Signaler une faille : politique de sécurité.
Ce qui est capté, ce qui est gardé et ce qui sort de la machine est détaillé dans Flux de données.