
Scannez. Expurgez. Committez proprement.
Trouvez le secret. Corrigez-le. Committez proprement.
Les scanners de secrets savent bien donner l'alerte, mais sont peu utiles pour l'éteindre. Ils vous remettent une liste d'identifiants compromis et vous laissent le nettoyage. Credactor boucle la boucle : il trouve un secret codé en dur et le réécrit sur place, de sorte qu'une fuite passe de la détection à la correction en une seule commande.
Garder les identifiants hors du code source est une pratique de sécurité de base, pas une option. Credactor rend cette base peu coûteuse à maintenir, sur votre machine avant un commit ou en CI avant une fusion. Lancez-le seul, ou aux côtés des scanners auxquels vous faites déjà confiance.
# Credactor finds this:
db_password = "h8Tq2vKp9mRz4Wd"
# By default it rewrites the secret as a sentinel that fails loudly at runtime:
db_password = "REDACTED_BY_CREDACTOR"
# With --replace-with env, it writes a reference that reads from the environment:
db_password = os.environ["DB_PASSWORD"]
La rédaction réécrit les fichiers dans votre arbre de travail. Si un secret a déjà été committé, faites tourner la clé et nettoyez aussi l'historique (par exemple, avec
git filter-repo). Réécrire un fichier ne remplace pas la révocation d'un identifiant compromis.
REDACTED_BY_CREDACTOR qui échoue à l'exécution par défaut, ou une référence à une variable d'environnement adaptée au langage (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP et shell) telle que os.environ["KEY"]. Le remplacement est du code valide. Si le fichier n'inclut pas déjà l'import correspondant (par exemple import os), ajoutez-le..bak automatiques, protections contre les limites de liens symboliques et les permissions de fichiers, et masquage complet des secrets dans toutes les sorties. Si une sauvegarde sûre ne peut pas être écrite, Credactor ignore le fichier plutôt que de le réécrire à l'aveugle, et un plantage en cours d'écriture laisse l'original intact.--ci en lecture seule avec des codes de sortie précis, un hook pre-commit, et l'ingestion des rapports Gitleaks, TruffleHog ou Betterleaks. Détectez avec le scanner que vous exécutez déjà, remédiez avec Credactor.pip install credactor
Nécessite Python 3.11+. Aucune autre dépendance. Fonctionne sur Linux, macOS et Windows (testé en CI sur Linux et Windows).
Sur macOS et Linux, vous pouvez l'installer avec Homebrew à la place :
brew install rxb06/tap/credactor
La formule s'installe dans son propre virtualenv et inclut l'extra optionnel
[encoding], donc une installation Homebrew détecte aussi les secrets dans les
fichiers non-UTF-8. Un simple pip install credactor omet cet extra ; ajoutez-le avec
pip install 'credactor[encoding]' si vous voulez la même couverture.
Depuis les sources :
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor fonctionne alors depuis n'importe quel répertoire.
Lancez d'abord
--dry-runet examinez les résultats avant de rédiger. Les faux positifs sont possibles, et sous--fix-allun faux positif est réécrit. Supprimez les valeurs connues comme sûres avec# credactor:ignoreou une entrée.credactorignore.
credactor --dry-run . # scan, change nothing
credactor . # scan, then redact interactively (y/n per finding)
credactor --fix-all . # redact everything after one confirmation
credactor --fix-all --yes . # redact non-interactively (CI / scripts)
credactor --ci . # read-only gate: exit 1 on findings
credactor --replace-with env . # redact to env-var references instead of the sentinel
Le hook ne filtre que le contenu indexé, donc un secret déjà committé n'est pas re-signalé. Utilisez
credactor --scan-history .pour vérifier ce qui est déjà dans le dépôt.
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.4 # pin to the latest release tag
hooks:
- id: credactor
- uses: rxb06/[email protected]
L'action passe toujours --ci, donc elle signale et bloque mais ne réécrit jamais le
checkout. Les résultats font échouer l'étape ; définissez fail-on-findings: false pour signaler
sans bloquer. Une erreur fait échouer l'étape dans tous les cas.
Téléversez vers Code Scanning au lieu d'échouer sur les résultats :
- uses: rxb06/[email protected]
with:
format: sarif
upload-sarif: true
fail-on-findings: false
Le job a besoin de permissions: security-events: write pour le téléversement. Consultez le
guide d'intégration CI pour chaque entrée,
y compris l'ingestion des rapports Gitleaks, TruffleHog et Betterleaks.
Credactor détecte les types d'identifiants qui fuient le plus souvent, et attribue à chacun une sévérité pour que vous puissiez trier en un coup d'œil.
| Catégorie | Exemples | Sévérité |
|---|---|---|
| Clés de fournisseurs cloud | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | Critique |
| Jetons de plateformes | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | Critique |
| Clés privées | Blocs PEM (-----BEGIN … PRIVATE KEY-----) | Critique |
| JWT | Jetons eyJ… à trois segments | Élevée |
| Chaînes de connexion | URL avec identifiants en ligne (scheme://user:pass@host) | Élevée |
| Variables d'identifiants | password = "…", api_key = "…", secret_key = "…" | Élevée/Moyenne/Faible |
| Attributs XML | <add key="Password" value="…" /> | Élevée/Moyenne/Faible |
| Chaînes à haute entropie | hex entre guillemets (32–64 caractères) / Base64 (60+ caractères) | Moyenne/Faible |
Les jetons de fournisseurs déterministes (les préfixes ci-dessus) sont signalés indépendamment de l'entropie. Les détecteurs heuristiques (JWT, chaînes de connexion, hex, Base64) doivent franchir un seuil d'entropie. Un hex ou Base64 isolé n'est signalé que lorsqu'il est entre guillemets. Une valeur à haute entropie non entre guillemets n'est capturée que sur une variable nommée comme un identifiant, ce qui épargne les SHA de git et les sommes de contrôle. Pour les règles complètes de détection et de sévérité, consultez le Manuel.
L'ensemble de règles natif de Credactor est plus étroit que celui d'un scanner dédié, et certains formats de fournisseurs (par exemple SendGrid, Twilio et les webhooks Slack) ne sont pas détectés. Son atout est la remédiation : associez-le à Gitleaks, TruffleHog ou Betterleaks pour la détection la plus large, ou exécutez-le seul.