
Scannen. Schwärzen. Sauber committen.
Finde das Geheimnis. Behebe es. Committe sauber.
Secret-Scanner sind gut darin, Alarm zu schlagen, aber nicht besonders hilfreich beim Löschen des Feuers. Sie übergeben dir eine Liste durchgesickerter Zugangsdaten und überlassen dir die Bereinigung. Credactor schließt den Kreis: Es findet ein hartcodiertes Geheimnis und schreibt es direkt an Ort und Stelle neu, sodass ein Leck von der Erkennung bis zur Behebung mit einem einzigen Befehl geht.
Zugangsdaten aus dem Quellcode herauszuhalten ist eine grundlegende Sicherheitspraxis, keine optionale. Credactor macht diese Grundlage günstig einzuhalten – auf deinem Rechner vor einem Commit oder in CI vor einem Merge. Führe es eigenständig aus oder zusammen mit den Scannern, denen du bereits vertraust.
# Credactor findet das hier:
db_password = "h8Tq2vKp9mRz4Wd"
# Standardmäßig schreibt es das Geheimnis als Sentinel um, das zur Laufzeit laut scheitert:
db_password = "REDACTED_BY_CREDACTOR"
# Mit --replace-with env schreibt es eine Referenz, die aus der Umgebung liest:
db_password = os.environ["DB_PASSWORD"]
Die Schwärzung schreibt Dateien in deinem neu. Wenn ein Geheimnis bereits committet wurde, rotiere den Schlüssel und bereinige zusätzlich die Historie (zum Beispiel mit ). Das Neuschreiben einer Datei ist kein Ersatz für das Widerrufen einer durchgesickerten Zugangsdaten.
git filter-repoREDACTED_BY_CREDACTOR-Sentinel, der standardmäßig zur Laufzeit scheitert, oder eine sprachbewusste Umgebungsvariablen-Referenz (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP und Shell) wie os.environ["KEY"]. Der Ersatz ist gültiger Code. Wenn die Datei den passenden Import (zum Beispiel import os) nicht bereits enthält, füge ihn hinzu..bak-Backups, Schutzmechanismen für Symlink-Grenzen und Dateiberechtigungen sowie vollständige Maskierung von Geheimnissen in jeder Ausgabe. Wenn kein sicheres Backup geschrieben werden kann, überspringt Credactor die Datei, statt sie blind neu zu schreiben, und ein Absturz mitten im Schreibvorgang lässt das Original intakt.--ci-Gate mit präzisen Exit-Codes, ein Pre-Commit-Hook (Beta) und die Aufnahme von Gitleaks- oder TruffleHog-Berichten. Erkenne mit Gitleaks oder TruffleHog, behebe mit Credactor.pip install credactor
Erfordert Python 3.11+. Keine weiteren Abhängigkeiten. Läuft auf Linux, macOS und Windows (CI-getestet auf Linux und Windows).
Aus dem Quellcode:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor funktioniert dann von jedem Verzeichnis aus.
Führe zuerst
--dry-runaus und überprüfe die Befunde, bevor du schwärzt. Fehlalarme sind möglich, und unter--fix-allwird ein Fehlalarm neu geschrieben. Unterdrücke bekannte sichere Werte mit# credactor:ignoreoder einem.credactorignore-Eintrag.
credactor --dry-run . # scannen, nichts ändern
credactor . # scannen, dann interaktiv schwärzen (j/n pro Befund)
credactor --fix-all . # alles nach einer Bestätigung schwärzen
credactor --fix-all --yes . # nicht-interaktiv schwärzen (CI / Skripte)
credactor --ci . # schreibgeschütztes Gate: Exit 1 bei Befunden
credactor --replace-with env . # zu Umgebungsvariablen-Referenzen statt Sentinel schwärzen
Die Hook-Integration befindet sich in der Beta-Phase. Führe
credactor --dry-run .manuell aus, bevor du dich allein darauf verlässt.
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.6.0 # auf das neueste Release-Tag pinnen
hooks:
- id: credactor
Credactor erkennt die Zugangsdaten-Typen, die am häufigsten durchsickern, und weist jedem einen Schweregrad zu, damit du auf einen Blick priorisieren kannst.
| Kategorie | Beispiele | Schweregrad |
|---|---|---|
| Cloud-Provider-Schlüssel | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | Kritisch |
| Plattform-Tokens | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | Kritisch |
| Private Schlüssel | PEM-Blöcke (-----BEGIN … PRIVATE KEY-----) | Kritisch |
| JWTs | eyJ…-Tokens mit drei Segmenten | Hoch |
| Verbindungsstrings | URLs mit Inline-Zugangsdaten (scheme://user:pass@host) | Hoch |
| Zugangsdaten-Variablen | password = "…", api_key = "…", secret_key = "…" | Hoch/Mittel/Niedrig |
| XML-Attribute | <add key="Password" value="…" /> | Hoch/Mittel/Niedrig |
| Strings mit hoher Entropie | zitierte Hexadezimalwerte (32–64 Zeichen) / Base64 (60+ Zeichen) | Mittel/Niedrig |
Deterministische Provider-Tokens (die obigen Präfixe) werden unabhängig von der Entropie gekennzeichnet. Heuristische Detektoren (JWTs, Verbindungsstrings, Hex, Base64) müssen eine Entropie-Untergrenze überschreiten. Eigenständige Hex- oder Base64-Werte werden nur gekennzeichnet, wenn sie zitiert sind. Ein nicht zitierter Wert mit hoher Entropie wird nur bei einer Variable mit Zugangsdaten-Namen erfasst, was Git-SHAs und Prüfsummen verschont. Für die vollständigen Erkennungs- und Schweregradregeln siehe das Handbuch.
Credactors nativer Regelsatz ist enger als der eines dedizierten Scanners, und einige Provider-Formate (zum Beispiel SendGrid, Twilio und Slack-Webhooks) werden nicht erkannt. Seine Stärke liegt in der Behebung: Kombiniere ihn mit Gitleaks oder TruffleHog für die breiteste Erkennung oder führe ihn eigenständig aus.
Credactor steht für sich allein und wird in Gesellschaft stärker. Läufst du bereits Gitleaks oder TruffleHog? Übergib ihren Bericht an Credactor, und es schwärzt die kombinierte Menge, dedupliziert gegen seine eigenen Befunde (bei Überschneidungen gewinnt der höhere Schweregrad). Ein einziger Behebungsdurchlauf deckt deinen Scan und ihren ab:
gitleaks dir . -f json -r gitleaks.json
credactor --from-gitleaks gitleaks.json --fix-all --yes .
--from-gitleaks / --from-trufflehog (oder eine [ingest]-Tabelle in .credactor.toml) erfordern ein Verzeichnisziel – weise Credactor auf dieselbe Wurzel, gegen die der Scanner gelaufen ist. Berichtspfade werden relativ zum Arbeitsverzeichnis aufgelöst, und ein Bericht ist eine Momentaufnahme: Generiere ihn nach dem Schwärzen oder Ändern des Baums neu. Siehe den CI-Integrationsleitfaden.
--replacement; --scan-history zum Scannen der Git-Commit-Historie--secure-delete (überschreibt und entfernt die .bak; erhöht die Hürde gegen beiläufige Wiederherstellung, keine forensische Garantie) oder --secure-backup-dir zum Speichern von Backups außerhalb des Repos# credactor:ignore- und .credactorignore-Allowlists (Globs, file:line, Wertliterale).credactor.toml.txt inklusive); --scan-json zum Einbeziehen von JSON; --fail-on-error zum Scheitern, wenn eine Datei nicht gelesen werden kann
.py.js.ts.jsx.tsx.sh.bash.env.cfg.ini.toml.yaml.yml.rb.go.java.php.cs.kt.tf.hcl.conf.config.properties.xml.pem.key.crt.txt
Plus .env.*- / .env-*-Varianten (.env.local, .env.production) und SSH-/Private-Key-Dateien (id_rsa, id_dsa, id_ecdsa, id_ed25519), alle nach Dateiname statt Erweiterung abgeglichen. JSON ist standardmäßig ausgeschlossen, da API-Antworten eine hohe Fehlalarmrate erzeugen; füge --scan-json hinzu, um es einzubeziehen. Eine direkt in der Befehlszeile benannte Datei wird gescannt, auch wenn ihre Erweiterung nicht in dieser Liste steht.
| Code | Bedeutung |
|---|---|
0 | Keine Befunde oder alle behoben |
1 | Unbehobene Befunde |
2 | Fehler (zum Beispiel: ungültiger Pfad, gefährliches --replacement, --ci --fix-all, ein fehlender oder ungültiger Aufnahmebericht oder --fail-on-error mit einer nicht lesbaren Datei) |
Ein Sicherheitstool sollte sicher zu installieren sein, nicht nur sicher auszuführen. Credactors Build- und Release-Pipeline ist durchgängig gehärtet; vollständige Details im Sicherheitsdokument.
pip install credactor zieht keine Drittanbieterpakete nach (nur das optionale [encoding]-Extra), sodass es zur Installationszeit nichts zu prüfen gibt.--require-hashes-Lockdatei, Build-Backend inklusive (python -m build --no-isolation gegen ein gepinntes setuptools), sodass eine manipulierte Abhängigkeit den Build scheitern lässt.scripts/audit_wheel.py das Wheel und das sdist byteweise mit dem committeten Quellcode (sha256 gegen git HEAD); jede hinzugefügte, fehlende oder veränderte Datei lässt das Gate scheitern, sodass ein Build-Schritt keinen Code unbemerkt einschleusen kann.contents: read standardmäßig, id-token: write nur für den Publish-Job.| Dokument | Beschreibung |
|---|---|
| Setup-Leitfaden | Installation, Konfiguration, CI/CD-Integration |
| Handbuch | Vollständige Referenz: jedes Flag, jeder Modus und jede Kombination, Ersatz- und Backup-Verhalten, Erkennung und Schweregrad, Exit-Codes und Einschränkungen (Verhalten testverifiziert) |
| Beispiele | Häufige Workflows mit Ausgabe |
| CI-Integration | Pre-Commit-Hooks, CI-Pipelines |
| Sicherheit | Bedrohungsmodell, Härtungsmaßnahmen, bekannte Einschränkungen |
| Changelog | Versionshistorie |
| Mitwirken | Entwicklungseinrichtung, Codestil, PR-Prozess |
| Haftungsausschluss | Einschränkungen, sichere Nutzung, Garantie |
Apache 2.0. Siehe LICENSE.