
प्रूफ-ऑफ-कॉन्सेप्ट जो pgAdmin 4 के AI Assistant में sqlparse/PostgreSQL लेक्सर अंतर के माध्यम से CVE-2026-17351 SQL इंजेक्शन बायपास को प्रदर्शित करता है, जिसमें अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन डिलीवरी शामिल है।
CVE-2026-17351 के लिए PoC — pgAdmin 4 के AI Assistant में एक गंभीर (CVSS 9.0) SQL इंजेक्शन बायपास।
pgAdmin 4 संस्करण 9.13 से 9.16, LLM-जनित SQL क्वेरीज़ को एकल, रीड-ओनली स्टेटमेंट के रूप में सत्यापित करने के लिए Python की sqlparse लाइब्रेरी का उपयोग करते हैं। PostgreSQL के standard_conforming_strings = on (PostgreSQL 9.1 के बाद से डिफ़ॉल्ट) के तहत, sqlparse और PostgreSQL इस बात पर असहमत हैं कि स्ट्रिंग लिटरल के अंदर बैकस्लैश को कैसे संभाला जाए। यह एक हमलावर को ऐसा पेलोड बनाने की अनुमति देता है जो sqlparse की वैधता जांच को एकल SELECT के रूप में पास करता है, लेकिन PostgreSQL में चार स्टेटमेंट के रूप में निष्पादित होता है — जिसमें एक COMMIT शामिल है जो रीड-ओनली ट्रांज़ैक्शन को समाप्त करता है और उसके बाद आने वाले राइट स्टेटमेंट भी।
SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --'
SELECT देखता है → वैधता जांच पास हो जाती हैSELECT '\' + COMMIT + CREATE TABLE pwn(x int) + SELECT 1 --'पेलोड अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन के माध्यम से डिलीवर किया जाता है: हमलावर इसे उस डेटाबेस ऑब्जेक्ट (कॉलम कमेंट, रो वैल्यू, व्यू डेफिनिशन) के अंदर लगाता है जिसे AI Assistant पढ़ता है। जब कोई वैध उपयोगकर्ता प्रश्न पूछता है, तो LLM दूषित डेटा को पढ़ता है और उसे execute_sql_query टूल कॉल के रूप में उत्सर्जित करता है।
| फ़ाइल | विवरण |
|---|---|
poc.py | लेक्सर डिफरेंशियल प्रदर्शित करता है: sqlparse वैधता जांच पास होती है, सिंपल क्वेरी प्रोटोकॉल कई स्टेटमेंट निष्पादित करता है, एक्सटेंडेड क्वेरी प्रोटोकॉल इसे ब्लॉक करता है |
prompt_injection_demo.py | पूरी हमले की श्रृंखला का अनुकरण करता है: पेलोड कॉलम कमेंट के रूप में लगाया गया → अनुकरणित LLM इसे पढ़ता है → वैधता जांच पास होती है → निष्पादन |
pip install psycopg[binary] sqlparse
आपको एक चालू PostgreSQL इंस्टेंस (14+) की भी आवश्यकता है:
docker run -d --name pg-poc \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=testdb \
-p 5433:5432 \
postgres:18
# Main PoC — lexer differential demonstration
python3 poc.py
# Prompt injection delivery demo
python3 prompt_injection_demo.py
# Custom connection parameters
python3 poc.py --host 10.0.0.5 --port 5432 --user postgres --password mypw
फिक्स psycopg3 के एक्सटेंडेड क्वेरी प्रोटोकॉल को इन तरीकों से बाध्य करता है:
conn.prepare_threshold = 0 सेट करनाcursor.execute() में prepare=True पास करनायह PostgreSQL के अपने Parse चरण को स्टेटमेंट सीमाओं का प्राधिकार बनाता है — यह संरचनात्मक रूप से मल्टी-स्टेटमेंट टेक्स्ट को अस्वीकार कर देता है, भले ही कोई भी क्लाइंट-साइड लेक्सर इसे कैसे भी वर्गीकृत करे।
यह PoC केवल शैक्षिक और अधिकृत परीक्षण उद्देश्यों के लिए है।