
एजेंटिक फ्रेमवर्क फॉर सिंथेसाइज़िंग CodeQL क्वेरीज़
CodeQL क्वेरी संश्लेषित करने के लिए एजेंटिक फ्रेमवर्क

QLCoder एक फ्रेमवर्क है जो भेद्यता पहचान के लिए एंड-टू-एंड CodeQL क्वेरी संश्लेषित करने हेतु LLM का उपयोग करता है। किसी मौजूदा CVE के मेटाडेटा, LLM और कोडिंग एजेंट को देखते हुए, QLCoder मौजूदा CVE का पता लगाने के लिए एक CodeQL क्वेरी को पुनरावृत्त रूप से संश्लेषित करता है। प्रारंभिक क्वेरी एक CodeQL पाथ क्वेरी टेम्पलेट है जो डिफ के निकाले गए AST से भरा जाता है। क्वेरी संश्लेषित करते समय, कोडिंग एजेंट के पास RAG डेटाबेस और CodeQL भाषा सर्वर के साथ इंटरफेस करने के लिए उपकरणों तक पहुंच होती है। बाद में, क्वेरी का उपयोग मल्टीवेरिएंट विश्लेषण, रिग्रेशन परीक्षण, या CodeQL क्वेरी लिखने के लिए मार्गदर्शन के रूप में किया जा सकता है।
नोट - पेपर में CodeQL संस्करण 2.22.2 का उपयोग किया गया था। हालाँकि, कोई भी संस्करण (और भाषा) उपयोग किया जा सकता है। QLCoder स्थानीय CodeQL संस्करण के QL पैक को वेक्टर डेटाबेस में संग्रहीत करता है। पथ .env में कॉन्फ़िगर किए गए हैं।
CodeQL Action releases page से CodeQL Action बंडल का उपयुक्त संस्करण डाउनलोड करें।
नवीनतम संस्करण के लिए: नवीनतम रिलीज़ पर जाएँ और अपने OS के लिए उपयुक्त बंडल डाउनलोड करें:
codeql-bundle-osx64.tar.gzcodeql-bundle-linux64.tar.gzकिसी विशिष्ट संस्करण के लिए (जैसे, 2.22.2):
CodeQL Action releases page पर जाएँ, codeql-bundle-v2.22.2 टैग की गई रिलीज़ खोजें, और अपने प्लेटफ़ॉर्म के लिए उपयुक्त बंडल डाउनलोड करें।
~/codeql में निकालें (या कोई अन्य पथ — तदनुसार .env में CODEQL_HOME अपडेट करें):
tar -xzf codeql-bundle-<platform>.tar.gz -C ~/
CodeQL LSP MCP server को क्लोन करें और इसे बिल्ड करें।
git clone https://github.com/neuralprogram/codeql-lsp-mcp ~/codeql-lsp-mcp
cd ~/codeql-lsp-mcp
npm install
npm run build
cp .env.example .env
echo "APP_UID=$(id -u)" >> .env
echo "APP_GID=$(id -g)" >> .env
.env में अपनी API कुंजी और CodeQL पथ भरें:
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 प्रारंभ करें:
docker compose up -d
CVE को data/project_info.csv में सूचीबद्ध होना चाहिए। यह बगी कमिट पर रिपॉजिटरी को क्लोन करता है और फिक्स डिफ उत्पन्न करता है।
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
# फ़ाइल से CVEs संसाधित करें (प्रति पंक्ति एक CVE ID)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# सभी CVEs संसाधित करें
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
डेटाबेस --build-mode=none के साथ बनाए जाते हैं — किसी बिल्ड टूलचेन की आवश्यकता नहीं है।
# किसी विशिष्ट 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 बनाता है।
# सभी प्राप्त CVE रिपॉजिटरी के CodeQL डेटाबेस बनाने के लिए
docker compose run --rm app python3 scripts/build_codeql_dbs.py
वेक्टर डेटाबेस भरने के लिए ये स्क्रिप्ट चलाएँ। codeql_docs_fetcher.py और cwe_fetcher.py एक बार की सेटअप हैं; नए CVEs जोड़ने के बाद cves_fetcher.py को फिर से चलाया जाना चाहिए।
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
नोट - पेपर में CodeQL संस्करण 2.22.2 का उपयोग किया गया था। हालाँकि, कोई भी संस्करण (और भाषा) उपयोग किया जा सकता है। QLCoder स्थानीय CodeQL संस्करण के QL पैक को वेक्टर डेटाबेस में संग्रहीत करता है। पथ .env में कॉन्फ़िगर किए गए हैं।
CodeQL Action releases page से CodeQL Action बंडल का उपयुक्त संस्करण डाउनलोड करें।
नवीनतम संस्करण के लिए: नवीनतम रिलीज़ पर जाएँ और अपने OS के लिए उपयुक्त बंडल डाउनलोड करें:
codeql-bundle-linux64.tar.gzकिसी विशिष्ट संस्करण के लिए (जैसे, 2.22.2):
CodeQL Action releases page पर जाएँ, codeql-bundle-v2.22.2 टैग की गई रिलीज़ खोजें, और अपने प्लेटफ़ॉर्म के लिए उपयुक्त बंडल डाउनलोड करें।
डाउनलोड करने के बाद, प्रोजेक्ट रूट निर्देशिका में संग्रह निकालें:
tar -xzf codeql-bundle-<platform>.tar.gz
यह अंदर निष्पादन योग्य codeql के साथ एक उप-निर्देशिका codeql/ बनाना चाहिए।
इस निष्पादन योग्य का पथ अपने PATH पर्यावरण चर में जोड़ें:
export PATH="$PWD/codeql:$PATH"
CodeQL LSP MCP server को क्लोन करें और इसे बिल्ड करें।
git clone https://github.com/neuralprogram/codeql-lsp-mcp
cd codeql-lsp-mcp
npm install
npm run build
conda env create -f environment.yml
conda activate qlcoder
.env कॉन्फ़िगर करेंcp .env.example .env
.env में अपनी API कुंजी और CodeQL पथ भरें:
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
CVE को data/project_info.csv में सूचीबद्ध होना चाहिए। यह बगी कमिट पर रिपॉजिटरी को क्लोन करता है और फिक्स डिफ उत्पन्न करता है।
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# या एक साथ कई:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# फ़ाइल से CVEs संसाधित करें (प्रति पंक्ति एक CVE ID)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# सभी CVEs संसाधित करें
python3 scripts/get_cve_repos.py --all
# मौजूदा डिफ को पुनः उत्पन्न करने के लिए बलपूर्वक
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force
डेटाबेस --build-mode=none के साथ बनाए जाते हैं — किसी बिल्ड टूलचेन की आवश्यकता नहीं है।
# किसी विशिष्ट CVE के CodeQL डेटाबेस बनाने के लिए
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
# सभी प्राप्त CVE रिपॉजिटरी के CodeQL डेटाबेस बनाने के लिए
python3 scripts/build_codeql_dbs.py
यह cves/CVE-2025-27818/CVE-2025-27818-vul और cves/CVE-2025-27818/CVE-2025-27818-fix बनाता है।
ChromaDB को एक अलग टर्मिनल में प्रारंभ करें और इसे इस चरण के लिए और जब भी एजेंट चलाएँ, चालू रखें।
chroma run --path data/chroma_db
वेक्टर डेटाबेस भरने के लिए ये स्क्रिप्ट चलाएँ। codeql_docs_fetcher.py और cwe_fetcher.py एक बार की सेटअप हैं; नए CVEs जोड़ने के बाद cves_fetcher.py को फिर से चलाया जाना चाहिए।
python3 scripts/codeql_docs_fetcher.py
python3 scripts/cwe_fetcher.py
python3 scripts/cves_fetcher.py
स्थापना निर्देशों का पालन करने के बाद, त्वरित प्रारंभ किसी दिए गए CVE के लिए CodeQL क्वेरी संश्लेषित करने का एक उदाहरण दिखाता है।
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
python3 scripts/cves_fetcher.py
./run_cve.sh CVE-2025-27818
CVE ID के बाद अतिरिक्त विकल्प पारित किए जा सकते हैं:
./run_cve.sh CVE-2025-27818 --model sonnet-4.5 --max-iteration 10
नीचे QLCoder के लिए उपलब्ध कॉन्फ़िगरेशन दिए गए हैं।
टाइमआउट: प्रत्येक एजेंट संदर्भ विंडो में एक डिफ़ॉल्ट शेल टाइमआउट (जैसे 300s) होता है। "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_lsp | कोई CodeQL LSP उपकरण नहीं | Claude Code |
no_docs | कोई CodeQL दस्तावेज़ीकरण पुनर्प्राप्ति नहीं | Claude Code |
no_ast | डिफ से कोई AST निष्कर्षण नहीं | Claude Code |
डिफ़ॉल्ट रूप से हम तर्क प्रयास को मध्यम पर सेट करते हैं। आप इसे codex_backend.py में ओवरराइड कर सकते हैं।
जब CVE विवरण प्राप्त करने के लिए Chroma का उपयोग नहीं किया जाता है, तो एक पूर्व-प्राप्त विवरण सीधे task.cve_description के माध्यम से प्रॉम्प्ट में इंजेक्ट किया जाता है। विवरणों की एक स्थानीय JSON फ़ाइल भरने के लिए scripts/cves_fetcher.py का उपयोग करें:
python scripts/cves_fetcher.py --descriptions-file data/cve_descriptions.json
फ़ाइल CVE IDs को उनके CVE विवरण स्ट्रिंग्स से मैप करती है और प्रत्येक रन पर इसमें जोड़ा जाता है (मौजूदा प्रविष्टियाँ छोड़ दी जाती हैं)। --ablation-mode no_tools या --ablation-mode no_docs के साथ चलाते समय, QLCoder स्वचालित रूप से इस फ़ाइल को लोड करता है और विश्लेषण किए जा रहे CVE के लिए task.cve_description सेट करता है।
QLCoder का उपयोग करते समय निम्नलिखित उपकरण अनुशंसित हैं:
QLCoder रन से संग्रह हटाएँ - Chroma को साफ करने के लिए, यहाँ QLCoder का उपयोग करने से संग्रह हटाने के लिए एक स्क्रिप्ट है।
chromadb-ops - Chroma का निरीक्षण और रखरखाव करने के लिए CLI उपकरण।
# chroma को साफ करने के लिए उपयोगी
chops db clean data/chroma_db
यहाँ QLCoder का उपयोग करते समय MCP कॉन्फ़िगरेशन के उदाहरण दिए गए हैं। कॉन्फ़िगरेशन एजेंट के वर्कस्पेस में इन फ़ाइलों के समान होना चाहिए।
QLCoder पेपर में परिणाम उत्पन्न करने के लिए निम्नलिखित संस्करणों का उपयोग किया गया था।
| उपकरण | संस्करण |
|---|---|
| CodeQL | 2.22.2 |
| Claude Code | 1.0.120 |
| Gemini CLI | 0.6.0 |
| Codex CLI | 0.38.0 |
हम किसी भी योगदान, पुल रिक्वेस्ट या मुद्दों का स्वागत करते हैं! यदि आप योगदान देना चाहते हैं, तो कृपया या तो एक नई पुल रिक्वेस्ट या मुद्दा दर्ज करें। मौजूदा मुद्दे को भी उठाने के लिए स्वतंत्र महसूस करें।
QLCoder कॉर्नेल विश्वविद्यालय, जॉन्स हॉपकिन्स विश्वविद्यालय और पेंसिल्वेनिया विश्वविद्यालय के शोधकर्ताओं के बीच एक सहयोगात्मक प्रयास है। यदि आपके कोई प्रश्न हैं तो कृपया हमसे संपर्क करें।
Claire Wang - पेंसिल्वेनिया विश्वविद्यालय में CS PhD छात्रा
Ziyang Li - जॉन्स हॉपकिन्स विश्वविद्यालय में प्रोफेसर
Saikat Dutta - कॉर्नेल विश्वविद्यालय में प्रोफेसर
Mayur Naik - पेंसिल्वेनिया विश्वविद्यालय में प्रोफेसर
हमारे ICLR'26 पेपर को उद्धृत करने पर विचार करें:
@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},
}
निम्नलिखित QLCoder लेखकों से संबद्ध परियोजनाएँ हैं। उन्हें देखने के लिए स्वतंत्र महसूस करें।