Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
qlcoder — Agente Framework para Sintetizar Consultas CodeQL | Kitploit
Herramientas/GitHubGitHub/neuralprogram/qlcoder
Análisis EstáticoEscáneres de VulnerabilidadesAnálisis de VulnerabilidadesAnálisis de CódigoPapers e InvestigaciónReversing Asistido por IA
GitHubneuralprogram/qlcoder

qlcoder

Agente Framework para Sintetizar Consultas CodeQL

Ver Repositorio
25513hace 5 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

QLCoder

Framework agéntico para sintetizar consultas CodeQL

Tabla de contenidos

  • Resumen
  • Instalación
    • Docker (Recomendado)
    • Nativo (Linux)
  • Uso
  • Inicio rápido
  • Herramientas de desarrollo
  • Ejemplos
  • Entorno del artículo
  • Contribuciones
  • Equipo
  • Citación
  • Proyectos afiliados

Resumen

Refinamiento iterativo de QLCoder

QLCoder es un framework para usar LLMs con el fin de sintetizar consultas CodeQL de extremo a extremo para la detección de vulnerabilidades. Dados los metadatos de un CVE existente, un LLM y un agente de codificación, QLCoder sintetiza iterativamente una consulta CodeQL para detectar el CVE existente. La consulta inicial es una plantilla de consulta de ruta CodeQL poblada por un AST extraído del diff. Mientras sintetiza la consulta, el agente de codificación tiene acceso a herramientas para interactuar con una base de datos RAG y el servidor de lenguaje CodeQL. Posteriormente, la consulta puede utilizarse para análisis multivariante, pruebas de regresión o como guía para escribir consultas CodeQL.

Instalación

Descargar herramienta

Docker (Recomendado)

Paso 1: Instalar CodeQL

Nota: en el artículo se utilizó la versión 2.22.2 de CodeQL. Sin embargo, se puede usar cualquier versión (e idioma). QLCoder almacena los paquetes QL de la versión local de CodeQL en la base de datos vectorial. Las rutas se configuran en .env.

Descargue una versión adecuada del paquete CodeQL Action desde la página de lanzamientos de CodeQL Action.

  • Para la versión más reciente: Visite el último lanzamiento y descargue el paquete adecuado para su sistema operativo:

    • codeql-bundle-osx64.tar.gz para macOS
    • codeql-bundle-linux64.tar.gz para Linux
  • Para una versión específica (p. ej., 2.22.2): Vaya a la página de lanzamientos de CodeQL Action, busque el lanzamiento etiquetado codeql-bundle-v2.22.2 y descargue el paquete adecuado para su plataforma.

Extraiga a ~/codeql (u otra ruta — actualice CODEQL_HOME en .env en consecuencia):

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

Paso 2: Instalar el servidor MCP de CodeQL LSP

Clone el servidor MCP de CodeQL LSP y compílelo.

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

Paso 3: Configurar e iniciar los servicios

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

Complete su clave API y las rutas de CodeQL en .env:

root@kitploit:~
ANTHROPIC_API_KEY=...

# Las rutas de los paquetes QL dependen de su versión de CodeQL.
# Encuentre los números de versión con:
#   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

Luego inicie la aplicación QLCoder y ChromaDB:

root@kitploit:~
docker compose up -d

Paso 4: Recuperar repositorios de CVEs

El CVE debe estar listado en data/project_info.csv. Esto clona el repositorio en el commit con el error y genera el diff de la corrección.

root@kitploit:~
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# o varios a la vez:
docker compose run --rm app python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# procesar CVEs desde un archivo (un ID de CVE por línea)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# procesar todos los CVEs
docker compose run --rm app python3 scripts/get_cve_repos.py --all
# forzar la regeneración de diffs existentes
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Paso 5: Crear bases de datos CodeQL

Las bases de datos se crean con --build-mode=none — no se requiere cadena de herramientas de compilación.

root@kitploit:~
# para compilar las bases de datos CodeQL de un CVE específico
docker compose run --rm app python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818

Esto crea cves/CVE-2025-27818/CVE-2025-27818-vul y cves/CVE-2025-27818/CVE-2025-27818-fix.

root@kitploit:~
# para compilar las bases de datos CodeQL de todos los repositorios de CVEs obtenidos
docker compose run --rm app python3 scripts/build_codeql_dbs.py

Paso 6: Poblar la base de datos RAG

Ejecute estos scripts para poblar la base de datos vectorial. codeql_docs_fetcher.py y cwe_fetcher.py son de configuración única; cves_fetcher.py debe volver a ejecutarse después de agregar nuevos 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)

Paso 1: Instalar CodeQL

Nota: en el artículo se utilizó la versión 2.22.2 de CodeQL. Sin embargo, se puede usar cualquier versión (e idioma). QLCoder almacena los paquetes QL de la versión local de CodeQL en la base de datos vectorial. Las rutas se configuran en .env.

Descargue una versión adecuada del paquete CodeQL Action desde la página de lanzamientos de CodeQL Action.

  • Para la versión más reciente: Visite el último lanzamiento y descargue el paquete adecuado para su sistema operativo:

    • codeql-bundle-linux64.tar.gz para Linux
  • Para una versión específica (p. ej., 2.22.2): Vaya a la página de lanzamientos de CodeQL Action, busque el lanzamiento etiquetado codeql-bundle-v2.22.2 y descargue el paquete adecuado para su plataforma.

Después de descargar, extraiga el archivo en el directorio raíz del proyecto:

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

Esto debería crear un subdirectorio codeql/ con el ejecutable codeql dentro.

Agregue la ruta de este ejecutable a su variable de entorno PATH:

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

Paso 2: Instalar el servidor MCP de CodeQL LSP

Clone el servidor MCP de CodeQL LSP y compílelo.

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

Paso 3: Configurar el entorno Conda

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

Paso 4: Configurar .env

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

Complete su clave API y las rutas de CodeQL en .env:

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

# Las rutas de los paquetes QL dependen de su versión de CodeQL.
# Encuentre los números de versión con:
#   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

Paso 5: Recuperar repositorios de CVEs

El CVE debe estar listado en data/project_info.csv. Esto clona el repositorio en el commit con el error y genera el diff de la corrección.

root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# o varios a la vez:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# procesar CVEs desde un archivo (un ID de CVE por línea)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# procesar todos los CVEs
python3 scripts/get_cve_repos.py --all
# forzar la regeneración de diffs existentes
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Paso 6: Crear bases de datos CodeQL

Las bases de datos se crean con --build-mode=none — no se requiere cadena de herramientas de compilación.

root@kitploit:~
# para compilar las bases de datos CodeQL de un CVE específico
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# para compilar las bases de datos CodeQL de todos los repositorios de CVEs obtenidos
python3 scripts/build_codeql_dbs.py 

Esto crea cves/CVE-2025-27818/CVE-2025-27818-vul y cves/CVE-2025-27818/CVE-2025-27818-fix.

Paso 7: Iniciar ChromaDB

Inicie ChromaDB en una terminal separada y manténgala en ejecución para este paso y siempre que ejecute el agente.

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

Paso 8: Poblar la base de datos RAG

Ejecute estos scripts para poblar la base de datos vectorial. codeql_docs_fetcher.py y cwe_fetcher.py son de configuración única; cves_fetcher.py debe volver a ejecutarse después de agregar nuevos CVEs.

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

Inicio rápido

Después de seguir las instrucciones de instalación, el inicio rápido recorre un ejemplo de síntesis de una consulta CodeQL para un CVE determinado.

  1. Recupere el repositorio del CVE y el diff de la corrección del CVE.
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. Cree las bases de datos CodeQL para el CVE.
root@kitploit:~
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
  1. Pueble o actualice la base de datos RAG.
root@kitploit:~
python3 scripts/cves_fetcher.py
  1. Ejecute el pipeline.
root@kitploit:~
./run_cve.sh CVE-2025-27818

Se pueden pasar opciones adicionales después del ID del CVE:

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

Uso

A continuación se muestran las configuraciones disponibles para QLCoder.

Tiempo de espera: Cada ventana de contexto del agente tiene un tiempo de espera de shell predeterminado (p. ej., 300 s). Aumente el tiempo de espera en el método de ejecución del backend correspondiente si es necesario cuando encuentre errores de "Context window failed".

Nota: El soporte de agentes se prueba con las versiones listadas en Entorno del artículo. Las versiones más nuevas de los agentes de codificación pueden requerir actualizaciones en el backend. ¡Se aceptan PRs que agreguen soporte para versiones más nuevas, otros agentes de codificación y más modelos!

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

Agentes (--agent): claude (predeterminado), gemini (Gemini CLI), codex (modelos de OpenAI y modelos de código abierto)

Modos de ablación (--ablation-mode):

ModoDescripciónAgentes disponibles
fullTodas las herramientas de QLCoder habilitadas (predeterminado) y extracción de ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_toolsSin herramientas y sin extracción de ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_lspSin herramientas de CodeQL LSPClaude Code
no_docsSin recuperación de documentación de CodeQLClaude Code
no_astSin extracción de AST del diffClaude Code

Notas específicas del modelo (GPT-5)

De forma predeterminada, establecemos el esfuerzo de razonamiento en medio. Puede anularlo en codex_backend.py.

Modo sin herramientas, sin documentación (especificaciones del artículo)

Cuando Chroma no se usa para obtener la descripción del CVE, se inyecta una descripción precargada directamente en el prompt a través de task.cve_description. Use scripts/cves_fetcher.py para poblar un archivo JSON local de descripciones:

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

El archivo asigna los IDs de CVE a sus cadenas de descripción de CVE y se agrega en cada ejecución (las entradas existentes se omiten). Al ejecutar con --ablation-mode no_tools o --ablation-mode no_docs, QLCoder carga automáticamente este archivo y establece task.cve_description para el CVE que se está analizando.

Herramientas de desarrollo

Se recomiendan las siguientes herramientas al usar QLCoder:

Eliminar colecciones de ejecuciones de QLCoder - para limpiar Chroma, aquí hay un script para eliminar colecciones del uso de QLCoder.

chromadb-ops - herramienta CLI para inspeccionar y mantener Chroma.

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

Ejemplos

Ejemplos de consultas generadas por QLCoder

  • Java
  • C

Configuraciones MCP de QLCoder

Aquí hay ejemplos de configuraciones MCP al usar QLCoder. La configuración debería ser similar a estos archivos en el espacio de trabajo del agente.

  • Claude Code
  • Codex
  • Gemini CLI

Entorno del artículo

Las siguientes versiones se utilizaron para producir los resultados en el artículo de QLCoder.

HerramientaVersión
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

Contribuciones

¡Agradecemos cualquier contribución, pull request o issue! Si desea contribuir, por favor presente un nuevo pull request o issue. También puede tomar un issue existente.

Equipo

QLCoder es un esfuerzo colaborativo entre investigadores de la Universidad de Cornell, la Universidad Johns Hopkins y la Universidad de Pensilvania. Por favor, contáctenos si tiene alguna pregunta.

Claire Wang - Estudiante de doctorado en Ciencias de la Computación en la Universidad de Pensilvania

Ziyang Li - Profesor en la Universidad Johns Hopkins

Saikat Dutta - Profesor en la Universidad de Cornell

Mayur Naik - Profesor en la Universidad de Pensilvania

Citación

Considere citar nuestro artículo de 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}, 
}

Enlace de Arxiv

Proyectos afiliados

Los siguientes son proyectos afiliados con los autores de QLCoder. No dude en revisarlos.

  • IRIS - Fuentes/sumideros identificados por LLM agregados a consultas de seguridad CodeQL existentes para un repositorio determinado. QLCoder es una extensión de algunas de las ideas de IRIS. Enlace de Arxiv
  • CWE-Bench-Java - Benchmark de vulnerabilidades de seguridad en Java que contiene metadatos de CVE, repositorios y etiquetas de fuente/sumidero.