Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
autonoma — Détecte et corrige automatiquement les secrets codés en dur dans les dépôts Python — refuse lorsque la correction pourrait casser votre code | Kitploit
Outils/GitHubGitHub/vihaaninnovations/autonoma
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeDevSecOpsDétection de SecretsSécurité de la Chaîne Logistique
GitHubvihaaninnovations/autonoma

autonoma

Détecte et corrige automatiquement les secrets codés en dur dans les dépôts Python — refuse lorsque la correction pourrait casser votre code

Voir le dépôt
22il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Autonoma

Python License Platform Edition PyPI Version

Autonoma détecte les secrets codés en dur et les remplace par des références os.environ[...] en utilisant des réécritures AST. Les modifications ne sont appliquées que lorsque la réécriture est déterministe et préserve la sémantique.

Les réécritures utilisent l'arbre syntaxique analysé — pas des regex sur le texte brut. S'exécute localement sans appels réseau. Fonctionne en CI avec des diffs idempotents et minimaux.

Autonoma Demo


Quel problème cela résout

Secrets codés en dur dans les codebases :

  • les secrets sont commités et restent dans l'historique git
  • les corriger manuellement casse le code ou ignore les cas particuliers
  • les équipes détectent les fuites mais évitent les outils de correction automatique car ils sont dangereux
  • La plupart des outils les détectent.
    Autonoma ne touche que ce dont il peut prouver qu'il est sûr de modifier.


    Exemple rapide

    root@kitploit:~
    autonoma scan .
    autonoma fix .
    git diff
    

    Installation

    root@kitploit:~
    pip install autonoma-cli
    

    Intégration Pre-commit

    Ajoutez ceci à votre .pre-commit-config.yaml pour empêcher les secrets d'entrer dans votre historique :

    root@kitploit:~
    - repo: local
      hooks:
        - id: autonoma
          name: Autonoma Scan
          entry: autonoma scan
          language: system
          types: [python]
    

    Essayez-le en 60 secondes

    root@kitploit:~
    # 1. Create a test file with hardcoded secrets
    cat > test_secrets.py << 'EOF'
    SENDGRID_API_KEY = "sg-live-abc123xyz789"
    DB_PASSWORD = "Pr0dAccess2024!"
    EOF
    
    # Also create the env contract file (required for safe remediation)
    printf 'SENDGRID_API_KEY=\nDB_PASSWORD=\n' > .env.example
    
    # 2. Scan — emits JSON findings to stdout
    autonoma scan test_secrets.py
    
    # 3. Fix — rewrites the file in place
    autonoma fix test_secrets.py
    
    # 4. Scan again — should now be clean (exit 0)
    autonoma scan test_secrets.py
    
    # 5. Inspect the result
    cat test_secrets.py
    

    Résultat attendu après correction :

    root@kitploit:~
    import os
    SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"]
    DB_PASSWORD = os.environ["DB_PASSWORD"]
    

    Commandes

    scan

    Mode de détection. Envoie du JSON vers stdout et un résumé lisible vers stderr. Non-mutant — ne modifie jamais les fichiers.

    root@kitploit:~
    # Scan a directory (JSON findings to stdout)
    autonoma scan src/
    
    # Save JSON results to a file
    autonoma scan src/ > findings.json
    

    Codes de sortie pour scan :

    CodeSignification
    0Aucun résultat
    1Résultats détectés
    3Erreur de l'outil

    fix

    Corrige les secrets codés en dur en utilisant des réécritures AST. Modifie les fichiers sur place.

    root@kitploit:~
    # Apply fixes
    autonoma fix src/
    
    # Preview patches before writing
    autonoma fix src/ --diff
    
    # Write remediation audit log
    autonoma fix src/ --report-out audit.json
    

    Codes de sortie pour fix :

    CodeSignification
    0Aucun résultat — le dépôt était déjà propre
    1Résultats existants avant correction (la correction peut avoir réussi — vérifiez le comptage FIXED/REFUSED dans la sortie)
    3Erreur de l'outil

    La commande fix retourne 1 chaque fois qu'elle a trouvé des secrets avant de tenter une correction, que la réécriture ait réussi ou non. C'est intentionnel : les pipelines CI doivent signaler le commit où les secrets ont été introduits, même après correction automatique. Exécutez autonoma scan ensuite pour confirmer que le dépôt est propre.

    history-scan

    Analyse l'historique git pour les secrets qui ont été commités puis supprimés ou modifiés.

    [!NOTE] Détection uniquement. Cette commande ne réécrit pas l'historique git ni ne modifie les commits.

    root@kitploit:~
    autonoma history-scan .
    

    Avant / Après

    Voici les modèles qu'Autonoma corrige actuellement.

    Avant

    root@kitploit:~
    # settings.py
    SENDGRID_API_KEY = "sg-live-abc123xyz789"
    DB_PASSWORD = "Pr0dAccess2024!"
    

    Après (autonoma fix .)

    root@kitploit:~
    # settings.py
    import os
    SENDGRID_API_KEY = os.environ["SENDGRID_API_KEY"]
    DB_PASSWORD = os.environ["DB_PASSWORD"]
    

    Refusé (sécurité par refus prioritaire)

    root@kitploit:~
    # f-string — refused because the rewrite would change semantics
    api_key = f"prefix_{BASE_KEY}"
    # → REFUSED: refuse_fstring_mixed_expression
    
    # Dict/nested value — refused because the target is not a simple assignment
    DATABASES = {
        "default": {"PASSWORD": "Pr0d@ccess2024!"}
    }
    # → REFUSED: unsupported assignment target type
    

    Les résultats refusés sont signalés dans la sortie JSON et provoquent une sortie non nulle en CI. Les fichiers avec des résultats refusés ne sont jamais modifiés.


    Ce qu'Autonoma corrige vs refuse

    ModèleExempleComportementRaison
    Assignation simpleapi_key = "sk-abc123"CorrigéRéécriture AST déterministe
    Attribut de classeclass C: SECRET = "abc"CorrigéRéécriture AST déterministe
    Argument nomméconnect(password="abc")CorrigéRéécriture AST déterministe
    f-stringkey = f"prefix_{v}"RefuséLa réécriture modifierait le comportement à l'exécution
    Concaténationkey = "sk-" + suffixRefuséLa réécriture modifierait le comportement à l'exécution
    Valeur dictionnaire/imbriquéecfg = {"pass": "abc"}RefuséPas une cible d'assignation simple
    Assignation multipleA = B = "secret"RefuséCible ambiguë
    Déjà sûrkey = os.getenv("KEY")IgnoréAucun changement nécessaire
    .env.example manquanttout modèleRefuséPas de contrat d'environnement pour dériver le nom de variable

    Fonctionnalités CI/CD

    Relancer sur un fichier propre ne fait aucune modification. Les réécritures conservent l'indentation et les commentaires d'origine. import os n'est ajouté que s'il manque.

    Intégration & CI/CD

    GitHub Actions (Scan uniquement)

    Pour faire échouer votre build si des secrets sont détectés :

    root@kitploit:~
    - name: Scan for secrets
      run: autonoma scan .
    

    Commandes héritées

    analyze est conservé pour la compatibilité ascendante. Migrez vers scan ou fix.

    root@kitploit:~
    # Equivalent to 'autonoma scan'
    autonoma analyze src/ --detect-only
    
    # Equivalent to 'autonoma fix'
    autonoma analyze src/ --auto-fix
    

    Contraintes & Comportements

    Ce qu'il corrige

    • Assignations simples : API_KEY = "secret"
    • Attributs de classe : class Config: PASS = "secret"
    • Arguments nommés : connect(password="secret")

    Ce qu'il refuse (par conception)

    • Expressions complexes : f-strings, concaténations ou appels de fonctions à droite.
    • Cibles ambiguës : Assignations multiples (A = B = "secret") ou déballage de tuple.
    • Valeurs imbriquées/dictionnaire : Valeurs dans des dictionnaires, listes ou tuples.
    • Contexte manquant : Si aucun .env.example ou contrat d'environnement n'est trouvé dans le dépôt.

    Les cas refusés sont signalés dans la sortie JSON et provoqueront des codes de sortie non nuls en CI. Le fichier n'est jamais modifié si un problème qu'il contient est refusé.

    Ce qu'il ne fait pas

    • Il n'utilise pas l'entropie/la supposition (il utilise une correspondance heuristique de noms).
    • Il ne modifie pas les fichiers non Python dans l'édition Community.
    • Il ne supprime pas votre code ; des sauvegardes sont écrites sous <file>.bak avant modification.

    Limitations actuelles

    SEC002 combine actuellement des modèles de valeurs de credentials avec une logique de routage conditionnée par mots-clés. Les credentials assignés à des noms de variables très atypiques peuvent ne pas être détectés actuellement.

    Autonoma évite intentionnellement une détection large basée uniquement sur l'entropie, à moins que l'impact sur la précision puisse être mesuré par rapport à un corpus étiqueté de faux positifs.


    Schéma JSON

    autonoma scan produit un rapport detect-only sur stdout :

    root@kitploit:~
    {
      "schema_version": "1.0",
      "tool_name": "autonoma",
      "tool_version": "0.1.5",
      "generated_at": "2026-03-24T12:00:00Z",
      "mode": "detect-only",
      "summary": {
        "files_processed": 3,
        "total_findings": 2,
        "safe_to_fix": 1,
        "refused": 1
      },
      "findings": [
        {
          "file": "settings.py",
          "line": 4,
          "pattern_type": "api_key",
          "severity": "high",
          "rule_id": "SEC002",
          "safe_to_fix": true,
          "suggested_env_var": "SENDGRID_API_KEY",
          "refusal_reason": null,
          "fingerprint": "sha256:abc123..."
        }
      ]
    }
    

    Licence

    Licence MIT

    Télécharger l’outil