
स्व-निहित Docker लैब, जो CVE-2026-2005 के शोषण का अभ्यास करने के लिए है—PostgreSQL के pgcrypto एक्सटेंशन में एक हीप बफर ओवरफ्लो, जो विशेषाधिकार वृद्धि और कंटेनर कोड निष्पादन को सक्षम बनाता है।
CVE-2026-2005 के शोषण का अभ्यास करने के लिए एक स्व-निहित Docker लैब, जो PostgreSQL के pgcrypto एक्सटेंशन में हीप बफर ओवरफ्लो है और सुपरयूज़र विशेषाधिकारों के बिना रिमोट कोड निष्पादन को सक्षम बनाता है।
प्रभावित संस्करण: PostgreSQL ≤ 17.7 / 16.11 / 15.15 / 14.20 / 18.1
इसमें ठीक किया गया: 18.2, 17.8, 16.12, 15.16, 14.21 (2026-02-12 को जारी)
आवश्यकताएँ: Docker, Docker Compose
git clone <this-repo>
cd CVE-2026-2005
docker compose up -d
PostgreSQL 127.0.0.1:5433 पर सुन रहा होगा।
आपने एक एप्लिकेशन कॉन्फ़िग फ़ाइल से डेटाबेस क्रेडेंशियल प्राप्त किए हैं:
| पैरामीटर | मान |
|---|
| होस्ट | 127.0.0.1 |
| पोर्ट | 5433 |
| डेटाबेस | targetdb |
| उपयोगकर्ता | pentester |
| पासवर्ड | pentester123 |
पहुँच की पुष्टि करने के लिए कनेक्ट करें:
psql -h 127.0.0.1 -p 5433 -U pentester -d targetdb
खाते के पास public स्कीमा पर CREATE विशेषाधिकार है। यह नहीं है एक सुपरयूज़र।
लैब पूरा करने के लिए दोनों फ़्लैग कैप्चर करें।
फ़्लैग 1 — डेटाबेस विशेषाधिकार वृद्धि
SELECT * FROM flag_db;
-- केवल DB सत्र के भीतर सुपरयूज़र तक वृद्धि करने के बाद पठनीय
फ़्लैग 2 — कंटेनर कोड निष्पादन
/var/lib/postgresql/flag.txt
-- केवल कंटेनर के अंदर postgres OS उपयोगकर्ता के रूप में कमांड निष्पादित करने के बाद पठनीय
दायरा नोट:
COPY TO PROGRAMDocker कंटेनर के अंदर निष्पादित होता है, होस्ट पर नहीं। प्राथमिक वास्तविक-विश्व प्रभाव पूर्ण डेटाबेस पढ़ने की पहुँच है (सभी तालिकाएँ, सभी डेटाबेस)। Docker होस्ट तक पहुँचने के लिए एक अलग कंटेनर एस्केप तकनीक की आवश्यकता होती है।
दोष pgcrypto/pgp-pubenc.c के अंदर pgp_parse_pubenc_sesskey() में है।
सार्वजनिक-कुंजी एन्क्रिप्टेड सत्र कुंजी पैकेट को डिक्रिप्ट करते समय, फ़ंक्शन
सत्र कुंजी की लंबाई को हमलावर-नियंत्रित RSA/ElGamal पेलोड से msglen - 3 के रूप में
प्राप्त करता है और इसे बाउंड्स सत्यापन के बिना एक निश्चित 32-बाइट बफर (PGP_MAX_KEY) में
कॉपी करता है। एक हमलावर बफर सीमा से परे सैकड़ों बाइट्स लिख सकता है।
शोषण तीन चरणों में आगे बढ़ता है:
dst संरचना को भ्रष्ट करके .data में CurrentUserId को 10 (BOOTSTRAP_SUPERUSERID) से ओवरराइट करेंCOPY (SELECT '') TO PROGRAM '<cmd>' कंटेनर के अंदर postgres उपयोगकर्ता के रूप में OS कमांड निष्पादित करता है। Docker के बिना वास्तविक तैनाती में, इसका अर्थ डेटाबेस होस्ट पर OS-स्तरीय पहुँच है।क्योंकि ASLR लेआउट एक ही postmaster प्रक्रिया के सभी कनेक्शनों में समान है, एक कनेक्शन पर लीक किए गए पते अगले कनेक्शन पर मान्य रहते हैं।
pgcrypto/pgp-pubenc.cobjdump -t $(which postgres) | grep CurrentUserIddocker compose down -v
यह लैब केवल अधिकृत सुरक्षा अनुसंधान और शिक्षा के लिए है। इसे केवल उन सिस्टम पर चलाएँ जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति है।