Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
qlcoder — Agentic Framework for Synthesizing CodeQL Queries | Kitploit
ツール/GitHubGitHub/neuralprogram/qlcoder
静的分析脆弱性スキャナー脆弱性分析コード分析論文と研究AI支援リバースエンジニアリング
GitHubneuralprogram/qlcoder

qlcoder

Agentic Framework for Synthesizing CodeQL Queries

リポジトリを見る
255135ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

QLCoder

CodeQLクエリを合成するためのエージェント型フレームワーク

目次

  • 概要
  • インストール
    • Docker(推奨)
    • ネイティブ(Linux)
  • 使用方法
  • クイックスタート
  • 開発ツール
  • 例
  • 論文環境
  • 貢献
  • チーム
  • 引用
  • 関連プロジェクト

概要

QLCoder Iterative Refinement

QLCoderは、LLMを使用して脆弱性検出のためのエンドツーエンドのCodeQLクエリを合成するためのフレームワークです。既存のCVEのメタデータ、LLM、およびコーディングエージェントが与えられると、QLCoderは既存のCVEを検出するためのCodeQLクエリを反復的に合成します。初期クエリは、抽出されたdiffのASTによって生成されたCodeQLパスクエリテンプレートです。クエリの合成中、コーディングエージェントはRAGデータベースおよびCodeQL言語サーバーとインターフェースするためのツールにアクセスできます。その後、クエリは多変量解析、回帰テスト、またはCodeQLクエリ作成のガイダンスに使用できます。

インストール

Docker(推奨)

ステップ1: CodeQLのインストール

ツールをダウンロード

注 - 論文ではCodeQLバージョン2.22.2を使用しました。ただし、任意のバージョン(および言語)を使用できます。QLCoderはローカルのCodeQLバージョンのQLパックをベクターデータベースに保存します。パスは.envで設定されます。

CodeQL Action releases pageから適切なバージョンのCodeQL Actionバンドルをダウンロードしてください。

  • 最新バージョンの場合: 最新リリースにアクセスし、お使いのOSに適したバンドルをダウンロードしてください:

    • macOS用のcodeql-bundle-osx64.tar.gz
    • Linux用のcodeql-bundle-linux64.tar.gz
  • 特定のバージョン(例: 2.22.2)の場合: CodeQL Action releases pageにアクセスし、codeql-bundle-v2.22.2というタグが付いたリリースを見つけて、お使いのプラットフォームに適したバンドルをダウンロードしてください。

~/codeqlに展開します(または別のパス — それに応じて.envのCODEQL_HOMEを更新してください):

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

ステップ2: CodeQL LSP MCPサーバーのインストール

CodeQL LSP MCP serverをクローンしてビルドします。

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

.envにAPIキーとCodeQLパスを入力してください:

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にリストされている必要があります。これにより、バグのあるコミットでリポジトリがクローンされ、修正diffが生成されます。

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を処理(1行に1つのCVE ID)
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
# 既存のdiffを強制的に再生成
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

ステップ5: CodeQLデータベースの作成

データベースは--build-mode=noneで作成されます — ビルドツールチェーンは不要です。

root@kitploit:~
# 特定のCVEのCodeQLデータベースをビルドする場合
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:~
# 取得したすべてのCVEリポジトリのCodeQLデータベースをビルドする場合
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はローカルのCodeQLバージョンのQLパックをベクターデータベースに保存します。パスは.envで設定されます。

CodeQL Action releases pageから適切なバージョンのCodeQL Actionバンドルをダウンロードしてください。

  • 最新バージョンの場合: 最新リリースにアクセスし、お使いのOSに適したバンドルをダウンロードしてください:

    • Linux用のcodeql-bundle-linux64.tar.gz
  • 特定のバージョン(例: 2.22.2)の場合: CodeQL Action releases pageにアクセスし、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: CodeQL LSP MCPサーバーのインストール

CodeQL LSP MCP serverをクローンしてビルドします。

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

.envにAPIキーとCodeQLパスを入力してください:

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にリストされている必要があります。これにより、バグのあるコミットでリポジトリがクローンされ、修正diffが生成されます。

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を処理(1行に1つのCVE ID)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# すべてのCVEを処理
python3 scripts/get_cve_repos.py --all
# 既存のdiffを強制的に再生成
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

ステップ6: CodeQLデータベースの作成

データベースは--build-mode=noneで作成されます — ビルドツールチェーンは不要です。

root@kitploit:~
# 特定のCVEのCodeQLデータベースをビルドする場合
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# 取得したすべてのCVEリポジトリのCodeQLデータベースをビルドする場合
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

クイックスタート

インストール手順に従った後、クイックスタートでは特定のCVEに対するCodeQLクエリの合成例を説明します。

  1. CVEリポジトリとCVE修正diffを取得します。
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. CVEのCodeQLデータベースを作成します。
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

CVE IDの後に追加のオプションを渡すことができます:

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ツールが有効(デフォルト)かつAST抽出Claude Code、Codex(GPT、GPT-OSS)、Gemini
no_toolsツールなし、AST抽出なしClaude Code、Codex(GPT、GPT-OSS)、Gemini
no_lspCodeQL LSPツールなしClaude Code
no_docsCodeQLドキュメント取得なしClaude Code
no_astdiffからのAST抽出なしClaude Code

モデル固有の注意事項(GPT-5)

デフォルトでは推論努力を中程度に設定しています。codex_backend.pyでこれを上書きできます。

ツールなし・ドキュメントなしモード(論文固有)

CVEの説明の取得にChromaを使用しない場合、事前に取得した説明がtask.cve_descriptionを介してプロンプトに直接注入されます。scripts/cves_fetcher.pyを使用して説明のローカルJSONファイルを構築します:

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

このファイルはCVE IDをCVEの説明文字列にマッピングし、実行のたびに追加されます(既存のエントリはスキップされます)。--ablation-mode no_toolsまたは--ablation-mode no_docsで実行する場合、QLCoderは自動的にこのファイルをロードし、分析対象のCVEのtask.cve_descriptionを設定します。

開発ツール

QLCoderの使用中に推奨されるツールは以下のとおりです:

QLCoder実行からのコレクション削除 - Chromaをクリーンアップするための、QLCoderの使用によるコレクションを削除するスクリプトです。

chromadb-ops - Chromaの検査とメンテナンスのためのCLIツールです。

root@kitploit:~
# chromaのクリーンアップに便利
chops db clean data/chroma_db

例

QLCoder生成クエリの例

  • Java
  • C

QLCoder MCP設定

QLCoder使用時のMCP設定の例です。設定はエージェントのワークスペース内のこれらのファイルと同様である必要があります。

  • Claude Code
  • Codex
  • Gemini CLI

論文環境

QLCoderの論文で結果を生成するために使用されたバージョンは以下のとおりです。

ツールバージョン
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

貢献

貢献、プルリクエスト、または問題の報告を歓迎します! 貢献したい場合は、新しいプルリクエストまたは問題を提出してください。既存の問題に取り組むことも自由です。

チーム

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 - 特定のリポジトリの既存のCodeQLセキュリティクエリに追加されるLLMによって特定されたソース/シンク。QLCoderはIRISのアイデアの一部を拡張したものです。Arxivリンク
  • CWE-Bench-Java - CVEメタデータ、リポジトリ、ソース/シンクラベルを含むJavaセキュリティ脆弱性のベンチマーク。