
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": []
}
src/vulnagentx)tests)| Fichier | Description |
|---|---|
tests/test_agents.py | Tests unitaires : sortie structurée de chaque agent et logique de contre-preuve. |
tests/test_end_to_end.py | Test de bout en bout : du dépôt d'entrée aux constats finaux, flux principal. |
tests/test_research_modules.py | Tests des nouveaux modules : construction du graphe Tree-sitter, chaîne d'exécution de vérification, métriques d'évaluation. |
OpenAI + Ollama local + bascule automatique via factory| 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). |
| Fichier | Description |
|---|
src/vulnagentx/__init__.py | Définition de la version du paquet et des exports. |
src/vulnagentx/app/__init__.py | Initialisation du sous-paquet app. |
src/vulnagentx/app/cli.py | Point d'entrée CLI (vulnagentx analyze). |
src/vulnagentx/app/api.py | Point d'entrée du service FastAPI (/health, /analyze). |
src/vulnagentx/app/schemas.py | Schémas Pydantic pour les requêtes/réponses API. |
src/vulnagentx/core/__init__.py | Initialisation du sous-paquet core. |
src/vulnagentx/core/state.py | Modèle d'état global : zones, preuves, sorties des agents, constat, journaux, métriques. |
src/vulnagentx/core/screening.py | Première phase de filtrage rapide, extraction des zones suspectes. |
src/vulnagentx/core/context_expansion.py | Expansion du contexte : extraction de fenêtres de code minimales autour des localisations. |
src/vulnagentx/core/scheduler.py | Stratégie d'escalade sensible à la confiance (early_exit/expert_review/verification). |
src/vulnagentx/core/verification.py | Module de vérification dynamique optionnelle (actuellement une version factice sécurisée). |
src/vulnagentx/core/evidence_fusion.py | Fusion des preuves multi-agents, sortie des constats finaux. |
src/vulnagentx/core/workflow.py | Point d'orchestration de bout en bout VulnAgentWorkflow. |
src/vulnagentx/agents/__init__.py | Agrégation des exports d'agents. |
src/vulnagentx/agents/base.py | Classe abstraite de base pour les agents et outil de récupération de contexte. |
src/vulnagentx/agents/router_agent.py | Agent routeur : attribue un agent expert à chaque zone suspecte. |
src/vulnagentx/agents/semantic_agent.py | Agent sémantique : risques au niveau sémantique (pointeur nul, désérialisation, exception avalée). |
src/vulnagentx/agents/security_agent.py | Agent sécurité : règles de vulnérabilité de sécurité (injection de commande, injection SQL, dépassement de mémoire, etc.). |
src/vulnagentx/agents/logic_bug_agent.py | Agent logique : défauts métier/flux de contrôle (limites, division par zéro, absence d'autorisation, etc.). |
src/vulnagentx/agents/sceptic_agent.py | Agent sceptique : génération de contre-preuves, pénalités de conflit, réduction de confiance. |
src/vulnagentx/adapters/__init__.py | Initialisation du sous-paquet d'adaptateurs. |
src/vulnagentx/adapters/sandbox_adapter.py | Exécuteur sandbox de sous-processus restreint (timeout, sans shell) pour la vérification. |
src/vulnagentx/adapters/semgrep_adapter.py | Adaptateur CLI Semgrep (activation optionnelle). |
src/vulnagentx/adapters/treesitter_adapter.py | Adaptateur Tree-sitter réel (analyse AST et relations d'appel/import si disponibles, sinon rétrogradation). |
src/vulnagentx/adapters/llm/__init__.py | Agrégation des exports des adaptateurs LLM. |
src/vulnagentx/adapters/llm/base.py | Interface de protocole des adaptateurs LLM. |
src/vulnagentx/adapters/llm/mock_adapter.py | LLM mock testable hors ligne. |
src/vulnagentx/adapters/llm/openai_adapter.py | Adaptateur SDK officiel OpenAI. |
src/vulnagentx/adapters/llm/local_adapter.py | Adaptateur de modèle local (API HTTP Ollama). |
src/vulnagentx/adapters/llm/factory.py | Sélection automatique de l'adaptateur LLM selon la configuration, fallback vers Mock. |
src/vulnagentx/retrieval/repo_graph.py | Indexation du graphe de code et récupération des fichiers voisins (basée sur le chevauchement des symboles AST). |
src/vulnagentx/datasets/base.py | Structure générique d'échantillon de jeu de données et lecture JSONL/CSV. |
src/vulnagentx/datasets/devign.py | Point d'entrée de chargement des données Devign. |
src/vulnagentx/datasets/bigvul.py | Point d'entrée de chargement des données Big-Vul. |
src/vulnagentx/datasets/primevul.py | Point d'entrée de chargement des données PrimeVul. |
src/vulnagentx/datasets/jit.py | Point d'entrée de chargement des données JIT. |
src/vulnagentx/eval/detection_metrics.py | Métriques de détection (Precision/Recall/F1/Accuracy). |
src/vulnagentx/eval/localization_metrics.py | Métriques de localisation (Top-1/Top-3/MRR). |
src/vulnagentx/eval/efficiency_metrics.py | Métriques d'efficacité (temps moyen, P95, nombre moyen de constats). |
src/vulnagentx/eval/ablations.py | Logique d'exécution des expériences d'ablation. |
src/vulnagentx/utils/config.py | Centre de configuration du flux de travail (commutateurs env/CLI/API). |