
Scannen. Schwärzen. Sauber committen.
Finde das Secret. Behebe es. Committe sauber.
Secret-Scanner sind gut darin, Alarm zu schlagen, und wenig hilfreich beim Löschen desselben. Sie liefern dir eine Liste geleakter Zugangsdaten und überlassen dir die Aufräumarbeit. Credactor schließt den Kreis: Es findet ein fest codiertes Secret und schreibt es direkt an Ort und Stelle um, sodass aus einem Leak mit einem einzigen Befehl von der Erkennung zur Behebung wird.
Zugangsdaten aus dem Quellcode herauszuhalten ist eine grundlegende Sicherheitspraxis, keine optionale. Credactor macht es günstig, diese Grundlage einzuhalten – auf deiner Maschine vor einem Commit oder in der CI vor einem Merge. Führe es eigenständig aus oder zusammen mit den Scannern, denen du bereits vertraust.
# Credactor findet dies:
db_password = "h8Tq2vKp9mRz4Wd"
# Standardmäßig schreibt es das Secret als Sentinel um, der zur Laufzeit laut fehlschlägt:
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 Redaktion schreibt Dateien in deinem Arbeitsverzeichnis um. Wenn ein Secret bereits committet wurde, rotiere den Schlüssel und bereinige zusätzlich die Historie (zum Beispiel mit
git filter-repo). Das Umschreiben einer Datei ist kein Ersatz für das Widerrufen eines geleakten Zugangsdatums.
REDACTED_BY_CREDACTOR-Sentinel, der zur Laufzeit fehlschlägt, oder durch eine sprachbewusste Umgebungsvariablen-Referenz (Python, JavaScript/TypeScript, Go, Java/Kotlin, Ruby, PHP und Shell) wie os.environ["KEY"]. Die Ersetzung ist gültiger Code. Wenn die Datei den passenden Import (zum Beispiel import os) noch nicht enthält, füge ihn hinzu..bak-Backups, Schutz vor Symlink-Grenzen und Dateiberechtigungen sowie vollständige Maskierung von Secrets in jeder Ausgabe. Wenn kein sicheres Backup geschrieben werden kann, überspringt Credactor die Datei, statt sie blind umzuschreiben, und ein Absturz mitten im Schreibvorgang lässt das Original intakt.--ci-Gate mit präzisen Exit-Codes, ein Pre-Commit-Hook und die Einbindung von Gitleaks-, TruffleHog- oder Betterleaks-Berichten. Erkenne mit dem Scanner, den du bereits ausführst, 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).
Auf macOS und Linux kannst du es stattdessen mit Homebrew installieren:
brew install rxb06/tap/credactor
Die Formel installiert in eine eigene virtuelle Umgebung und enthält das optionale
[encoding]-Extra, sodass eine Homebrew-Installation auch Secrets in Nicht-UTF-8-
Dateien erkennt. Ein einfaches pip install credactor lässt dieses Extra weg; füge es mit
pip install 'credactor[encoding]' hinzu, wenn du dieselbe Abdeckung möchtest.
Aus dem Quellcode:
git clone https://github.com/rxb06/credactor.git
cd credactor
pip install -e .
credactor funktioniert dann aus jedem Verzeichnis.
Führe zuerst
--dry-runaus und prüfe die Funde, bevor du redigierst. Falsch-Positive sind möglich, und unter--fix-allwird ein Falsch-Positiv umgeschrieben. Unterdrücke bekannt sichere Werte mit# credactor:ignoreoder einem.credactorignore-Eintrag.
credactor --dry-run . # scannen, nichts ändern
credactor . # scannen, dann interaktiv redigieren (y/n pro Fund)
credactor --fix-all . # alles nach einer Bestätigung redigieren
credactor --fix-all --yes . # nicht-interaktiv redigieren (CI / Skripte)
credactor --ci . # schreibgeschütztes Gate: Exit 1 bei Funden
credactor --replace-with env . # zu Umgebungsvariablen-Referenzen statt zum Sentinel redigieren
Der Hook prüft nur gestagte Inhalte, sodass ein bereits committetes Secret nicht erneut gemeldet wird. Verwende
credactor --scan-history ., um zu prüfen, was bereits im Repo ist.
# .pre-commit-config.yaml
repos:
- repo: https://github.com/rxb06/credactor
rev: v2.7.4 # auf den neuesten Release-Tag pinnen
hooks:
- id: credactor
- uses: rxb06/[email protected]
Die Action übergibt immer --ci, sodass sie meldet und gated, aber niemals den
Checkout umschreibt. Funde lassen den Schritt fehlschlagen; setze fail-on-findings: false, um
ohne Gate zu melden. Ein Fehler lässt den Schritt in jedem Fall fehlschlagen.
Statt bei Funden fehlzuschlagen, zu Code Scanning hochladen:
- uses: rxb06/[email protected]
with:
format: sarif
upload-sarif: true
fail-on-findings: false
Der Job benötigt permissions: security-events: write für den Upload. Siehe den
CI-Integrationsleitfaden für jeden Input,
einschließlich der Einbindung von Gitleaks-, TruffleHog- und Betterleaks-Berichten.
Credactor erkennt die Zugangsdatentypen, die am häufigsten leaken, und weist jedem eine Schweregradstufe zu, damit du auf einen Blick triagieren kannst.
| Kategorie | Beispiele | Schweregrad |
|---|---|---|
| Cloud-Provider-Schlüssel | AWS (AKIA…), GCP (AIza…), Stripe (sk_live_…), Slack (xoxb-…) | Kritisch |
| Plattform-Token | GitHub (ghp_, github_pat_), GitLab (glpat-), npm (npm_), PyPI (pypi-) | Kritisch |
| Private Keys | PEM-Blöcke (-----BEGIN … PRIVATE KEY-----) | Kritisch |
| JWTs | eyJ… dreisegmentige Token | Hoch |
| Verbindungszeichenfolgen | 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 | in Anführungszeichen gesetztes Hex (32–64 Zeichen) / Base64 (60+ Zeichen) | Mittel/Niedrig |
Deterministische Provider-Token (die oben genannten Präfixe) werden unabhängig von der Entropie gemeldet. Heuristische Detektoren (JWTs, Verbindungszeichenfolgen, Hex, Base64) müssen eine Entropie-Untergrenze überschreiten. Eigenständiges Hex oder Base64 wird nur gemeldet, wenn es in Anführungszeichen steht. Ein nicht in Anführungszeichen gesetzter Wert mit hoher Entropie wird nur bei einer Variable mit Zugangsdaten-Namen erfasst, was git-SHAs und Prüfsummen verschont. Die vollständigen Erkennungs- und Schweregradregeln findest du im Handbuch.