
Среда воспроизведения и инструменты для уязвимости 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
