CVE-2026-17351
pgAdmin 4: sqlparse/PostgreSQL लेक्सर असहमति के माध्यम से AI सहायक रीड-ओनली ट्रांज़ैक्शन बायपास (CVE-2026-12045 के लिए अधूरा फिक्स)
- प्रकाशित
- 31 जुल॰ 2026
- अद्यतन
- 1 अग॰ 2026
- सीएनए असाइन करना
- PostgreSQL
- साक्ष्य देखे गए
- 8 अग॰ 2026
प्राथमिक सीवीएसएस
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xकम · अगले 30 दिन
- प्रतिशत
- 40.2%
- मॉडल दिनांक
- 17 अक्टू॰ 2026
ईपीएसएस एक सांख्यिकीय अनुमान है, कोई निश्चितता या प्रभाव का माप नहीं। इसे सीवीएसएस, केईवी स्थिति, एक्सपोज़र और अपने वातावरण के साथ मिलाएं।
सारांश
CVE-2026-12045 के लिए pgAdmin 4 9.16 में किया गया फिक्स आवश्यक था कि AI Assistant के execute_sql_query टूल को दिया गया LLM-आपूर्ति किया गया क्वेरी, sqlparse के माध्यम से, BEGIN TRANSACTION READ ONLY रैपर के अंदर चलाने से पहले बिल्कुल एक गैर-ट्रांज़ैक्शन-नियंत्रण स्टेटमेंट के रूप में पार्स हो। sqlparse की स्ट्रिंग-लिटरल लेक्सिंग PostgreSQL के अपने पार्सर से भिन्न हो सकती है: standard_conforming_strings = on (PostgreSQL का 9.1 से डिफ़ॉल्ट) के तहत, एक कोट के ठीक पहले बैकस्लैश PostgreSQL के लिए एक सामान्य वर्ण है, लेकिन sqlparse इसे कोट को एस्केप करने के रूप में मानता है। इसलिए SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --' जैसा पेलोड sqlparse के वैलिडेटर के लिए एक एकल SELECT के रूप में पार्स होता है, जबकि PostgreSQL इसे चार स्टेटमेंट के रूप में निष्पादित करता है: तस्करी किया गया COMMIT रैपिंग रीड-ओनली ट्रांज़ैक्शन को समाप्त करता है, और अंतिम ROLLBACK एक नो-ऑप बन जाता है। यह उसी राइट/RCE बायपास CVE-2026-12045 को फिर से पेश करता है जिसे बंद करने का इरादा था, उसी अप्रत्यक्ष प्रॉम्प्ट-इंजेक्शन डिलीवरी के माध्यम से पहुंच योग्य (एक हमलावर पेलोड को किसी भी ऑब्जेक्ट में रखता है जिसे AI Assistant पढ़ सकता है; LLM इसे टूल कॉल के रूप में उत्सर्जित करता है)। एक प्रारंभिक उम्मीदवार फिक्स ने क्वेरी को psycopg के execute(..., prepare=True) के साथ चलाया, जिसका उद्देश्य PostgreSQL के अपने Parse चरण (एक्सटेंडेड क्वेरी प्रोटोकॉल) को sqlparse के वर्गीकरण की परवाह किए बिना मल्टी-स्टेटमेंट टेक्स्ट को अस्वीकार करने के लिए बाध्य करना था। यह उम्मीदवार फिक्स प्रस्तुत किए गए अनुसार काम नहीं करता है: psycopg3 का PrepareManager prepare तर्क को चुपचाप अनदेखा कर देता है जब भी कनेक्शन का prepare_threshold None होता है, जो हर सर्वर कनेक्शन के लिए pgAdmin का डिफ़ॉल्ट है (प्रति-सर्वर "Prepare threshold" फ़ील्ड खाली है जब तक कि कोई व्यवस्थापक इसे स्पष्ट रूप से सेट न करे) -- psycopg3 सिंपल क्वेरी प्रोटोकॉल पर वापस आ जाता है, वही मल्टी-स्टेटमेंट-सक्षम पथ जिसका बायपास शोषण करता है, इसलिए उम्मीदवार फिक्स किसी भी वास्तविक-विश्व डिफ़ॉल्ट कॉन्फ़िगरेशन पर कुछ भी बंद नहीं करता है। सही किया गया फिक्स conn.prepare_threshold = 0 को सीधे समर्पित, एकल-उपयोग रीड-ओनली कनेक्शन पर सेट करता है जिसे AI Assistant टूल खोलता है, संरचनात्मक रूप से किसी भी सर्वर-स्तरीय कॉन्फ़िगरेशन से स्वतंत्र एक्सटेंडेड क्वेरी प्रोटोकॉल को बाध्य करता है। एक लाइव PostgreSQL 18 इंस्टेंस के खिलाफ सत्यापित: पेलोड prepare_threshold=None (डिफ़ॉल्ट) व्यवहार के तहत सफलतापूर्वक निष्पादित होता है, और उस कनेक्शन पर prepare_threshold=0 सेट होने के बाद "cannot insert multiple commands into a prepared statement" के साथ अस्वीकार कर दिया जाता है। यह समस्या pgAdmin 4 को प्रभावित करती है: 9.13 से 9.17 से पहले तक।
स्रोत
प्रूफ-ऑफ-कॉन्सेप्ट जो pgAdmin 4 के AI Assistant में sqlparse/PostgreSQL लेक्सर अंतर के माध्यम से CVE-2026-17351 SQL इंजेक्शन बायपास को प्रदर्शित करता है, जिसमें अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन डिलीवरी शामिल है।
जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।