
PoC for CVE-2026-2005
PoC शोषण PostgreSQL pgcrypto एक्सटेंशन के PGP सत्र कुंजी पार्सिंग में हीप-आधारित बफर ओवरफ्लो के लिए, जो मनमानी मेमोरी पढ़ने/लिखने और सुपरयूज़र तक विशेषाधिकार वृद्धि की ओर ले जाता है।
पूर्ण तकनीकी विवरण के लिए, Zeroday Cloud सलाह देखें।

PostgreSQL को असुरक्षित कमिट से क्लोन और संकलित करें ताकि बाइनरी के प्रतीक ऑफ़सेट बिल्कुल मेल खाएँ। शोषण एएसएलआर बेस को लीक किए गए पॉइंटर्स को ईएलएफ प्रतीक ऑफ़सेट से मिलाकर हल करता है - अलग बिल्ड या संस्करणों में अलग ऑफ़सेट होंगे और वे विफल होंगे।
git clone https://github.com/postgres/postgres.git
cd postgres
git checkout 4b324845ba5d24682b9b3708a769f00d160afbd7
./configure \
--prefix="$HOME/projects/pg/pgsql" \
--with-libxml \
--with-libxslt \
--enable-debug \
--with-ssl=openssl
make -j$(nproc)
make install-world-bin
pip install -r requirements.txt
python poc.py \
--binary "$HOME/projects/pg/pgsql/bin/postgres" \
--dbname test-db \
--host 127.0.0.1 \
--port 5432 \
--user test-user \
--password secret \
--cmd id
शोषण 7 चरणों में आगे बढ़ता है:
हीप पॉइंटर रिसाव - एक निर्मित PGP संदेश mdst बफर के malloc चंक हेडर को दूषित करता है। जब PostgreSQL दूषित चंक पर pfree() कॉल करता है, तो आवंटक पॉइंटर पता वाली एक त्रुटि उत्पन्न करता है, जिससे हीप स्थान mdst->data का रिसाव होता है।
मनमानी पढ़ाई - दूसरा ओवरफ्लो mdst->data को (leaked_ptr - 0x10000) की ओर इंगित करने के लिए अधिलेखित करता है। डिक्रिप्शन के बाद, mbuf_steal_data() उस पते पर मौजूद सामग्री को डिक्रिप्टेड आउटपुट के रूप में लौटाता है, जिससे हीप मेमोरी डंप होती है जिसमें पुराने कोड पॉइंटर्स हो सकते हैं।
पॉइंटर स्कैन - हेक्स डंप को 8-बाइट लिटिल-एंडियन मानों के लिए स्कैन किया जाता है जो कोड पतों (>= 0x500000000000) जैसे दिखते हैं लेकिन हीप क्षेत्र में नहीं हैं। ये उम्मीदवार PIE (Position Independent Executable) पॉइंटर्स हैं।
PIE बेस वोटिंग - प्रत्येक उम्मीदवार पते को postgres बाइनरी से ELF प्रतीक ऑफ़सेट के विरुद्ध परीक्षण किया जाता है। प्रत्येक (addr - sym_offset) जोड़ी के लिए जहाँ पेज ऑफ़सेट मेल खाता है, एक वोट डाला जाता है। 10+ वोट वाले उम्मीदवार रखे जाते हैं; सबसे छोटा बेस (PIE सबसे कम-मैप किया गया ELF सेगमेंट है) वोटों के अनुसार क्रमबद्ध शीर्ष उम्मीदवार है।
PIE बेस सत्यापन - मनमानी पढ़ने की मूल तकनीक का उपयोग करके, शोषण CurrentUserId को पर पढ़ता है और इसकी तुलना सत्र के ज्ञात OID से करता है। मिलान PIE बेस की पुष्टि करता है।
pip install -r requirements.txt)pgcrypto सक्षम करके संकलितयह प्रूफ ऑफ कॉन्सेप्ट केवल शैक्षिक और रक्षात्मक अनुसंधान उद्देश्यों के लिए है। केवल उन प्रणालियों के विरुद्ध उपयोग करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण है।
| तर्क | डिफ़ॉल्ट | विवरण |
|---|
--binary | (postgres बाइनरी) | प्रतीक निष्कर्षण के लिए postgres बाइनरी का पथ |
--dbname | postgres | लक्ष्य डेटाबेस का नाम |
--host | localhost | PostgreSQL होस्ट |
--port | 5432 | PostgreSQL पोर्ट |
--user | postgres | डेटाबेस उपयोगकर्ता |
--password | (खाली) | डेटाबेस पासवर्ड |
--cmd | whoami | विशेषाधिकार वृद्धि के बाद निष्पादित करने के लिए OS कमांड |
--gdb | (फ़्लैग) | ओवरफ़्लो बिंदु पर tmux के माध्यम से GDB संलग्न करें |
(candidate_base + current_user_offset)मनमानी लिखाई - ओवरफ्लो msrc और mdst दोनों MBuf हेडर को दूषित करता है। नकली msrc->data/read_pos एक एम्बेडेड sym-एन्क्रिप्टेड पैकेट की ओर इशारा करते हैं जिसमें एन्क्रिप्टेड सुपरयूज़र OID (10) होता है। नकली mdst->data CurrentUserId - 4 की ओर इशारा करता है (-4 pgp-pgsql.c:533 में SET_VARSIZE के लिए जो आउटपुट लंबाई को पहले 4 बाइट्स में लिखता है)।
विशेषाधिकार वृद्धि - जब CurrentUserId को 10 (बूटस्ट्रैप सुपरयूज़र) पर अधिलेखित कर दिया जाता है, तो COPY FROM PROGRAM निर्दिष्ट OS कमांड को postgres सिस्टम उपयोगकर्ता के रूप में निष्पादित करता है।