
VulnAgent-X: Un cadre agentique en couches pour la détection de vulnérabilités au niveau du dépôt
VulnAgent-X est un prototype de détection de vulnérabilités/défauts multi-agent destiné à la reproduction d'articles. Il prend en entrée un dépôt local ou un diff, et produit des résultats structurés, des chaînes de preuves, des localisations, des niveaux de confiance et des journaux d'expérience.
chemin du dépôt ou diff unifiéscreening -> expansion de contexte -> ordonnanceur -> routeur -> experts -> sceptique -> vérification (maquette) -> fusion des preuvestype_de_problèmeemplacement (fichier + plage de lignes)résumé_des_preuvesconfiancesévéritécwe_optionnelindice_de_correctionchaîne_de_preuvescontre-preuvesscreening : filtrage rapide des zones suspectes (règles + signaux de métadonnées)expansion_de_contexte : extraction du « contexte minimal suffisant » (fenêtres autour des localisations suspectes)ordonnanceur : stratégie d'escalade selon la confiance et le risque (early_exit / expert_review / vérification)agent_routeur : sélection d'un agent expert pour chaque zone suspectesémantique/sécurité/logique : formulations structurées et preuves selon différents points de vueagent_sceptique : génération de contre-preuves et signaux de pénalitévérification : vérification dynamique optionnelle (actuellement une implémentation de sécurité factice)fusion_des_preuves : fusion unifiée et sortie des constats finauxPrérequis : Python 3.11+ (fonctionne également avec des versions plus récentes)
cd /Users/xiaolu/Documents/Python_code/vulnAgentX
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
Analyser un dépôt complet :
.venv/bin/vulnagentx analyze --repo /chemin/vers/depot --output json
Analyser un fichier diff :
.venv/bin/vulnagentx analyze --diff-file /chemin/vers/patch.diff --output json
Sortie condensée :
.venv/bin/vulnagentx analyze --repo /chemin/vers/depot --output summary
Démarrer le service :
.venv/bin/uvicorn vulnagentx.app.api:app --reload
Vérification de l'état de santé :
curl http://127.0.0.1:8000/health
Lancer une analyse :
curl -X POST http://127.0.0.1:8000/analyze \
-H "Content-Type: application/json" \
-d '{"repo_path":"/chemin/vers/depot"}'
docker compose -f docker/docker-compose.yml up --build
.venv/bin/ruff check src tests
.venv/bin/mypy src
.venv/bin/pytest
{
"run_id": "...",
"findings": [
{
"issue_type": "injection_de_commande",
"location": {"file_path": "app.py", "start_line": 42, "end_line": 42},
"evidence_summary": "Surface d'exécution de commande détectée...",
"confidence": 0.87,
"severity": "critique",
"optional_cwe": "CWE-78",
"fix_hint": "Éviter la composition de commandes shell...",
"source_agents": ["security_agent", "semantic_agent"],
"evidence_chain": [],
"counter_evidence": []
}
],
"metrics": {
"runtime_seconds": 0.07
},
"logs": []
}
| Fichier | Description |
|---|---|
.env.example | Modèle de variables d'environnement (niveau de journalisation, etc. paramètres optionnels). |
pyproject.toml | Construction du projet, dépendances, points d'entrée des scripts, configuration pytest/ruff/mypy. |
README.md | README principal (avec bouton de changement de langue, par défaut en chinois). |
README.zh.md | Documentation complète en chinois. |
README.en.md | Documentation complète en anglais. |
docker/Dockerfile | Fichier de construction de l'image conteneur du service API. |
docker/docker-compose.yml | Démarrage local en un clic du service conteneurisé. |
rules/semgrep/vulnagentx-rules.yml | Ensemble de règles Semgrep intégrées (injection de commande / injection SQL / désérialisation / API C non sécurisée). |
scripts/run_experiment.py | Script d'exécution d'expériences par lots sur un jeu de données, sortie JSONL de prédictions. |
scripts/evaluate.py | Lecture des sorties d'expériences et calcul des métriques de détection/localisation/efficacité. |
scripts/run_ablation.py | Script d'expérience d'ablation (no_semgrep/no_treesitter/no_sceptic/no_verification). |
src/vulnagentx)