Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
qlcoder — Agentic Framework для синтеза CodeQL-запросов | Kitploit
Инструменты/GitHubGitHub/neuralprogram/qlcoder
Статический анализСканеры уязвимостейАнализ уязвимостейАнализ КодаСтатьи и ИсследованияОбратная Разработка с Помощью ИИ
GitHubneuralprogram/qlcoder

qlcoder

Agentic Framework для синтеза CodeQL-запросов

Репозиторий
255135 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

QLCoder

Агентный фреймворк для синтеза CodeQL-запросов

Содержание

  • Обзор
  • Установка
    • Docker (рекомендуется)
    • Нативная установка (Linux)
  • Использование
  • Быстрый старт
  • Инструменты для разработки
  • Примеры
  • Окружение для статьи
  • Вклад в проект
  • Команда
  • Цитирование
  • Связанные проекты

Обзор

QLCoder Iterative Refinement

QLCoder — это фреймворк для использования LLM с целью синтеза сквозных CodeQL-запросов для обнаружения уязвимостей. Имея метаданные существующей CVE, LLM и кодирующий агент, QLCoder итеративно синтезирует CodeQL-запрос для обнаружения данной CVE. Начальный запрос — это шаблон CodeQL path-запроса, заполненный извлечённым AST диффа. Во время синтеза запроса кодирующий агент имеет доступ к инструментам для взаимодействия с RAG-базой данных и языковым сервером CodeQL. Впоследствии запрос может использоваться для мультивариантного анализа, регрессионного тестирования или в качестве руководства при написании CodeQL-запросов.

Установка

Docker (рекомендуется)

Шаг 1: Установка CodeQL

Примечание — В статье использовалась версия CodeQL 2.22.2. Однако можно использовать любую версию (и язык). QLCoder хранит QL-пакеты локальной версии CodeQL в векторной базе данных. Пути настраиваются в .env.

Загрузите подходящую версию пакета CodeQL Action со страницы релизов CodeQL Action.

  • Для последней версии: Посетите последний релиз и загрузите подходящий пакет для вашей ОС:

    • codeql-bundle-osx64.tar.gz для macOS
    • codeql-bundle-linux64.tar.gz для Linux
  • Для конкретной версии (например, 2.22.2): Перейдите на страницу релизов CodeQL Action, найдите релиз с тегом codeql-bundle-v2.22.2 и загрузите подходящий пакет для вашей платформы.

Распакуйте в ~/codeql (или в другой путь — обновите CODEQL_HOME в .env соответствующим образом):

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

Шаг 2: Установка MCP-сервера CodeQL LSP

Клонируйте MCP-сервер CodeQL LSP и соберите его.

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

Шаг 3: Настройка и запуск сервисов

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

Заполните ваш API-ключ и пути CodeQL в .env:

root@kitploit:~
ANTHROPIC_API_KEY=...

# Пути к QL-пакетам зависят от версии CodeQL.
# Найдите номера версий с помощью:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → используйте для SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → используйте для 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

Затем запустите приложение QLCoder и ChromaDB:

root@kitploit:~
docker compose up -d

Шаг 4: Получение репозиториев CVE

CVE должна быть указана в data/project_info.csv. Это клонирует репозиторий на коммите с ошибкой и генерирует дифф исправления.

root@kitploit:~
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# или несколько сразу:
docker compose run --rm app python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# обработка CVE из файла (по одному ID CVE в строке)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# обработка всех CVE
docker compose run --rm app python3 scripts/get_cve_repos.py --all
# принудительная регенерация существующих диффов
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Шаг 5: Создание баз данных CodeQL

Базы данных создаются с --build-mode=none — инструментарий сборки не требуется.

root@kitploit:~
# для создания баз данных CodeQL для конкретной CVE
docker compose run --rm app python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818

Это создаёт cves/CVE-2025-27818/CVE-2025-27818-vul и cves/CVE-2025-27818/CVE-2025-27818-fix.

root@kitploit:~
# для создания баз данных CodeQL для всех полученных репозиториев CVE
docker compose run --rm app python3 scripts/build_codeql_dbs.py

Шаг 6: Заполнение RAG-базы данных

Запустите эти скрипты для заполнения векторной базы данных. codeql_docs_fetcher.py и cwe_fetcher.py — одноразовая настройка; cves_fetcher.py следует повторно запускать после добавления новых 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

Нативная установка (Linux)

Шаг 1: Установка CodeQL

Примечание — В статье использовалась версия CodeQL 2.22.2. Однако можно использовать любую версию (и язык). QLCoder хранит QL-пакеты локальной версии CodeQL в векторной базе данных. Пути настраиваются в .env.

Загрузите подходящую версию пакета CodeQL Action со страницы релизов CodeQL Action.

  • Для последней версии: Посетите последний релиз и загрузите подходящий пакет для вашей ОС:

    • codeql-bundle-linux64.tar.gz для Linux
  • Для конкретной версии (например, 2.22.2): Перейдите на страницу релизов CodeQL Action, найдите релиз с тегом codeql-bundle-v2.22.2 и загрузите подходящий пакет для вашей платформы.

После загрузки распакуйте архив в корневом каталоге проекта:

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

Это должно создать подкаталог codeql/ с исполняемым файлом codeql внутри.

Добавьте путь к этому исполняемому файлу в переменную окружения PATH:

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

Шаг 2: Установка MCP-сервера CodeQL LSP

Клонируйте MCP-сервер CodeQL LSP и соберите его.

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

Шаг 3: Настройка окружения Conda

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

Шаг 4: Настройка .env

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

Заполните ваш API-ключ и пути CodeQL в .env:

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

# Пути к QL-пакетам зависят от версии CodeQL.
# Найдите номера версий с помощью:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → используйте для SECURITY_QLPACK_PATH
#   ls ~/codeql/qlpacks/codeql/java-all/        → используйте для 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

Шаг 5: Получение репозиториев CVE

CVE должна быть указана в data/project_info.csv. Это клонирует репозиторий на коммите с ошибкой и генерирует дифф исправления.

root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# или несколько сразу:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# обработка CVE из файла (по одному ID CVE в строке)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# обработка всех CVE
python3 scripts/get_cve_repos.py --all
# принудительная регенерация существующих диффов
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

Шаг 6: Создание баз данных CodeQL

Базы данных создаются с --build-mode=none — инструментарий сборки не требуется.

root@kitploit:~
# для создания баз данных CodeQL для конкретной CVE
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# для создания баз данных CodeQL для всех полученных репозиториев CVE
python3 scripts/build_codeql_dbs.py 

Это создаёт cves/CVE-2025-27818/CVE-2025-27818-vul и cves/CVE-2025-27818/CVE-2025-27818-fix.

Шаг 7: Запуск ChromaDB

Запустите ChromaDB в отдельном терминале и держите её запущенной для этого шага и при каждом запуске агента.

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

Шаг 8: Заполнение RAG-базы данных

Запустите эти скрипты для заполнения векторной базы данных. codeql_docs_fetcher.py и cwe_fetcher.py — одноразовая настройка; cves_fetcher.py следует повторно запускать после добавления новых CVE.

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

Быстрый старт

После выполнения инструкций по установке быстрый старт проведёт вас через пример синтеза CodeQL-запроса для заданной CVE.

  1. Получите репозиторий CVE и дифф исправления CVE.
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. Создайте базы данных CodeQL для CVE.
root@kitploit:~
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
  1. Заполните или обновите RAG-базу данных.
root@kitploit:~
python3 scripts/cves_fetcher.py
  1. Запустите конвейер.
root@kitploit:~
./run_cve.sh CVE-2025-27818

Дополнительные параметры можно передать после ID CVE:

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

Использование

Ниже приведены доступные конфигурации для QLCoder.

Тайм-аут: Каждое контекстное окно агента имеет тайм-аут оболочки по умолчанию (например, 300 с). При необходимости увеличьте тайм-аут в соответствующем методе выполнения бэкенда при возникновении ошибок "Context window failed".

Примечание: Поддержка агентов протестирована с версиями, указанными в разделе Окружение для статьи. Более новые версии кодирующих агентов могут потребовать обновления бэкенда. Приветствуются PR с поддержкой более новых версий, других кодирующих агентов и дополнительных моделей!

Модели (--model): sonnet-4 (по умолчанию), sonnet-4.5 (Claude); gemini-2.5-pro, gemini-2.5-flash (Gemini); gpt-5 (Codex)

Агенты (--agent): claude (по умолчанию), gemini (Gemini CLI), codex (модели OpenAI и модели с открытым исходным кодом)

Режимы абляции (--ablation-mode):

РежимОписаниеДоступные агенты
fullВсе инструменты QLCoder включены (по умолчанию) и извлечение ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_toolsБез инструментов и без извлечения ASTClaude Code, Codex (GPT, GPT-OSS), Gemini
no_lspБез инструментов CodeQL LSPClaude Code
no_docsБез получения документации CodeQLClaude Code
no_astБез извлечения AST из диффаClaude Code

Примечания по конкретным моделям (GPT-5)

По умолчанию мы устанавливаем уровень рассуждений на средний. Вы можете переопределить это в codex_backend.py.

Режим без инструментов и без документации (особенности статьи)

Когда Chroma не используется для получения описания CVE, предварительно загруженное описание внедряется непосредственно в промпт через task.cve_description. Используйте scripts/cves_fetcher.py для заполнения локального JSON-файла с описаниями:

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

Файл сопоставляет ID CVE с их строками описания CVE и дополняется при каждом запуске (существующие записи пропускаются). При запуске с --ablation-mode no_tools или --ablation-mode no_docs QLCoder автоматически загружает этот файл и устанавливает task.cve_description для анализируемой CVE.

Инструменты для разработки

При использовании QLCoder рекомендуются следующие инструменты:

Удаление коллекций из запусков QLCoder — для очистки Chroma, вот скрипт для удаления коллекций после использования QLCoder.

chromadb-ops — CLI-инструмент для проверки и обслуживания Chroma.

root@kitploit:~
# полезно для очистки chroma
chops db clean data/chroma_db

Примеры

Примеры запросов, сгенерированных QLCoder

  • Java
  • C

Конфигурации MCP для QLCoder

Вот примеры конфигураций MCP при использовании QLCoder. Конфигурация должна быть аналогична этим файлам в рабочем пространстве агента.

  • Claude Code
  • Codex
  • Gemini CLI

Окружение для статьи

Следующие версии использовались для получения результатов в статье QLCoder.

ИнструментВерсия
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

Вклад в проект

Мы приветствуем любые вклады, pull request'ы и issues! Если вы хотите внести вклад, пожалуйста, создайте новый pull request или issue. Также можете взять на себя существующий issue.

Команда

QLCoder — это совместная работа исследователей из Корнеллского университета, Университета Джонса Хопкинса и Пенсильванского университета. Пожалуйста, свяжитесь с нами, если у вас есть вопросы.

Claire Wang — аспирантка CS в Пенсильванском университете

Ziyang Li — профессор Университета Джонса Хопкинса

Saikat Dutta — профессор Корнеллского университета

Mayur Naik — профессор Пенсильванского университета

Цитирование

Рассмотрите возможность цитирования нашей статьи 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}, 
}

Ссылка на Arxiv

Связанные проекты

Ниже перечислены проекты, связанные с авторами QLCoder. Не стесняйтесь ознакомиться с ними.

  • IRIS — источники/стоки, определённые LLM, добавляемые к существующим CodeQL-запросам безопасности для заданного репозитория. QLCoder является расширением некоторых идей IRIS. Ссылка на Arxiv
  • CWE-Bench-Java — бенчмарк уязвимостей безопасности Java, содержащий метаданные CVE, репозитории и метки источников/стоков.
Скачать инструмент