Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
seal-security-nuget-demo-net7 — .NET 7 форк seal-security-nuget-demo: та же история эксплуатации CVE-2024-21907, переориентированная на клиентов, привязанных к .NET SDK 7. | Kitploit
Инструменты/GitHubGitHub/isecuritytw/seal-security-nuget-demo-net7
Анализ уязвимостейDevSecOpsБезопасность Цепочки ПоставокОбучение и ОбразованиеПодобранные Ресурсы
GitHubisecuritytw/seal-security-nuget-demo-net7

seal-security-nuget-demo-net7

.NET 7 форк seal-security-nuget-demo: та же история эксплуатации CVE-2024-21907, переориентированная на клиентов, привязанных к .NET SDK 7.

Репозиторий
195 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Демо для браузера + CLI (NuGet/C#) — редакция .NET 7

Зачем нужен форк на .NET 7?

Это переориентированный форк канонического seal-security-nuget-demo (который нацелен на net9.0). История эксплойта, контроллеры и список запатченных пакетов идентичны — отличается только TargetFramework.

Он существует потому, что большинство корпоративных заказчиков не могут перейти на новейший .NET SDK по требованию. .NET 7 достиг конца поддержки 14 мая 2024 года, но реальные производственные среды всё ещё работают на нём по причинам совместимости, сертификации или эксплуатации. Именно для этого и создан Seal Security: когда заказчик не может (или не хочет) делать мажорное обновление версии, Seal патчит уязвимую зависимость на месте в той же версии, без изменения публичного API и без правок кода приложения заказчика. Эта демонстрация позволяет провести такой разговор на реальном стеке заказчика, а не просить его сначала установить net8/net9.

Форк фиксирует SDK на 7.0.x через global.json, чтобы случайные обновления не проскочили во время демонстрации.


Обзор

Это демонстрационное приложение — простая стартовая страница ASP.NET Core, которая использует Newtonsoft.Json 12.0.2 для разбора пользовательского ввода как объекта конфигурации. У приложения есть поле имени — введите своё имя, нажмите Go, и оно отобразит «Welcome, alice!». Под капотом ввод передаётся через JsonConvert.DeserializeObject<NestedConfig>() библиотеки Newtonsoft.Json. Вот и всё — совершенно стандартное использование популярной JSON-библиотеки.

Проблема в том, что Newtonsoft.Json 12.0.2 (и версии до 13.0.1) содержит CVE-2024-21907 — уязвимость типа «Отказ в обслуживании» высокой степени серьёзности с оценкой CVSS 7.5 (HIGH). Эта демонстрация показывает, как Seal Security патчит уязвимость на месте без необходимости мажорного обновления версии.


Уязвимость: CVE-2024-21907

Что это за уязвимость?

Метод JsonConvert.DeserializeObject<T>() библиотеки Newtonsoft.Json может быть использован путём создания глубоко вложенных JSON-нагрузок. При десериализации в типизированный объект (POCO) JsonSerializerInternalReader библиотеки выполняет по-настоящему рекурсивные вызовы (CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue → CreateValueInternal), которые вызывают переполнение стека, что приводит к падению приложения (отказ в обслуживании).

Как работает эксплойт

Приложение принимает пользовательский ввод и разбирает его через Newtonsoft.Json. Если ввод является URL-адресом, приложение сначала загружает содержимое — реалистичный шаблон, используемый загрузчиками конфигураций, тестерами API и приёмниками вебхуков:

public class NestedConfig
{
    [JsonProperty("n")]
    public NestedConfig? N { get; set; }
}

var config = JsonConvert.DeserializeObject<NestedConfig>(name);

Обычный ввод: Введите alice → отобразится «Welcome, alice!»

Эксплойт: Вставьте этот URL в поле имени и нажмите Go:

https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json

Приложение определяет, что это URL, загружает json-payload (глубоко вложенный JSON {"n":{"n":{...}}}) и десериализует его через Newtonsoft.Json в рекурсивный класс NestedConfig — вызывая переполнение стека.

JsonSerializerInternalReader рекурсивно проходит через CreateValueInternal → CreateObject → PopulateObject → SetPropertyValue для каждого уровня вложенности. На глубине ~5000 уровней это исчерпывает стек потока, и приложение падает с StackOverflowException — процесс умирает мгновенно (обработка ошибок невозможна).

Реальное влияние

С помощью этой уязвимости атакующие могут:

  • Обрушить приложение, отправляя вредоносные JSON-нагрузки
  • Вызвать отказ в обслуживании, затрагивающий всех пользователей
  • Истощить ресурсы сервера путём повторной эксплуатации
  • Обойти ограничение частоты запросов, поскольку каждый запрос убивает процесс

Почему бы просто не обновиться до Newtonsoft.Json 13.0.1?

Общедоступное исправление требует обновления до версии 13.0.1. Однако обновление мажорных версий часто вносит:

  • Ломающие изменения API в поведении сериализации
  • Проблемы совместимости с другими библиотеками, ожидающими конкретные версии
  • Обширные требования к тестированию всех путей кода сериализации/десериализации
  • Риск изменения поведения в рантайме в производстве

Это превращает «простое обновление» в проект, который легко может занять недели времени разработчиков — оставляя уязвимость открытой в это время.

Как Seal Security это исправляет

Запатченная версия Seal (12.0.2-sp1) добавляет защиту от глубины рекурсии без изменения какого-либо публичного API. Патч:

  1. Добавляет ограничения MaxDepth по умолчанию для предотвращения неограниченной рекурсии
  2. Корректно обрабатывает глубокую вложенность с помощью надлежащих исключений вместо переполнения стека
  3. Не изменяет никакой публичный API — существующий код продолжает работать без изменений

Это та же стратегия смягчения, что применяется в Newtonsoft.Json 13.0.1, перенесённая на 12.0.2 как замена без изменений.


Другие уязвимые зависимости

Эта демонстрация также включает другие уязвимые NuGet-пакеты, которые Seal Security может патчить:

log4net 2.0.5 — CVE-2018-1285 (CVSS 9.8 CRITICAL)

Уязвимость «Внешняя сущность XML» (XXE) в разборе XML-конфигурации log4net. Атакующий, контролирующий файл конфигурации log4net, может:

  • Читать произвольные файлы с сервера
  • Выполнять подделку серверных запросов (SSRF)
  • Вызывать отказ в обслуживании

Примечание о System.Net.Http: Каноническая демонстрация net9 также поставляет уязвимую ссылку System.Net.Http 4.3.0 для CVE-2017-0249. Мы исключили её из этого форка net7, потому что в .NET 7 System.Net.Http является частью BCL, а отдельная ссылка на пакет — это рудиментарный мета-пакет; у него есть известные крайние случаи с dotnet add package --source <local-nupkg>, а именно так CLI Seal применяет запатченные версии. Её исключение делает шаг seal fix надёжным без изменения истории демонстрации (HttpClient по-прежнему работает отлично; его предоставляет рантайм).


Предварительные требования

  • .NET 7.0 SDK (скачать с Microsoft)
  • CLI Seal Security v0.3.238 для Windows x64 (прямая загрузка)

    Двоичные файлы CLI для Windows были прекращены после v0.3.238. v0.3.238 полностью функционален для устранения проблем NuGet в Windows.

  • Токен Seal Security (из панели управления Seal)

Подробное руководство по установке и запуску на Windows Server находится в README-WINDOWS-SERVER.md. Краткое руководство ниже охватывает те же шаги в сжатой форме.


Краткое руководство (локальный Windows Server)

1. Установите переменные окружения

PowerShell:

$env:SEAL_TOKEN = "your-seal-token-here"
$env:SEAL_PROJECT = "nuget-demo-net7"

2. Запустите уязвимое приложение (до Seal)

cd seal-security-nuget-demo-net7

# Восстановление (тянет с nuget.org и канала Seal — см. nuget.config)
dotnet restore

# Сборка и запуск
dotnet build
dotnet run

Откройте http://localhost:5000 — приложение работает с уязвимыми зависимостями.

Тест с обычным вводом

Введите alice в поле имени, нажмите Go. Вы должны увидеть: «Welcome, alice!»

Тест с нагрузкой эксплойта

Вставьте следующий URL в поле имени и нажмите Go:

https://raw.githubusercontent.com/seal-sec-demo-2/json-payload/main/payload.json
Скачать инструмент