Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
qlcoder — # Estrutura Agêntica para Sintetizar Consultas CodeQL | Kitploit
Ferramentas/GitHubGitHub/neuralprogram/qlcoder
Análise EstáticaScanners de VulnerabilidadesAnálise de VulnerabilidadesAnálise de CódigoPapers e PesquisaEngenharia Reversa Assistida por IA
GitHubneuralprogram/qlcoder

qlcoder

# Estrutura Agêntica para Sintetizar Consultas CodeQL

Ver Repositório
25513há 5 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

QLCoder

Framework Agêntico para Sintetizar Consultas CodeQL

Índice

  • Visão Geral
  • Instalação
    • Docker (Recomendado)
    • Nativo (Linux)
  • Uso
  • Início Rápido
  • Ferramentas de Desenvolvimento
  • Exemplos
  • Ambiente do Artigo
  • Contribuições
  • Equipe
  • Citação
  • Projetos Afiliados

Visão Geral

QLCoder Iterative Refinement

QLCoder é um framework para usar LLMs na síntese de consultas CodeQL de ponta a ponta para detecção de vulnerabilidades. Dados os metadados de uma CVE existente, um LLM e um agente de codificação, o QLCoder sintetiza iterativamente uma consulta CodeQL para detectar a CVE existente. A consulta inicial é um template de consulta de caminho CodeQL preenchido por uma AST extraída do diff. Durante a síntese da consulta, o agente de codificação tem acesso a ferramentas para interagir com um banco de dados RAG e o servidor de linguagem CodeQL. Posteriormente, a consulta pode ser usada para análise multivariante, testes de regressão ou como orientação para escrever consultas CodeQL.

Instalação

Docker (Recomendado)

Baixar ferramenta

Passo 1: Instalar CodeQL

Nota - No artigo, foi usada a versão 2.22.2 do CodeQL. No entanto, qualquer versão (e linguagem) pode ser usada. O QLCoder armazena os pacotes QL da versão local do CodeQL no banco de dados vetorial. Os caminhos são configurados em .env.

Baixe uma versão apropriada do bundle de ações do CodeQL na página de releases do CodeQL Action.

  • Para a versão mais recente: Visite o último release e baixe o bundle apropriado para o seu SO:

    • codeql-bundle-osx64.tar.gz para macOS
    • codeql-bundle-linux64.tar.gz para Linux
  • Para uma versão específica (ex.: 2.22.2): Vá para a página de releases do CodeQL Action, encontre o release marcado como codeql-bundle-v2.22.2 e baixe o bundle apropriado para a sua plataforma.

Extraia para ~/codeql (ou outro caminho — atualize CODEQL_HOME em .env de acordo):

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

Passo 2: Instalar o servidor MCP do CodeQL LSP

Clone o servidor MCP do CodeQL LSP e compile-o.

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: Configurar e iniciar os serviços

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

Preencha sua chave de API e os caminhos do CodeQL em .env:

root@kitploit:~
ANTHROPIC_API_KEY=...

# Os caminhos dos pacotes QL dependem da sua versão do CodeQL.
# Encontre os números de versão com:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → use para SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → use para 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

Em seguida, inicie o aplicativo QLCoder e o ChromaDB:

root@kitploit:~
docker compose up -d

Passo 4: Recuperar repositórios de CVEs

A CVE deve estar listada em data/project_info.csv. Isso clona o repositório no commit com bug e gera o diff da correção.

root@kitploit:~
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# ou várias de uma vez:
docker compose run --rm app python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# processar CVEs de um arquivo (um ID de CVE por linha)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# processar todas as CVEs
docker compose run --rm app python3 scripts/get_cve_repos.py --all
# forçar a regeneração de diffs existentes
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Passo 5: Criar bancos de dados CodeQL

Os bancos de dados são criados com --build-mode=none — nenhuma toolchain de build é necessária.

root@kitploit:~
# para construir os bancos de dados CodeQL de uma CVE específica
docker compose run --rm app python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818

Isso cria cves/CVE-2025-27818/CVE-2025-27818-vul e cves/CVE-2025-27818/CVE-2025-27818-fix.

root@kitploit:~
# para construir os bancos de dados CodeQL de todos os repositórios de CVEs obtidos
docker compose run --rm app python3 scripts/build_codeql_dbs.py

Passo 6: Popular o banco de dados RAG

Execute estes scripts para popular o banco de dados vetorial. codeql_docs_fetcher.py e cwe_fetcher.py são configurações únicas; cves_fetcher.py deve ser executado novamente após adicionar novas CVEs.

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: Instalar CodeQL

Nota - No artigo, foi usada a versão 2.22.2 do CodeQL. No entanto, qualquer versão (e linguagem) pode ser usada. O QLCoder armazena os pacotes QL da versão local do CodeQL no banco de dados vetorial. Os caminhos são configurados em .env.

Baixe uma versão apropriada do bundle de ações do CodeQL na página de releases do CodeQL Action.

  • Para a versão mais recente: Visite o último release e baixe o bundle apropriado para o seu SO:

    • codeql-bundle-linux64.tar.gz para Linux
  • Para uma versão específica (ex.: 2.22.2): Vá para a página de releases do CodeQL Action, encontre o release marcado como codeql-bundle-v2.22.2 e baixe o bundle apropriado para a sua plataforma.

Após o download, extraia o arquivo no diretório raiz do projeto:

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

Isso deve criar um subdiretório codeql/ com o executável codeql dentro.

Adicione o caminho deste executável à sua variável de ambiente PATH:

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

Passo 2: Instalar o servidor MCP do CodeQL LSP

Clone o servidor MCP do CodeQL LSP e compile-o.

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

Passo 3: Configurar o ambiente Conda

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

Passo 4: Configurar .env

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

Preencha sua chave de API e os caminhos do CodeQL em .env:

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

# Os caminhos dos pacotes QL dependem da sua versão do CodeQL.
# Encontre os números de versão com:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → use para SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → use para 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: Recuperar repositórios de CVEs

A CVE deve estar listada em data/project_info.csv. Isso clona o repositório no commit com bug e gera o diff da correção.

root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# ou várias de uma vez:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# processar CVEs de um arquivo (um ID de CVE por linha)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# processar todas as CVEs
python3 scripts/get_cve_repos.py --all
# forçar a regeneração de diffs existentes
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Passo 6: Criar bancos de dados CodeQL

Os bancos de dados são criados com --build-mode=none — nenhuma toolchain de build é necessária.

root@kitploit:~
# para construir os bancos de dados CodeQL de uma CVE específica
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# para construir os bancos de dados CodeQL de todos os repositórios de CVEs obtidos
python3 scripts/build_codeql_dbs.py 

Isso cria cves/CVE-2025-27818/CVE-2025-27818-vul e cves/CVE-2025-27818/CVE-2025-27818-fix.

Passo 7: Iniciar ChromaDB

Inicie o ChromaDB em um terminal separado e mantenha-o em execução para esta etapa e sempre que executar o agente.

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

Passo 8: Popular o banco de dados RAG

Execute estes scripts para popular o banco de dados vetorial. codeql_docs_fetcher.py e cwe_fetcher.py são configurações únicas; cves_fetcher.py deve ser executado novamente após adicionar novas CVEs.

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

Início Rápido

Após seguir as instruções de Instalação, o início rápido percorre um exemplo de síntese de uma consulta CodeQL para uma determinada CVE.

  1. Recupere o repositório da CVE e o diff da correção da CVE.
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. Crie bancos de dados CodeQL para a CVE.
root@kitploit:~
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
  1. Popule ou atualize o banco de dados RAG.
root@kitploit:~
python3 scripts/cves_fetcher.py
  1. Execute o pipeline.
root@kitploit:~
./run_cve.sh CVE-2025-27818

Opções adicionais podem ser passadas após o ID da CVE:

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

Uso

Abaixo estão as configurações disponíveis para o QLCoder.

Timeout: Cada janela de contexto do agente tem um timeout de shell padrão (ex.: 300s). Aumente o timeout no método de execução do backend relevante, se necessário, ao encontrar erros de "Context window failed".

Nota: O suporte a agentes é testado contra as versões listadas em Ambiente do Artigo. Versões mais novas de agentes de codificação podem exigir atualizações no backend. PRs adicionando suporte para versões mais novas, outros agentes de codificação e mais modelos são bem-vindos!

Modelos (--model): sonnet-4 (padrão), sonnet-4.5 (Claude); gemini-2.5-pro, gemini-2.5-flash (Gemini); gpt-5 (Codex)

Agentes (--agent): claude (padrão), gemini (Gemini CLI), codex (modelos OpenAI e modelos open source)

Modos de ablação (--ablation-mode):

ModoDescriçãoAgentes Disponíveis
fullTodas as ferramentas QLCoder habilitadas (padrão) e extração de ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_toolsSem ferramentas e sem extração de ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_lspSem ferramentas CodeQL LSPClaude Code
no_docsSem recuperação de documentação CodeQLClaude Code
no_astSem extração de AST do diffClaude Code

Notas específicas do modelo (GPT-5)

Por padrão, definimos o esforço de raciocínio como médio. Você pode substituir isso em codex_backend.py.

Modo Sem Ferramentas, Sem Documentação (especificidades do artigo)

Quando o Chroma não é usado para buscar a descrição da CVE, uma descrição pré-buscada é injetada diretamente no prompt via task.cve_description. Use scripts/cves_fetcher.py para popular um arquivo JSON local de descrições:

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

O arquivo mapeia IDs de CVE para suas strings de descrição de CVE e é anexado a cada execução (entradas existentes são ignoradas). Ao executar com --ablation-mode no_tools ou --ablation-mode no_docs, o QLCoder carrega automaticamente este arquivo e define task.cve_description para a CVE que está sendo analisada.

Ferramentas de Desenvolvimento

As seguintes ferramentas são recomendadas ao usar o QLCoder:

Excluir coleções de execuções do QLCoder - para limpar o Chroma, aqui está um script para excluir coleções do uso do QLCoder.

chromadb-ops - ferramenta CLI para inspecionar e manter o Chroma.

root@kitploit:~
# útil para limpar o chroma
chops db clean data/chroma_db

Exemplos

Exemplos de Consultas Geradas pelo QLCoder

  • Java
  • C

Configurações MCP do QLCoder

Aqui estão exemplos de configurações MCP ao usar o QLCoder. A configuração deve ser semelhante a estes arquivos no workspace do agente.

  • Claude Code
  • Codex
  • Gemini CLI

Ambiente do Artigo

As seguintes versões foram usadas para produzir os resultados no artigo do QLCoder.

FerramentaVersão
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

Contribuições

Aceitamos quaisquer contribuições, pull requests ou issues! Se você gostaria de contribuir, por favor abra um novo pull request ou issue. Sinta-se à vontade para assumir uma issue existente também.

Equipe

QLCoder é um esforço colaborativo entre pesquisadores da Cornell University, Johns Hopkins University e University of Pennsylvania. Entre em contato conosco se tiver alguma dúvida.

Claire Wang - Estudante de Doutorado em Ciência da Computação na University of Pennsylvania

Ziyang Li - Professor na Johns Hopkins University

Saikat Dutta - Professor na Cornell University

Mayur Naik - Professor na University of Pennsylvania

Citação

Considere citar nosso artigo do 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

Projetos Afiliados

Os seguintes são projetos afiliados aos autores do QLCoder. Sinta-se à vontade para conferi-los.

  • IRIS - Fontes/sumidouros identificados por LLM anexados a consultas de segurança CodeQL existentes para um determinado repositório. O QLCoder é uma extensão de algumas das ideias do IRIS. Link Arxiv
  • CWE-Bench-Java - Benchmark de vulnerabilidades de segurança Java contendo metadados de CVE, repositórios e rótulos de fonte/sumidouro.