
Scanner de secrets haute performance. Interface en ligne de commande, bibliothèque Go, extension Burp Suite et extension Chrome. 487 règles de détection avec validation en direct des identifiants.
Titus est un scanner de secrets haute performance qui détecte les identifiants, clés d'API et jetons dans le code source, les fichiers et l'historique git. Il est livré avec 487 règles de détection couvrant des centaines de services et types d'identifiants, issues de NoseyParker et Kingfisher. Titus s'exécute en tant que CLI, bibliothèque Go, extension Burp Suite et extension de navigateur Chrome — tous partageant le même moteur de détection et le même ensemble de règles.
Conçu pour les ingénieurs en sécurité, les testeurs d'intrusion et les équipes DevSecOps, Titus combine la correspondance regex accélérée par Hyperscan/Vectorscan avec la validation d'identifiants en direct pour trouver et vérifier les secrets divulgués dans l'ensemble de votre base de code.
Téléchargez un binaire précompilé depuis la page Releases, ou compilez depuis les sources :```bash make build
Le binaire se trouvera dans `dist/titus`.
## Démarrage rapide```bash
# Scan a file for secrets
titus scan path/to/file.txt
# Scan a directory for leaked credentials
titus scan path/to/directory
# Scan a public GitHub repository (no token needed)
titus scan github.com/org/repo
# Scan a public GitLab project (no token needed)
titus scan gitlab.com/namespace/project
# Scan git history for secrets in past commits
titus scan --git path/to/repo
# Scan a Docker / OCI image (pulled from a registry — no docker daemon required)
titus scan --docker alpine:latest
# Validate detected secrets against source APIs
titus scan path/to/code --validate
Les résultats sont écrits dans un datastore (titus.ds par défaut) et affichés dans la console.
Scannez directement les dépôts publics par URL — aucun jeton d'API requis :```bash
titus scan github.com/kubernetes/kubernetes
titus scan gitlab.com/gitlab-org/cli
titus scan https://github.com/org/repo titus scan https://gitlab.com/namespace/project.git
Pour l'analyse à l'échelle de l'organisation ou de l'utilisateur, utilisez les sous-commandes dédiées :```bash
# Scan all public repos in a GitHub org
titus github --org kubernetes
# Scan all repos in a GitHub org with a token (private repos + higher rate limits)
titus github --org kubernetes --token $GITHUB_TOKEN
# Scan all repos for a GitHub user
titus github --user octocat
# Scan all projects in a GitLab group
titus gitlab scan --group mygroup --token $GITLAB_TOKEN
# Scan a single repo with git history (finds deleted secrets)
titus github owner/repo --git
Les jetons sont facultatifs pour les dépôts publics. Définissez GITHUB_TOKEN ou GITLAB_TOKEN (ou utilisez --token) pour l'accès aux dépôts privés et des limites de débit d'API plus élevées.
Analysez directement les images de conteneurs — aucun démon docker, aucun binaire docker requis. Titus extrait les images directement depuis n'importe quel registre OCI via HTTPS (en utilisant les identifiants de ~/.docker/config.json), ou lit les images depuis une archive docker save locale ou un répertoire de disposition d'image OCI. Il analyse ensuite les métadonnées du manifeste/de la configuration de l'image et chaque fichier régulier de chaque couche, y compris les fichiers des couches inférieures supprimés par les couches supérieures (car les secrets peuvent rester récupérables depuis l'historique de l'image).```bash
titus scan --docker alpine:latest titus scan docker://ghcr.io/owner/repo:tag
titus scan --docker ./my-app.tar
titus scan --docker ./img/
L'authentification utilise votre configuration Docker / Podman existante (`~/.docker/config.json`, `${XDG_RUNTIME_DIR}/containers/auth.json`). Les registres privés nécessitant une nouvelle connexion doivent d'abord être authentifiés avec `docker login` (ou `podman login`, ou `crane auth login`) — titus ne demande pas d'identifiants.
### Consultation des résultats d'analyse
Utilisez `report` pour relire les résultats d'une analyse précédente :```bash
# Human-readable summary of detected secrets
titus report
# JSON output for programmatic processing
titus report --format json
# SARIF output for CI/CD integration with GitHub Advanced Security
titus report --format sarif
# Report from a specific datastore
titus report --datastore path/to/titus.ds
Vous pouvez également contrôler le format de sortie au moment du scan avec --format :```bash
titus scan path/to/code --format json
### Validation des secrets détectés
Passez `--validate` pendant une analyse pour vérifier les secrets détectés auprès de leurs API sources :```bash
titus scan path/to/code --validate
La validation s'exécute en parallèle (4 workers par défaut, configurables avec --validate-workers) et marque chaque résultat comme confirmé, infirmé ou inconnu.
titus rules list
titus scan path/to/code --rules-include "aws,gcp"
titus scan path/to/code --rules-exclude "kingfisher.generic"
titus scan path/to/code --rules path/to/custom-rules.yaml
titus scan path/to/code --include-noisy
### Extraction de secrets à partir de fichiers binaires
Titus peut extraire du texte à partir de formats de fichiers binaires et analyser le contenu à la recherche de secrets :```bash
# Extract and scan all supported binary formats
titus scan path/to/files --extract=all
# Target specific formats
titus scan path/to/files --extract=xlsx,docx,pdf,zip
Les formats pris en charge incluent les documents Office (xlsx, docx, pptx, odp, ods, odt), les PDF, les notebooks Jupyter, les bases de données SQLite, les e-mails (eml, rtf) et les archives (zip, tar, tar.gz, jar, war, ear, apk, ipa, crx, xpi, 7z). Les archives sont extraites de manière récursive jusqu'à une profondeur et des limites de taille configurables.```bash
titus scan path/to/files --extract=all
--extract-max-size 10MB
--extract-max-total 100MB
--extract-max-depth 5
Pour les bases de données SQLite, Titus extrait le texte de toutes les tables (1000 lignes par table par défaut). Utilisez `--sqlite-row-limit` pour ajuster :```bash
# Full dump of all SQLite tables (no row limit)
titus scan path/to/files --extract=all --sqlite-row-limit 0
# Custom row limit per table
titus scan path/to/files --extract=all --sqlite-row-limit 5000
Chaque finding produit par Titus porte un score numérique de 0 à 100 et un niveau de gravité :
| Score | Gravité |
|---|---|
| 0–20 | info |
| 21–40 | low |
| 41–60 | medium |
| 61–80 | high |
| 81–100 | critical |
Les scores partent du base_score de la règle et sont ajustés par des modificateurs — des conditions qui augmentent ou diminuent le score en fonction de ce qui est connu sur le credential :```bash
titus scan path/to/code
titus scan path/to/code --score-scope
titus scan path/to/code --accessibility public # no penalty for public repos titus scan path/to/code --accessibility private # -25 penalty (default for local scans)
Titus est livré avec des scoreurs YAML pour les identifiants AWS, les PAT GitHub et les jetons Slack, ainsi que des scoreurs SDK basés sur Go qui effectuent une énumération en direct des politiques IAM (AWS) et des vérifications des permissions de dépôt (PAT GitHub à granularité fine) lorsque `--score-scope` est activé.
Consultez [docs/scoring.md](https://github.com/praetorian-inc/titus/blob/main/docs/scoring.md) pour la référence complète : niveaux de gravité, types de modificateurs, détails des scoreurs intégrés et comment écrire vos propres scoreurs YAML ou Go.
## Bibliothèque Go pour la détection de secrets
Titus peut être importé en tant que bibliothèque Go pour ajouter la détection de secrets à vos propres outils et pipelines.```bash
go get github.com/praetorian-inc/titus
| --no-color | Désactive la sortie colorée. |
| --no-banner | Supprime la bannière de démarrage. |
| --no-progress | Désactive les barres de progression. |
| --no-summary | Supprime le résumé final. |
| --no-stats | Supprime les statistiques finales. |
| --no-warnings | Supprime les avertissements. |
| --no-errors | Supprime les erreurs. |
| --no-debug | Supprime les messages de débogage. |
| --no-verbose | Supprime les messages verbeux. |
| --no-quiet | Supprime le mode silencieux. |
| --no-silent | Supprime le mode silencieux. |
| --no-trace | Supprime les messages de trace. |
| --no-log | Supprime la journalisation. |
| --no-log-file | Supprime le fichier de journal. |
| --no-log-level | Supprime le niveau de journalisation. |
| --no-log-format | Supprime le format de journalisation. |
| --no-log-output | Supprime la sortie de journalisation. |
| --no-log-rotate | Supprime la rotation des journaux. |
| --no-log-max-size | Supprime la taille maximale des journaux. |
| --no-log-max-backups | Supprime le nombre maximal de sauvegardes de journaux. |
| --no-log-max-age | Supprime l'âge maximal des journaux. |
| --no-log-compress | Supprime la compression des journaux. |
| --no-log-timestamp | Supprime l'horodatage des journaux. |
| --no-log-color | Supprime la couleur des journaux. |
| --no-log-json | Supprime le format JSON des journaux. |
| --no-log-syslog | Supprime la journalisation syslog. |
| --no-log-journald | Supprime la journalisation journald. |
| --no-log-file-rotate | Supprime la rotation des fichiers journaux. |
| --no-log-file-max-size | Supprime la taille maximale des fichiers journaux. |
| --no-log-file-max-backups | Supprime le nombre maximal de sauvegardes de fichiers journaux. |
| --no-log-file-max-age | Supprime l'âge maximal des fichiers journaux. |
| --no-log-file-compress | Supprime la compression des fichiers journaux. |
| --no-log-file-timestamp | Supprime l'horodatage des fichiers journaux. |
| --no-log-file-color | Supprime la couleur des fichiers journaux. |
| --no-log-file-json | Supprime le format JSON des fichiers journaux. |
| --no-log-file-syslog | Supprime la journalisation syslog des fichiers journaux. |
| --no-log-file-journald | Supprime la journalisation journald des fichiers journaux. |```go
package main
import ( "fmt" "log"
"github.com/praetorian-inc/titus"
)
func main() { // Initialize the secrets scanner with default rules scanner, err := titus.NewScanner() if err != nil { log.Fatal(err) } defer scanner.Close()
// Scan a string for API keys, tokens, and credentials
matches, err := scanner.ScanString(`aws_access_key_id = AKIAIOSFODNN7EXAMPLE`)
if err != nil {
log.Fatal(err)
}
for _, match := range matches {
fmt.Printf("%s (rule: %s) at line %d\n",
match.RuleName, match.RuleID,
match.Location.SourceSpan.Start.Line,
)
}
}
La bibliothèque prend également en charge l'analyse d'octets et de fichiers, la validation des secrets détectés et le chargement de règles personnalisées :```go
// Scan a file for leaked credentials
matches, err := scanner.ScanFile("/path/to/config.json")
// Enable validation to check if detected secrets are live
scanner, err := titus.NewScanner(titus.WithValidation())
// Load custom detection rules for organization-specific secrets
rules, err := titus.LoadRulesFromFile("/path/to/rules.yaml")
scanner, err := titus.NewScanner(titus.WithRules(rules))
Voir docs/library-usage.md pour la référence complète de l'API, les modèles de concurrence et d'autres exemples.
L'extension Burp analyse les réponses HTTP à la recherche de secrets pendant le trafic proxy et les tests d'intrusion actifs.
make install-burp
Ensuite, chargez `dist/titus-burp-1.0.0-all.jar` dans Burp Suite sous Extensions > Add.
#### Windows (Téléchargement depuis les Releases)
1. Téléchargez `titus-windows-amd64.exe` et `titus-burp-<version>.jar` depuis [Releases](../../releases)
2. Créez le répertoire Titus et installez le binaire : ```powershell
mkdir %USERPROFILE%\.titus
copy titus-windows-amd64.exe %USERPROFILE%\.titus\titus.exe
titus-burp-<version>.jar depuis Releases :
titus-linux-amd64 ou titus-linux-arm64 pour Linuxtitus-darwin-amd64 ou titus-darwin-arm64 pour macOSL'extension lance un processus titus serve en arrière-plan et communique via stdin/stdout en utilisant NDJSON. Les règles de détection sont chargées une seule fois au démarrage.
L'extension ajoute un onglet Titus à Burp avec trois sous-onglets :
Secrets : Tous les secrets détectés avec filtrage par type, hôte et statut de validation.
Titus Burp Suite extension secrets tab showing detected API keys and credentials with validation status
Statistics : Vue agrégée des secrets groupés par type et par hôte.

Settings : Configurez les options d'analyse, la validation et les mappages de gravité.
Titus Burp Suite extension settings tab with scan configuration options
Lors de la consultation d'une requête dans Burp, un onglet Titus apparaît dans l'inspecteur de réponse si des secrets sont détectés, offrant un accès rapide aux résultats sans basculer vers l'onglet Titus principal.
Titus tab in Burp Suite response inspector highlighting detected secrets in HTTP responses
L'extension Chrome analyse les pages web à la recherche de secrets lors des évaluations de sécurité des applications web.
make build-extension
1. Accédez à `chrome://extensions/`
2. Activez le **Mode développeur**
3. Cliquez sur **Charger l'extension non empaquetée** et sélectionnez le répertoire `extension/`
### Fonctionnalités de l'extension de navigateur
- Analyse le JavaScript et les feuilles de style en ligne et externes à la recherche de clés API et de jetons
- Analyse localStorage et sessionStorage à la recherche d'identifiants divulgués
- Capture facultative des réponses réseau pour une détection complète des secrets
- Résultats affichés dans le popup et le tableau de bord
<img width="1719" height="958" alt="Popup de l'extension Chrome Titus affichant les secrets détectés sur une page web" src="https://assets.kitploit.com/production/public/readmes/11969/057a24e2746412ceabe1aac0292a2de463de1efee5bca2489ca34b59d8b0dc2c.png" />
<img width="1744" height="827" alt="Tableau de bord de l'extension Chrome Titus avec les résultats agrégés de détection de secrets" src="https://assets.kitploit.com/production/public/readmes/11969/265d972fadcc7f212944d7a1d8fd58a43446e7199d1209900e83b96a546ffb00.png" />
### Avis de sécurité
L'extension de navigateur supprime les en-têtes Content Security Policy et CORS des pages visitées afin d'analyser les ressources externes. Cela affaiblit la posture de sécurité des sites que vous visitez tant que l'extension est active. **Activez-la uniquement pendant des tests de sécurité actifs.**
## Compilation depuis les sources
### Compilation standard (accélérée par Vectorscan)
Par défaut, Titus se compile avec [Vectorscan](https://github.com/VectorCamp/vectorscan) (ARM) / [Hyperscan](https://github.com/intel/hyperscan) (x86) pour une correspondance regex accélérée par SIMD. Cela nécessite CGO, la bibliothèque C et `pkg-config` (que cgo utilise pour localiser la bibliothèque). `make build` vérifie leur présence et tente d'installer tout élément manquant via Homebrew / apt / dnf :```bash
# Build the CLI binary with vectorscan acceleration (outputs to dist/titus)
make build
# Build the Burp Suite extension JAR
make build-burp
# Build the Chrome browser extension
make build-extension
# Run unit tests
make test
# Run integration tests
make integration-test
Vous verrez [vectorscan] N/N rules compiled for Hyperscan au démarrage lorsque le moteur accéléré est actif.
Pour installer vous-même la bibliothèque C au lieu de compter sur l'installation automatique :```bash
brew install pkg-config vectorscan
sudo apt-get install pkg-config libhyperscan-dev
sudo dnf install pkgconf-pkg-config vectorscan-devel
git clone --depth 1 --branch vectorscan/5.4.11 https://github.com/VectorCamp/vectorscan.git cd vectorscan && cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local && cmake --build build && sudo cmake --install build
Si vous invoquez `go build` directement (par exemple, lors de l'intégration de Titus), passez le tag et activez CGO :```bash
# macOS (Homebrew) — adjust PKG_CONFIG_PATH to your installed version
CGO_ENABLED=1 PKG_CONFIG_PATH="$(brew --prefix vectorscan)/lib/pkgconfig" \
go build -tags vectorscan -o dist/titus ./cmd/titus
# Linux (system-installed)
CGO_ENABLED=1 go build -tags vectorscan -o dist/titus ./cmd/titus
Si vous ne pouvez pas installer la bibliothèque C — ou si vous souhaitez un binaire entièrement portable et statique — compilez plutôt le moteur en Go pur. Titus bascule automatiquement vers celui-ci à l'exécution lorsque vectorscan n'est pas compilé :```bash
make build-pure
make build-static
#### Cache de base de données Hyperscan automatique
Titus sérialise automatiquement chaque base de données Hyperscan compilée avec succès dans le cache utilisateur standard. Les instances de scanner ultérieures avec exactement les mêmes règles ordonnées et les mêmes indicateurs chargent cette base de données au lieu de la recompiler. Le fichier de cache est le flux d'octets non modifié produit par `hs_serialize_database` de Hyperscan, et Titus le charge avec `hs_deserialize_database`.
`TITUS_CACHE_DIR` peut remplacer l'emplacement du cache. Les écritures dans le cache sont atomiques et au mieux : un cache indisponible ou en lecture seule n'empêche pas l'analyse. Une base de données manquante, corrompue, incompatible ou avec une empreinte différente déclenche une compilation normale et actualise le cache lorsque cela est possible.
Les bases de données sérialisées sont spécifiques à l'architecture, aux fonctionnalités du CPU et à la version de Hyperscan. Titus détecte les entrées incompatibles lors de la désérialisation et les remplace par une base de données compilée pour l'environnement d'exécution actuel.
## Contribuer
Les contributions sont les bienvenues ! Consultez [CONTRIBUTING.md](https://github.com/praetorian-inc/titus/blob/main/CONTRIBUTING.md) pour les directives sur la façon de contribuer à Titus.
## Licence
Apache License 2.0 — voir [LICENSE](https://github.com/praetorian-inc/titus/blob/main/LICENSE).
Les règles de détection sont dérivées de [NoseyParker](https://github.com/praetorian-inc/noseyparker) (Praetorian Security, Inc.) et [Kingfisher](https://github.com/mongodb/kingfisher) (MongoDB, Inc.), tous deux sous licence Apache 2.0. Voir [NOTICE](https://github.com/praetorian-inc/titus/blob/main/NOTICE) pour l'attribution complète.