garak
Scanner de vulnérabilités LLM open-source maintenu par NVIDIA. Exécute des dizaines de sondes pour l'injection de prompt, les jailbreaks, l'hallucination, la fuite de données, et plus encore contre un modèle cible. NVIDIA-maintained open-source LLM vulnerability scanner. Runs dozens of probes for prompt injection, jailbreaks, hallucination, data leakage, and more against a target model.
↗ https://github.com/NVIDIA/garakOverview
garak (“the LLM vulnerability scanner”) is a pip-installable CLI tool that probes an LLM or LLM-backed endpoint the way a fuzzer probes a binary. It bundles dozens of probes across categories — prompt injection, jailbreaks, encoding-based bypasses, hallucination, training-data leakage, toxicity, and packagehallucination (checks whether a model recommends non-existent/typosquat package names, a real supply-chain risk). Results are scored by pluggable detectors and written to a report you can triage.
Installation
Install from PyPI
pip install garak
Verify
python -m garak --version
Basic Scan
Scan an OpenAI-compatible model with a single probe module
garak --model_type openai --model_name <model_name> --probes promptinject
Scan a local Hugging Face model
garak --model_type huggingface --model_name <model_name>
Scan every probe garak ships (slow, generates a lot of traffic)
garak --model_type openai --model_name <model_name> --probes all
Targeting a custom REST endpoint
Generic REST target — point at any HTTP-exposed model API
garak --model_type rest \
--model_name my_target \
--generator_option_file <rest_config.json> \
--probes dan,encoding,malwaregen
// rest_config.json
{
"rest": {
"uri": "<target_url>/v1/chat",
"headers": {"Authorization": "Bearer <api_key>"},
"req_template_json_object": {"prompt": "$INPUT"},
"response_json_field": "$.output"
}
}
Selecting probes and detectors
List all available probes
garak --list_probes
Run only jailbreak (DAN-family) probes
garak --model_type openai --model_name <model_name> --probes dan
Check for package-hallucination supply-chain risk
garak --model_type openai --model_name <model_name> --probes packagehallucination
Narrow to one detector
garak --model_type openai --model_name <model_name> --probes promptinject --detectors promptinject.AttackRogueString
Tips
- Reports land in
~/.local/share/garak/garak_runs/(or--report_prefix) as JSONL plus an HTML summary — good for attaching to a pentest report. - Start with a narrow
--probesset beforeall; a full run against a hosted API can burn significant token spend. - garak’s generator plugins (
--model_type) cover OpenAI, Hugging Face, Cohere, ggml/llama.cpp, Replicate, and raw REST — check--list_generatorsfor the full list before writing a custom one.
Help / Man page
garak [options]
CORE OPTIONS:
--model_type TYPE Generator plugin: openai, huggingface, rest, ggml,
replicate, cohere, nim, ...
--model_name NAME Model identifier for the chosen generator
--probes LIST Comma-separated probe modules, or 'all'
--detectors LIST Override auto-selected detectors
--generator_option_file FILE JSON config for the generator (e.g. REST headers)
--report_prefix PREFIX Custom path/prefix for output report
INFO:
--list_probes List all probe modules
--list_detectors List all detector modules
--list_generators List all generator plugins
--version Show version
EXAMPLE PROBE CATEGORIES:
dan Jailbreak / DAN-style prompts
promptinject Prompt injection attack payloads
encoding Encoding-based filter bypass (base64, rot13, ...)
malwaregen Malicious code generation
packagehallucination Non-existent package name recommendations
leakreplay Training data / verbatim leakage
toxicity Toxic/harmful content generation
Vue d’ensemble
garak (“le scanner de vulnérabilités LLM”) est un outil CLI installable via pip qui sonde un LLM ou un endpoint adossé à un LLM de la même manière qu’un fuzzer sonde un binaire. Il embarque des dizaines de sondes réparties en catégories : injection de prompt, jailbreaks, contournements basés sur l’encodage, hallucination, fuite de données d’entraînement, toxicité, et packagehallucination (vérifie si un modèle recommande des noms de paquets inexistants/typosquattés, un risque réel de supply-chain). Les résultats sont notés par des détecteurs interchangeables et écrits dans un rapport que l’on peut trier.
Installation
# Installer depuis PyPI
pip install garak
# Vérifier
python -m garak --version
Scan de base
# Scanner un modèle compatible OpenAI avec un seul module de sonde
garak --model_type openai --model_name <model_name> --probes promptinject
# Scanner un modèle Hugging Face local
garak --model_type huggingface --model_name <model_name>
# Scanner toutes les sondes que garak embarque (lent, génère beaucoup de trafic)
garak --model_type openai --model_name <model_name> --probes all
Cibler un endpoint REST personnalisé
# Cible REST générique : viser n'importe quelle API de modèle exposée en HTTP
garak --model_type rest \
--model_name my_target \
--generator_option_file <rest_config.json> \
--probes dan,encoding,malwaregen
// rest_config.json
{
"rest": {
"uri": "<target_url>/v1/chat",
"headers": {"Authorization": "Bearer <api_key>"},
"req_template_json_object": {"prompt": "$INPUT"},
"response_json_field": "$.output"
}
}
Sélectionner sondes et détecteurs
# Lister toutes les sondes disponibles
garak --list_probes
# Lancer uniquement les sondes de jailbreak (famille DAN)
garak --model_type openai --model_name <model_name> --probes dan
# Vérifier le risque de supply-chain lié à l'hallucination de paquets
garak --model_type openai --model_name <model_name> --probes packagehallucination
# Restreindre à un seul détecteur
garak --model_type openai --model_name <model_name> --probes promptinject --detectors promptinject.AttackRogueString
Conseils
- Les rapports atterrissent dans
~/.local/share/garak/garak_runs/(ou--report_prefix) au format JSONL plus un résumé HTML : pratique à joindre à un rapport de pentest. - Commencer avec un jeu
--probesrestreint avantall; un run complet contre une API hébergée peut coûter significativement en tokens. - Les plugins générateurs de garak (
--model_type) couvrent OpenAI, Hugging Face, Cohere, ggml/llama.cpp, Replicate, et REST brut : vérifier--list_generatorspour la liste complète avant d’en écrire un personnalisé.
Aide / Page de manuel
garak [options]
CORE OPTIONS:
--model_type TYPE Generator plugin: openai, huggingface, rest, ggml,
replicate, cohere, nim, ...
--model_name NAME Model identifier for the chosen generator
--probes LIST Comma-separated probe modules, or 'all'
--detectors LIST Override auto-selected detectors
--generator_option_file FILE JSON config for the generator (e.g. REST headers)
--report_prefix PREFIX Custom path/prefix for output report
INFO:
--list_probes List all probe modules
--list_detectors List all detector modules
--list_generators List all generator plugins
--version Show version
EXAMPLE PROBE CATEGORIES:
dan Jailbreak / DAN-style prompts
promptinject Prompt injection attack payloads
encoding Encoding-based filter bypass (base64, rot13, ...)
malwaregen Malicious code generation
packagehallucination Non-existent package name recommendations
leakreplay Training data / verbatim leakage
toxicity Toxic/harmful content generation