
एजेंटिक फ्रेमवर्क फॉर सिंथेसाइज़िंग 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 के साथ बनाए जाते हैं — किसी बिल्ड टूलचेन की आवश्यकता नहीं है।