Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
qlcoder — Framework agente per la sintesi di query CodeQL | Kitploit
Strumenti/GitHubGitHub/neuralprogram/qlcoder
Analisi StaticaScanner di VulnerabilitàAnalisi delle VulnerabilitàAnalisi del CodicePaper e RicercaReverse Engineering Assistito dall'IA
GitHubneuralprogram/qlcoder

qlcoder

Framework agente per la sintesi di query CodeQL

Vedi Repository
255135 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

QLCoder

Framework agentico per la sintesi di query CodeQL

Sommario

  • Panoramica
  • Installazione
    • Docker (Consigliato)
    • Nativo (Linux)
  • Utilizzo
  • Avvio Rapido
  • Strumenti di Sviluppo
  • Esempi
  • Ambiente dell'Articolo
  • Contributi
  • Team
  • Citazione
  • Progetti Affiliati

Panoramica

QLCoder Iterative Refinement

QLCoder è un framework per l'utilizzo di LLM nella sintesi di query CodeQL end-to-end per il rilevamento di vulnerabilità. Data la metadati di una CVE esistente, un LLM e un agente di codifica, QLCoder sintetizza iterativamente una query CodeQL per rilevare la CVE esistente. La query iniziale è un template di query di percorso CodeQL popolato da un AST estratto dal diff. Durante la sintesi della query, l'agente di codifica ha accesso a strumenti per interfacciarsi con un database RAG e con il language server CodeQL. Successivamente, la query può essere utilizzata per analisi multivariante, test di regressione o come guida per la scrittura di query CodeQL.

Installazione

Docker (Consigliato)

Scarica lo strumento

Passo 1: Installare CodeQL

Nota - Nell'articolo è stata utilizzata la versione 2.22.2 di CodeQL. Tuttavia, è possibile utilizzare qualsiasi versione (e linguaggio). QLCoder memorizza i QL pack della versione locale di CodeQL nel database vettoriale. I percorsi sono configurati in .env.

Scarica una versione appropriata del bundle CodeQL Action dalla pagina delle release di CodeQL Action.

  • Per la versione più recente: Visita la release più recente e scarica il bundle appropriato per il tuo sistema operativo:

    • codeql-bundle-osx64.tar.gz per macOS
    • codeql-bundle-linux64.tar.gz per Linux
  • Per una versione specifica (es. 2.22.2): Vai alla pagina delle release di CodeQL Action, trova la release taggata codeql-bundle-v2.22.2 e scarica il bundle appropriato per la tua piattaforma.

Estrai in ~/codeql (o in un altro percorso — aggiorna CODEQL_HOME in .env di conseguenza):

root@kitploit:~
tar -xzf codeql-bundle-<platform>.tar.gz -C ~/

Passo 2: Installare il server MCP CodeQL LSP

Clona il server MCP CodeQL LSP e compilalo.

root@kitploit:~
git clone https://github.com/neuralprogram/codeql-lsp-mcp ~/codeql-lsp-mcp
cd ~/codeql-lsp-mcp
npm install
npm run build

Passo 3: Configurare e avviare i servizi

root@kitploit:~
cp .env.example .env
echo "APP_UID=$(id -u)" >> .env
echo "APP_GID=$(id -g)" >> .env

Inserisci la tua chiave API e i percorsi CodeQL in .env:

root@kitploit:~
ANTHROPIC_API_KEY=...

# I percorsi dei QL pack dipendono dalla versione di CodeQL.
# Trova i numeri di versione con:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → usa per SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → usa per LIBRARY_QLPACK_PATH
SECURITY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-queries/<version>/Security/CWE
LIBRARY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-all/<version>/semmle/code/java

Quindi avvia l'app QLCoder e ChromaDB:

root@kitploit:~
docker compose up -d

Passo 4: Recuperare i repository delle CVE

La CVE deve essere elencata in data/project_info.csv. Questo clona il repository al commit difettoso e genera il diff della correzione.

root@kitploit:~
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# oppure più di una alla volta:
docker compose run --rm app python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# elabora le CVE da un file (un ID CVE per riga)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# elabora tutte le CVE
docker compose run --rm app python3 scripts/get_cve_repos.py --all
# forza la rigenerazione dei diff esistenti
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Passo 5: Creare i database CodeQL

I database vengono creati con --build-mode=none — nessuna toolchain di compilazione richiesta.

root@kitploit:~
# per creare i database CodeQL di una CVE specifica
docker compose run --rm app python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818

Questo crea cves/CVE-2025-27818/CVE-2025-27818-vul e cves/CVE-2025-27818/CVE-2025-27818-fix.

root@kitploit:~
# per creare i database CodeQL di tutti i repository CVE recuperati
docker compose run --rm app python3 scripts/build_codeql_dbs.py

Passo 6: Popolare il database RAG

Esegui questi script per popolare il database vettoriale. codeql_docs_fetcher.py e cwe_fetcher.py sono configurazioni una tantum; cves_fetcher.py deve essere rieseguito dopo l'aggiunta di nuove CVE.

root@kitploit:~
docker compose run --rm app python3 scripts/codeql_docs_fetcher.py
docker compose run --rm app python3 scripts/cwe_fetcher.py
docker compose run --rm app python3 scripts/cves_fetcher.py

Nativo (Linux)

Passo 1: Installare CodeQL

Nota - Nell'articolo è stata utilizzata la versione 2.22.2 di CodeQL. Tuttavia, è possibile utilizzare qualsiasi versione (e linguaggio). QLCoder memorizza i QL pack della versione locale di CodeQL nel database vettoriale. I percorsi sono configurati in .env.

Scarica una versione appropriata del bundle CodeQL Action dalla pagina delle release di CodeQL Action.

  • Per la versione più recente: Visita la release più recente e scarica il bundle appropriato per il tuo sistema operativo:

    • codeql-bundle-linux64.tar.gz per Linux
  • Per una versione specifica (es. 2.22.2): Vai alla pagina delle release di CodeQL Action, trova la release taggata codeql-bundle-v2.22.2 e scarica il bundle appropriato per la tua piattaforma.

Dopo il download, estrai l'archivio nella directory principale del progetto:

root@kitploit:~
tar -xzf codeql-bundle-<platform>.tar.gz

Questo dovrebbe creare una sottodirectory codeql/ con l'eseguibile codeql al suo interno.

Aggiungi il percorso di questo eseguibile alla tua variabile d'ambiente PATH:

root@kitploit:~
export PATH="$PWD/codeql:$PATH"

Passo 2: Installare il server MCP CodeQL LSP

Clona il server MCP CodeQL LSP e compilalo.

root@kitploit:~
git clone https://github.com/neuralprogram/codeql-lsp-mcp
cd codeql-lsp-mcp
npm install
npm run build

Passo 3: Configurare l'ambiente Conda

root@kitploit:~
conda env create -f environment.yml
conda activate qlcoder

Passo 4: Configurare .env

root@kitploit:~
cp .env.example .env

Inserisci la tua chiave API e i percorsi CodeQL in .env:

root@kitploit:~
ANTHROPIC_API_KEY=...
CODEQL_HOME=~/codeql
CODEQL_LSP_MCP_HOME=~/codeql-lsp-mcp

# I percorsi dei QL pack dipendono dalla versione di CodeQL.
# Trova i numeri di versione con:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → usa per SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → usa per LIBRARY_QLPACK_PATH
SECURITY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-queries/<version>/Security/CWE
LIBRARY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-all/<version>/semmle/code/java

Passo 5: Recuperare i repository delle CVE

La CVE deve essere elencata in data/project_info.csv. Questo clona il repository al commit difettoso e genera il diff della correzione.

root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# oppure più di una alla volta:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# elabora le CVE da un file (un ID CVE per riga)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# elabora tutte le CVE
python3 scripts/get_cve_repos.py --all
# forza la rigenerazione dei diff esistenti
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Passo 6: Creare i database CodeQL

I database vengono creati con --build-mode=none — nessuna toolchain di compilazione richiesta.

root@kitploit:~
# per creare i database CodeQL di una CVE specifica
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# per creare i database CodeQL di tutti i repository CVE recuperati
python3 scripts/build_codeql_dbs.py 

Questo crea cves/CVE-2025-27818/CVE-2025-27818-vul e cves/CVE-2025-27818/CVE-2025-27818-fix.

Passo 7: Avviare ChromaDB

Avvia ChromaDB in un terminale separato e mantienilo in esecuzione per questo passaggio e ogni volta che esegui l'agente.

root@kitploit:~
chroma run --path data/chroma_db

Passo 8: Popolare il database RAG

Esegui questi script per popolare il database vettoriale. codeql_docs_fetcher.py e cwe_fetcher.py sono configurazioni una tantum; cves_fetcher.py deve essere rieseguito dopo l'aggiunta di nuove CVE.

root@kitploit:~
python3 scripts/codeql_docs_fetcher.py
python3 scripts/cwe_fetcher.py
python3 scripts/cves_fetcher.py

Avvio Rapido

Dopo aver seguito le istruzioni di Installazione, l'avvio rapido illustra un esempio di sintesi di una query CodeQL per una data CVE.

  1. Recupera il repository della CVE e il diff della correzione della CVE.
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. Crea i database CodeQL per la CVE.
root@kitploit:~
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
  1. Popola o aggiorna il database RAG.
root@kitploit:~
python3 scripts/cves_fetcher.py
  1. Esegui la pipeline.
root@kitploit:~
./run_cve.sh CVE-2025-27818

È possibile passare opzioni aggiuntive dopo l'ID CVE:

root@kitploit:~
./run_cve.sh CVE-2025-27818 --model sonnet-4.5 --max-iteration 10

Utilizzo

Di seguito sono riportate le configurazioni disponibili per QLCoder.

Timeout: Ogni finestra di contesto dell'agente ha un timeout di shell predefinito (es. 300s). Aumenta il timeout nel metodo di esecuzione del backend pertinente se necessario quando si verificano errori "Context window failed".

Nota: Il supporto degli agenti è testato rispetto alle versioni elencate in Ambiente dell'Articolo. Le versioni più recenti degli agenti di codifica potrebbero richiedere aggiornamenti al backend. Sono benvenute PR che aggiungono supporto per versioni più recenti, altri agenti di codifica e più modelli!

Modelli (--model): sonnet-4 (predefinito), sonnet-4.5 (Claude); gemini-2.5-pro, gemini-2.5-flash (Gemini); gpt-5 (Codex)

Agenti (--agent): claude (predefinito), gemini (Gemini CLI), codex (modelli OpenAI e modelli open source)

Modalità di ablazione (--ablation-mode):

ModalitàDescrizioneAgenti Disponibili
fullTutti gli strumenti QLCoder abilitati (predefinito) ed estrazione ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_toolsNessuno strumento e nessuna estrazione ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_lspNessuno strumento CodeQL LSPClaude Code
no_docsNessun recupero della documentazione CodeQLClaude Code
no_astNessuna estrazione AST dal diffClaude Code

Note specifiche per modello (GPT-5)

Per impostazione predefinita impostiamo lo sforzo di ragionamento su medio. Puoi sovrascriverlo in codex_backend.py.

Modalità Nessuno Strumento, Nessuna Documentazione (Specifiche dell'articolo)

Quando Chroma non viene utilizzato per recuperare la descrizione della CVE, una descrizione pre-recuperata viene iniettata direttamente nel prompt tramite task.cve_description. Usa scripts/cves_fetcher.py per popolare un file JSON locale di descrizioni:

root@kitploit:~
python scripts/cves_fetcher.py --descriptions-file data/cve_descriptions.json 

Il file mappa gli ID CVE alle relative stringhe di descrizione CVE e viene aggiornato a ogni esecuzione (le voci esistenti vengono saltate). Quando si esegue con --ablation-mode no_tools o --ablation-mode no_docs, QLCoder carica automaticamente questo file e imposta task.cve_description per la CVE in analisi.

Strumenti di Sviluppo

I seguenti strumenti sono consigliati durante l'utilizzo di QLCoder:

Elimina le collection dalle esecuzioni QLCoder - per pulire Chroma, ecco uno script per eliminare le collection derivanti dall'utilizzo di QLCoder.

chromadb-ops - strumento CLI per ispezionare e mantenere Chroma.

root@kitploit:~
# utile per pulire chroma
chops db clean data/chroma_db

Esempi

Esempi di Query Generate da QLCoder

  • Java
  • C

Configurazioni MCP di QLCoder

Ecco esempi di configurazioni MCP quando si utilizza QLCoder. La configurazione dovrebbe essere simile a questi file nello spazio di lavoro dell'agente.

  • Claude Code
  • Codex
  • Gemini CLI

Ambiente dell'Articolo

Le seguenti versioni sono state utilizzate per produrre i risultati nell'articolo QLCoder.

StrumentoVersione
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

Contributi

Accogliamo con piacere qualsiasi contributo, pull request o segnalazione di problemi! Se desideri contribuire, apri una nuova pull request o un nuovo issue. Sentiti libero di prendere in carico anche un issue esistente.

Team

QLCoder è uno sforzo collaborativo tra ricercatori della Cornell University, della Johns Hopkins University e della University of Pennsylvania. Contattaci se hai domande.

Claire Wang - Dottoranda in Informatica alla University of Pennsylvania

Ziyang Li - Professore alla Johns Hopkins University

Saikat Dutta - Professore alla Cornell University

Mayur Naik - Professore alla University of Pennsylvania

Citazione

Considera di citare il nostro articolo ICLR'26:

root@kitploit:~
@misc{wang2025qlcoderquerysynthesizerstatic,
      title={QLCoder: A Query Synthesizer For Static Analysis of Security Vulnerabilities}, 
      author={Claire Wang and Ziyang Li and Saikat Dutta and Mayur Naik},
      year={2025},
      eprint={2511.08462},
      archivePrefix={arXiv},
      primaryClass={cs.CR},
      url={https://arxiv.org/abs/2511.08462}, 
}

Link Arxiv

Progetti Affiliati

I seguenti sono progetti affiliati agli autori di QLCoder. Sentiti libero di darci un'occhiata.

  • IRIS - Sorgenti/pozzi identificati da LLM aggiunti alle query di sicurezza CodeQL esistenti per un dato repository. QLCoder è un'estensione di alcune delle idee di IRIS. Link Arxiv
  • CWE-Bench-Java - Benchmark di vulnerabilità di sicurezza Java contenente metadati CVE, repository ed etichette sorgente/pozzo.