
यह विस्तृत परीक्षा, जो 14 मार्च 2025 को आयोजित की गई थी, PostgreSQL में CVE-2025-1094, एक काल्पनिक उच्च-गंभीरता SQL इंजेक्शन भेद्यता, की पड़ताल करती है, जो प्रदान किए गए इमुलेशन सेटअप और प्रूफ-ऑफ-कॉन्सेप्ट (PoC) निष्पादन पर आधारित है। यह विश्लेषण भेद्यता के परिचय, मूल कारण, फ़ाइल योगदान, PoC चरणों और शमन उपायों को शामिल करता है, जिसमें इमुलेशन प्रक्रिया के सभी जटिल विवरण सम्मिलित हैं।
CVE-2025-1094 को PostgreSQL में एक गंभीर SQL इंजेक्शन दोष के रूप में वर्णित किया गया है, जो 17.3, 16.7, 15.11, 14.16, और 13.19 से पहले के संस्करणों को प्रभावित करता है, जिसका CVSS 3.1 आधार स्कोर 8.1 है, जो गोपनीयता, अखंडता और उपलब्धता पर महत्वपूर्ण प्रभाव दर्शाता है। यह हमलावरों को संवेदनशील डेटा तक पहुँचने या रिमोट कोड निष्पादन (RCE) करने में सक्षम बनाता है, और वास्तविक दुनिया के उल्लंघनों में इसका शोषण किया गया है, जैसे कि BeyondTrust घटना जिसने 17 उद्यम ग्राहकों को प्रभावित किया, जिसकी रिपोर्ट BleepingComputer पर दी गई है, और अमेरिकी ट्रेजरी विभाग का उल्लंघन, जिसका विवरण The Register पर उपलब्ध है। इमुलेशन, जो 14 मार्च 2025 को आयोजित किया गया था, ने server_encoding=EUC_TW और client_encoding=BIG5 के साथ एक Docker सेटअप का उपयोग किया, जो शोषण को ट्रिगर करने के लिए महत्वपूर्ण था। PoC में एक DO ब्लॉक इंजेक्ट करना शामिल था ताकि एक बड़ा ऑब्जेक्ट बनाया जा सके, pg_read_file के माध्यम से /etc/passwd पढ़ा जा सके, इसे lo_put के साथ बड़े ऑब्जेक्ट में लिखा जा सके, और lo_export का उपयोग करके इसे /tmp/payload में निर्यात किया जा सके, जो अनधिकृत फ़ाइल एक्सेस को सक्षम करने में एन्कोडिंग बेमेल की भूमिका की पुष्टि करता है।
मूल कारण को CWE-149: Quoting Syntax के अनुचित न्यूट्रलाइज़ेशन के अंतर्गत वर्गीकृत किया गया है, जिसमें PostgreSQL के libpq फ़ंक्शन—PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), और PQescapeStringConn()—में अनुचित हैंडलिंग शामिल है, जो कोटिंग सिंटैक्स को न्यूट्रलाइज़ करने में विफल रहते हैं जब परिणाम psql कमांड-लाइन टूल के लिए इनपुट बनाने में उपयोग किए जाते हैं। यह तब और बढ़ जाता है जब client_encoding को BIG5 और server_encoding को EUC_TW पर सेट किया जाता है, जैसा कि हमारे सेटअप में देखा गया है, जिससे SQL इंजेक्शन संभव होता है। इमुलेशन के लिए बेमेल बनाने हेतु EUC_TW और zh_TW.EUC_TW की आवश्यकता थी, जिसमें psycopg2 की EUC_TW समर्थन की कमी जैसी समस्याओं को UTF8 से कनेक्ट करके और फिर BIG5 पर स्विच करके हल किया गया। शोषण की सफलता subprocess.run(["psql", ...]) के माध्यम से रॉ SQL निष्पादित करने पर निर्भर थी, जो सुरक्षित क्वेरी हैंडलिंग को दरकिनार करती है, जैसा कि लॉग में विस्तृत है।
सेटअप में प्रत्येक फ़ाइल CVE-2025-1094 के इमुलेशन में महत्वपूर्ण भूमिका निभाती है। नीचे सारणीबद्ध रूप में एक विस्तृत विवरण दिया गया है:
14 मार्च 2025 को निष्पादित PoC, निम्नलिखित चरणों के माध्यम से शोषण के प्रभाव को प्रदर्शित करता है, प्रत्येक चरण की विस्तृत व्याख्या के साथ:
sudo docker compose up --build
db और app) को बनाता और प्रारंभ करता है, आवश्यकता पड़ने पर अद्यतन छवियों के साथ कंटेनर बनाता है, और उन्हें postgre_default नेटवर्क में लिंक करता है। सुनिश्चित करता है कि भेद्य वातावरण सेट है, जिसमें db EUC_TW एन्कोडिंग का उपयोग करता है और app पोर्ट 5000 पर /vuln-endpoint उजागर करता है, जो शोषण के एन्कोडिंग बेमेल और एंडपॉइंट एक्सेस के लिए महत्वपूर्ण है।curl -X POST http://localhost:5000/vuln-endpoint -d "input=test"
input=test के साथ POST अनुरोध भेजता है, कनेक्टिविटी और बुनियादी कार्यक्षमता की पुष्टि करता है, "Executed" की अपेक्षा करता है। पुष्टि करता है कि ऐप चल रहा है और डेटाबेस से कनेक्ट हो सकता है, यह सुनिश्चित करता है कि सेटअप शोषण के लिए तैयार है।
Demonstration Video on Vimeo
PoC का प्रदर्शन देखने के लिए Vimeo पर क्लिक करें।
CVE-2025-1094 को कम करने के लिए, इमुलेशन अंतर्दृष्टि और उद्योग मार्गदर्शन के आधार पर निम्नलिखित उपाय अनुशंसित हैं:
psql तक पहुँच को केवल विश्वसनीय उपयोगकर्ताओं तक सीमित करें।| File | यह क्या करती है | PoC में योगदान | इसकी आवश्यकता क्यों है |
|---|
exploit.py | POST अनुरोध में DO ब्लॉक के साथ /etc/passwd पढ़ने और एक बड़ा ऑब्जेक्ट बनाकर निर्यात करने हेतु भेजता है। | SQL इंजेक्शन ट्रिगर करता है, मनमाना SQL कमांड निष्पादित करने के लिए एन्कोडिंग बेमेल का शोषण करता है। | शोषण निष्पादन सक्षम करता है, PoC प्रभाव के लिए महत्वपूर्ण। |
app.py | Flask ऐप /vuln-endpoint उजागर करता है, psql के माध्यम से रॉ SQL निष्पादित करता है। | शोषण के लिए भेद्य एंडपॉइंट प्रदान करता है। | शोषण के लिए प्रवेश बिंदु, भेद्यता प्रदर्शन के लिए आवश्यक। |
init.sql | स्ट्रिंग इनपुट के लिए id VARCHAR(255) के साथ परीक्षण तालिका बनाता है। | इंजेक्शन के लिए स्कीमा सेट करता है, प्रकार त्रुटियों के बिना पेलोड निष्पादन सुनिश्चित करता है। | शोषण के लिए डेटाबेस सेटअप, SQL इंजेक्शन के लिए आवश्यक। |
Dockerfile | आवश्यक निर्भरताओं के साथ Flask ऐप कंटेनर बनाता है। | एंडपॉइंट परिनियोजन के लिए पृथक ऐप सेवा बनाता है। | भेद्य ऐप परिनियोजित करता है, PoC पुनरुत्पादकता के लिए महत्वपूर्ण। |
docker-compose.yml | विशिष्ट कॉन्फ़िगरेशन के साथ db और app सेवाओं को परिभाषित और लिंक करता है। | सेटअप को व्यवस्थित करता है, एन्कोडिंग बेमेल और सेवा निर्भरताएँ सुनिश्चित करता है। | सेवाओं को लिंक करता है, पर्यावरण सेटअप और अलगाव के लिए आवश्यक। |
Dockerfile.db | EUC_TW एन्कोडिंग के साथ PostgreSQL कंटेनर बनाता है। | आवश्यक एन्कोडिंग के साथ भेद्य डेटाबेस बनाता है। | आवश्यक एन्कोडिंग के साथ डेटाबेस सेट करता है, भेद्यता ट्रिगर के लिए महत्वपूर्ण। |
/etc/passwd को उसमें लिखा जा सके, और /tmp/payload में निर्यात किया जा सके, निष्पादन स्थिति प्रिंट करता है। SQL इंजेक्शन को ट्रिगर करता है, /etc/passwd पढ़ने के लिए भेद्यता का शोषण करता है, जो CVE-2025-1094 के प्रभाव को प्रदर्शित करने के लिए महत्वपूर्ण है, जैसा कि सफल फ़ाइल निर्यात के साथ लॉग में देखा गया है।
sudo docker ps
postgre-app-1 और postgre-db-1 चालू हैं। शोषण चलाने से पहले सेटअप की पुष्टि करता है, यह सुनिश्चित करता है कि दोनों सेवाएँ सक्रिय हैं, PoC विश्वसनीयता के लिए महत्वपूर्ण। उपयोगकर्ता को कंटेनर ID प्रदान करता है, जो बाद के कमांडों में आवश्यक है।sudo docker exec -it bash -c "LC_ALL=C ls -l /tmp/payload && LC_ALL=C cat /tmp/payload"
postgre-db-1 कंटेनर में एक कमांड निष्पादित करता है, /tmp/payload को अंग्रेज़ी आउटपुट के साथ सूचीबद्ध और प्रदर्शित करता है, शोषण के परिणाम की पुष्टि करता है (इसमें /etc/passwd दिखना चाहिए)। फ़ाइल की जाँच करके शोषण की पुष्टि करता है, यह सुनिश्चित करता है कि /tmp/payload में संवेदनशील डेटा है, PoC सत्यापन के अनुरूप, और LC_ALL=C के साथ लोकेल गड़बड़ी से बचाता है।
sudo docker exec -it psql -U postgres -d postgres -c "SELECT * FROM test;"
test तालिका से सब कुछ चुनता है, शोषण से INSERT की पुष्टि करता है (इसमें "Exploit ran with loid ..." दिखना चाहिए)। शोषण के डेटाबेस संशोधन की पुष्टि करता है, यह सुनिश्चित करता है कि DO ब्लॉक निष्पादित हुआ, PoC सत्यापन के अनुरूप, और loid लॉगिंग को मान्य करता है।sudo docker compose down