- Критические уязвимости в DataProtection и Kestrel позволяют осуществлять подделку токенов и подмену HTTP-запросов в ASP.NET Core.
- Для устранения проблемы необходимо обновить библиотеку до исправленных версий (.NET 10.0.7, Kestrel 2.3.6+) и ротировать скомпрометированные связки ключей и сессии.
- Централизованная обработка ошибок, страниц состояния и сведений о проблеме имеет ключевое значение для обнаружения, расследования и локализации инцидентов.
- Применение подхода DevSecOps, включающего анализ зависимостей, непрерывное обновление программного обеспечения и аудит логов, имеет важное значение для снижения долгосрочных рисков.
В последние времена ASP.NET Core столкнулся с рядом критических уязвимостей в системе безопасности. Это напрямую влияет на аутентификацию, защиту данных и сам веб-сервер Kestrel. Если вы разрабатываете или поддерживаете приложения на .NET, это не просто техническая деталь: речь идёт об уязвимостях, связанных с очень высокие баллы по шкале CVSS (9,1 и даже 9,9)способный открыть путь к повышению привилегий, выдаче себя за другого пользователя и раскрытию крайне конфиденциальной информации.
Помимо шума, создаваемого бюллетенями по безопасности, важно понимать следующее: В чём именно заключается сбой в ASP.NET Core, и какие пакеты и версии затронуты?и как должна реагировать современная команда разработчиков, работающая с передовыми методами CI/CD и DevSecOps, например: Среды разработки и ключевые инструменты для тестирования приложений.Мы подробно разберем наиболее серьезные случаи (включая CVE-2026-40372 и CVE-2025-55315), рассмотрим... Компания Microsoft рекомендовала меры по смягчению последствий. И раз уж мы заговорили об этом, давайте рассмотрим модель обработки ошибок и исключений в ASP.NET Core, потому что нарушение безопасности без надлежащей наблюдаемости подобно поиску иголки в стоге сена.
Критическая уязвимость в DataProtection: CVE-2026-40372
Одним из самых серьезных инцидентов, затронувших экосистему, является CVE-2026-40372 — критическая уязвимость в Microsoft.AspNetCore.DataProtection.Microsoft исправила эту ошибку с помощью внепланового обновления в версии .NET 10.0.7. Серьезность проблемы не является незначительной: CVSS 3.1 из 9,1 (Обзор) и удалённая эксплуатация без аутентификации.
Эта уязвимость затрагивает Версии 10.0.0–10.0.6 пакета NuGet Microsoft.AspNetCore.DataProtection и связанных зависимостей, таких как Microsoft.AspNetCore.DataProtection.StackExchangeRedis. Проблема заключается в очень тонком, но разрушительном недостатке в криптографической логике управляемого аутентифицированного шифра ASP.NET Core.
Уязвимый компонент Вычисляет тег проверки HMAC для некорректных байтов в полезной нагрузке. В некоторых случаях система даже отбрасывает сгенерированный хеш. Эта ошибочная проверка полностью разрушает ожидаемую модель доверия: злоумышленник может создавать полезные нагрузки, которые выглядят легитимными, обходя проверки подлинности системы защиты данных.
Практические последствия особенно серьезны.Это связано с тем, что DataProtection используется не только для шифрования произвольных данных; он лежит в основе многих механизмов безопасности ASP.NET Core: аутентификационных файлов cookie, токенов защиты от подделки, TempData, состояния OIDC и других элементов, которые зависят от этого набора ключей. Если эти объекты можно подделать или расшифровать, у злоумышленника появляется прямой путь к повышению привилегий.
Реальные последствия: файлы cookie, токены и компрометация личных данных.
Уязвимость в DataProtection позволяет злоумышленнику подделка полезных нагрузок, прошедших криптографические проверки а в некоторых случаях даже расшифровать ранее защищенные данныеВ средах, где используются API защиты ASP.NET Core, это приводит к очень тревожному спектру атак.
Потенциально раскрытые данные включают в себя файлы cookie аутентификации, токены защиты от подделки, временные данные, статус OIDC и другие внутренние токены.В худшем случае неавторизованный злоумышленник может создать cookie-файл или токен, идентифицирующий его как пользователя с повышенными привилегиями, например, администратора приложения или администратора внутренней службы.
Ситуация осложняется тем, что если в течение уязвимого периода злоумышленнику удастся получить высокий уровень доступаЭто может побудить заявителя выпустить законные, но полученные злонамеренным путем активы: Ключи API, токены обновления сессии, ссылки для сброса пароля или ключи постоянного доступаВсе эти артефакты останутся действительными даже после обновления до .NET 10.0.7, если не будут приняты дополнительные меры.
Иными словами, даже если вы примените пластырь, если вы не отреагируете должным образом, В вашей системе по-прежнему могут быть уязвимы токены, уже выпущенные в условиях взлома.Именно поэтому Microsoft сравнивает этот недостаток с историческими уязвимостями, такими как MS10-070, связанными с проблемами оракула заполнения в устаревшем шифровании ASP.NET.
Компания Microsoft обнаружила эту регрессию в результате Сообщения от клиентов о сбоях расшифровки после установки .NET 10.0.6 В ходе апрельского обновления Patch Tuesday команда обнаружила, что инцидент (первоначально описанный в проблеме aspnetcore #66335) представлял собой не просто функциональную ошибку, а серьезную уязвимость безопасности, требующую срочного внепланового обновления.
Условия эксплуатации и окружающая среда
Хотя эта неудача критична, Не все среды доступны по умолчанию.Согласно официальной информации, для использования уязвимости CVE-2026-40372 необходимо соблюдение ряда специфических условий, касающихся пакетов и среды выполнения.
С одной стороны, приложение должно использовать Уязвимые версии пакета Microsoft.AspNetCore.DataProtection (от 10.0.0 до 10.0.6) или библиотеках, которые загружают его во время выполнения. Кроме того, уязвимость оказывает большее влияние на операционные системы, отличные от Windows, такие как Линукс и МакОСЭто идеально соответствует типичному развертыванию ASP.NET Core в контейнерах, оркестраторах и облачных платформах.
Вектор атаки обычно выполняется. через сеть, без необходимости предварительной аутентификации.Это повышает опасность для приложений, доступных через интернет. Злоумышленник может отправлять специально созданные вредоносные программы, как если бы они были обычными клиентами системы, не требуя действительных учетных данных.
На практике это означает, что Инфраструктуры на основе микросервисов, контейнеров Docker и платформ PaaS. Системы, использующие DataProtection для обмена ключами или состоянием аутентификации между экземплярами, являются приоритетными целями. Если хранилище ключей не было обновлено и заменено, существует реальный риск того, что единичный взлом может перерасти в постоянный, труднообнаружимый доступ.
По всем вышеперечисленным причинам командам по обеспечению безопасности приложений необходимо Проведите детальный анализ того, какие сервисы загружают уязвимый пакет. и на каких операционных системах они работают, вместо того чтобы предполагать, что проблема затрагивает только очень специфические сценарии.
Срочные действия: обновление до .NET 10.0.7 и ротация ключей.
Главная рекомендация Microsoft очевидна: Немедленно обновите пакет Microsoft.AspNetCore.DataProtection до версии 10.0.7. и перекомпилировать приложения с исправленными средами выполнения и SDK (например, .NET SDK 10.0.203 и соответствующими средами выполнения).
Чтобы убедиться в корректном обновлении среды, следует выполнить следующую команду: Проверьте с помощью команды `dotnet –info`, что версия среды выполнения — 10.0.7. соответствующий. Недостаточно просто установить среду выполнения на сервере; это необходимо. пересобрать и повторно развернуть приложения Использование обновленных образов контейнеров или пакетов для обеспечения того, чтобы производственный код был связан с исправленными бинарными файлами.
Однако, как уже упоминалось, установка патча сама по себе не устранит уже нанесенный ущерб. Microsoft настоятельно не рекомендует этого делать. поверните связку ключей DataProtection в средах, которые были подвержены уязвимости, с целью аннулирования любых токенов, cookie-файлов или учетных данных, злонамеренно сгенерированных в течение периода уязвимости.
Помимо обновления и смены ключей, целесообразно также... принудительно закрыть активные сессии (отзыв файлов cookie для входа в систему, токенов доступа и т. д.), требование повторной аутентификации и активация подробный аудит журналов для проверки подозрительной активности, особенно нетипичного административного доступа, создания ключей API, сброса паролей и операций с привилегиями.
С точки зрения DevSecOps, этот инцидент подчеркивает важность внедрения сканеры зависимостей в цепочке CI/CD и для включения автоматических оповещений при обнаружении критических уязвимостей в сторонних пакетах. В случае с DataProtection, как и с любой криптографической библиотекой, небольшое изменение в поведении может нарушить всю модель безопасности, если оно не будет тщательно проверено.
Ещё одна критическая уязвимость: подмена HTTP-запросов в Kestrel (CVE-2025-55315)
Помимо уязвимости в DataProtection, была обнаружена еще одна. Крайне серьезная уязвимость безопасности в ASP.NET Core.На этот раз основное внимание было уделено веб-серверу Kestrel. Он был идентифицирован как CVE-2025-55315Это было классифицировано как ошибка подмены HTTP-запроса с уровнем серьезности . 9,9 из 10.
Суть проблемы заключается в том, что Злоумышленник может внедрить второй вредоносный HTTP-запрос в, казалось бы, легитимный запрос.Это типичный пример так называемых атак с использованием подмены запросов или манипуляций с HTTP-фреймингом. Этот метод может использоваться для обхода средств контроля безопасности, расположенных на прокси-серверах, балансировщиках нагрузки или самом сервере, и заставляет бэкэнд обрабатывать данные, которые он никогда не должен был принимать.
Согласно предупреждению Microsoft, потенциальные последствия включают в себя следующее: несанкционированный доступ к конфиденциальной информации, кража учетных данных, несанкционированное изменение файлов. и даже существует вероятность возникновения сбоев в работе серверов, влияющих на доступность. За счет прямого воздействия на транспортный уровень HTTP спектр атак очень широк: от обхода аутентификации до перенаправления трафика на внутренние маршруты.
Данная уязвимость затрагивает в частности Microsoft.AspNetCore.Server.Kestrel.Core Эта уязвимость существует в некоторых версиях ASP.NET Core и считается одной из самых серьезных проблем безопасности, с которыми платформа столкнулась за последние годы. Кроме того, это уязвимый вектор для неавторизованных злоумышленников, что значительно увеличивает поверхность атаки.
Барри Дорранс, технический руководитель по безопасности в .NET, объяснил, что Такой высокий балл отражает наихудший из возможных сценариев.Поскольку фактическое воздействие во многом зависит от того, как построено каждое приложение, оценка основана на предположении об обходе механизмов безопасности с изменением области действия, что является типом сбоя, считающимся неприемлемым в корпоративной среде.
Затронутые версии и исправления для Kestrel и ASP.NET Core
Для устранения уязвимости CVE-2025-55315 компания Microsoft выпустила... Обновления безопасности, специфичные для различных ветвей .NET и ASP.NET Core., включая как старые, так и новые версии, в том числе ASP.NET Core 2.3, 8.0 и 9.0.
В средах, где он используется .NET 8 или вышеРекомендуемый способ устранения проблемы включает в себя применение всех доступных исправлений. Microsoft Update и впоследствии убедиться, что среды выполнения и пакеты имеют исправленную версию. Особенно важно проверить, что приложения перекомпилированы с этими версиями и что производственные образы больше не содержат уязвимых бинарных файлов.
В случае проектов, которые все еще находятся в стадии реализации. .NET 2.3Microsoft указывает, что это крайне важно. Обновите ссылку на пакет Microsoft.AspNet.Server.Kestrel.Core до версии 2.3.6.Перекомпилируйте решение и повторно разверните развертывания. В противном случае Kestrel продолжит обрабатывать запросы с ошибочной логикой, которая позволяет подменять HTTP-запросы.
Развертывания, которые используют автономные приложения или приложения, упакованные в один файл. Они также обязаны компилировать программу с нуля с использованием исправленных сред выполнения, иначе исполняемый файл по-прежнему будет содержать уязвимый код. Легко забыть об этой детали, если слишком полагаться на простое обновление хоста.
Наряду с обновлениями самой платформы, Microsoft выпустила Патчи для Microsoft.AspNetCore.Server.Kestrel.Core и других связанных компонентов.Цель этого — повысить надежность анализа и обработки HTTP-запросов. Короче говоря, это не единичное, изолированное исправление, а скоординированное улучшение в нескольких точках стека ASP.NET Core.
Дополнительные важные обновления в ASP.NET Core и глобальные риски.
Помимо этих конкретных случаев, Microsoft выпускает критически важные исправления для других уязвимостей в ASP.NET Core Эти уязвимости могут привести к удаленному выполнению кода (RCE), повышению привилегий и атакам типа «отказ в обслуживании» (DoS). Сочетание этих недостатков ясно показывает, что фреймворк, каким бы зрелым он ни был, не застрахован от опасных регрессий.
Эти сбои влияют ключевые компоненты среды выполнения ASP.NET CoreЭто включает в себя обработку HTTP-запросов, промежуточное программное обеспечение для аутентификации и авторизации, а также API, связанные с сериализацией и десериализацией данных. Во многих случаях злоумышленники могут использовать уязвимости. некорректные входные данные или измененные полезные нагрузки вызывать неожиданное поведение.
Затронутые версии обычно соответствуют выпуски, предшествующие обновлениям безопасности, опубликованным в апреле 2026 года.Поэтому аудит версий обязателен во всех производственных средах, где продолжают использоваться старые сборки. В наше время оставление серверов с устаревшими версиями — верный путь к катастрофе.
С точки зрения бизнеса, невыполнение этих исправлений может иметь очень серьезные последствия: Утрата конфиденциальности данных, нарушение целостности данных, недоступность основных услуг. а также репутационный ущерб, на восстановление после которого уходят годы. Организациям, которые используют ASP.NET Core для критически важных приложений, следует рассматривать управление обновлениями как непрерывный процесс, а не как разовую задачу.
Общая рекомендация Microsoft заключается в следующем: Устанавливайте обновления сразу же после их появления и проверяйте параметры безопасности среды.Усильте мониторинг подозрительной активности и пересмотрите процессы безопасной разработки, чтобы свести к минимуму вероятность внесения уязвимостей в сам код приложения.
Обработка ошибок и исключений в ASP.NET Core: ключевой элемент головоломки.
Когда мы говорим о безопасности, мы часто думаем только о патчах и криптографии, но В ASP.NET Core крайне важна хорошая система обработки ошибок. для обнаружения, расследования и устранения инцидентов. Фреймворк предлагает множество механизмов для обработки исключений, возврата соответствующих кодов состояния и предоставления стандартных ответов, таких как ProblemDetails, в API.
В средах разработки ASP.NET Core по умолчанию включает следующие функции: Страница исключений для разработчиков При выполнении определенных условий (обычно в среде разработки) эта страница запускается промежуточным ПО DeveloperExceptionPageMiddleware, которое размещается в начале HTTP-конвейера. перехват необработанных исключений, как синхронных, так и асинхронных.и отображать подробную информацию.
На странице исключений для разработчиков может содержаться следующее: трассировки стека, параметры строки запроса, файлы cookie, заголовки HTTP и метаданные конечной точки.Это великолепный инструмент в процессе разработки, но, логично предположить, В рабочей среде эту функцию включать не следует.Потому что раскрытие внутренних деталей облегчает жизнь злоумышленникам.
В производственной среде рекомендуется настроить пользовательская страница ошибки с использованием UseExceptionHandlerЭто промежуточное ПО перехватывает необработанные исключения, регистрирует их и повторно выполняет запрос через альтернативный конвейер, обычно указывающий на маршрут, например, /Error.
При повторной установке трубопровода важно помнить, что Промежуточное ПО можно вызвать повторно с тем же HttpContext.Поэтому рекомендуется очищать внутренние состояния, кэшировать результаты или повторно использовать уже прочитанные данные (например, тело запроса), чтобы избежать дополнительных ошибок. Кроме того, области действия сервисов остаются неизменными на протяжении всего повторного выполнения.
Доступ к исключениям и централизованное управление с помощью IExceptionHandler
Для получения подробной информации об исключении, вызвавшем страницу ошибки, ASP.NET Core предоставляет следующую функцию: IExceptionHandlerPathFeature. Через HttpContext.Features.Get Можно получить как исходный путь запроса, так и сам объект исключения.
Распространенная схема в Razor Pages состоит из следующих элементов: Сохраните RequestId и понятное сообщение об ошибке в модели страницы.Использование IExceptionHandlerPathFeature позволяет настраивать сообщение в зависимости от типа исключения (например, FileNotFoundException) или пути, вызвавшего сбой. Это позволяет отображать пользователю более информативные сообщения об ошибках, не скрывая внутренних деталей.
В дополнение к подходу, основанному на страницах или контроллерах, ASP.NET Core предлагает интерфейс. IExceptionHandler в качестве централизованного механизма обработки исключений. Реализации этого интерфейса регистрируются в AddExceptionHandler. Они выполняются в порядке очереди, возвращая true, когда обрабатывают исключение, и false, когда предпочитают делегировать выполнение стандартному поведению.
Эта система облегчает, например, Записывать ошибки во внешнюю систему, применять условную логику в зависимости от типа исключения. или изменять глобальный HTTP-ответ, не затрагивая каждый контроллер по отдельности. Начиная с .NET 10, промежуточное ПО для обработки исключений также позволяет настроить SuppressDiagnosticsCallback, чтобы определить, когда следует подавлять метрики и журналы в случае уже обработанных исключений.
Ещё один очень гибкий вариант — использовать лямбда в UseExceptionHandlerЭто включает в себя прямой доступ к контексту, установку кода состояния и Content-Type, а также ручное написание ответа. Вы даже можете использовать IProblemDetailsService внутри этой лямбда-функции для отправки стандартного ответа ProblemDetails, который четко описывает проблему.
Страницы с кодами состояния и ответы ProblemDetails
По умолчанию используется приложение ASP.NET Core. Он не отображает страницы, совместимые с кодами состояния HTTP, такими как 404.Функция просто возвращает код и пустое тело. Для улучшения пользовательского опыта и упрощения отладки можно включить промежуточное ПО для страниц кодов состояния, используя UseStatusCodePages.
UseStatusCodePages поддерживает несколько режимов: Обычный текст с общим сообщением, лямбда-функции для полной настройки ответа. или варианты, которые перенаправляют или повторно выполняют конвейер на альтернативную конечную точку, такие как UseStatusCodePagesWithRedirects и UseStatusCodePagesWithReExecute.
С помощью UseStatusCodePagesWithRedirects, промежуточное ПО Программа возвращает код 302 Found и перенаправляет клиента на URL-адрес, который обычно отображает более удобный для пользователя интерфейс.Обычно возвращается код 200 OK. Такой подход имеет смысл, когда вы хотите, чтобы адресная строка отображала окончательный путь ошибки, и вы не хотите сохранять исходный код состояния.
С другой стороны, UseStatusCodePagesWithReExecute Исходный код состояния не меняется.Вместо этого запрос выполняется повторно по другому маршруту для генерации тела ответа. Исходный URL-адрес сохраняется в адресной строке браузера, а в точке ошибки можно получить исходный маршрут и запрос с помощью функции IStatusCodeReExecuteFeature, что очень полезно для логирования и отладки.
В сфере API ASP.NET Core полностью перенял этот стандарт. ProblemDetails — стандартный формат для ответов об ошибках.Зарегистрировав AddProblemDetails в контейнере сервисов, промежуточное ПО может автоматически генерировать JSON-ответы с такими полями, как type, title, status и traceId, когда возникают ошибки на стороне клиента или сервера без тела ответа.
Это поведение можно настроить с помощью ProblemDetailsOptions.CustomizeProblemDetailsЭто включает в себя добавление расширений, таких как идентификатор узла (например, имя машины) или другие метаданные, которые помогают отслеживать проблемы в распределенных средах. Также можно реализовать собственный IProblemDetailsWriter, который определяет, какие состояния обрабатывать и как сериализовать подробности.
Уроки для DevSecOps и лучшие практики непрерывного совершенствования.
Каскад уязвимостей в ASP.NET Core и его экосистеме .NET преподносит несколько важных уроков любой серьезной команде разработчиков: Зависимости от третьих сторон являются критически важным фактором; плохо реализованная криптография разрушает всю модель доверия. а механизмы аутентификации стали главной целью для злоумышленников.
С точки зрения DevSecOps это становится крайне важным. интегрировать анализ зависимостей В конвейерах CI/CD необходимо проводить непрерывное тестирование безопасности и обеспечивать четкую видимость всех сторонних компонентов, интегрируемых в проект. Инструменты анализа состава программного обеспечения (SCA) и сканеры уязвимостей должны перестать быть необязательными и стать частью стандартного рабочего процесса интеграции.
Также крайне важно укреплять Аудит журналов и мониторинг событий безопасностиЭто особенно актуально в отношении аутентификации, выдачи токенов, создания сессий, изменения разрешений и административных операций. Без надлежащего логирования и оповещений уязвимость, подобная CVE-2026-40372 или CVE-2025-55315, может незаметно использоваться в течение нескольких месяцев.
Несмотря на свою сложность и большое количество недавних ошибок, ASP.NET Core остается надежным фреймворком, если его правильно обновлять и безопасно настраивать. Сочетание Быстрое обновление программного обеспечения, ротация ключей при необходимости, эффективные методы обработки ошибок и проактивный подход к безопасности. Это отличает надежную платформу от легкой мишени для злоумышленников.
Весь этот набор уязвимостей и механизмов их устранения напоминает нам о том, что Безопасность в ASP.NET Core — это не просто вопрос периодического применения обновлений.Вместо этого мы предлагаем придерживаться непрерывной дисциплины: мониторинг версий пакетов и среды выполнения, обработка ошибок и исключений, анализ HTTP-ответов и предоставляемых нами сведений о проблемах, а также поддержка всего этого с помощью зрелых процессов DevSecOps, позволяющих быстро реагировать на любые критические сбои в экосистеме .NET.
Страстный писатель о мире байтов и технологий в целом. Мне нравится делиться своими знаниями в письменной форме, и именно этим я и займусь в этом блоге: покажу вам все самое интересное о гаджетах, программном обеспечении, оборудовании, технологических тенденциях и многом другом. Моя цель — помочь вам ориентироваться в цифровом мире простым и интересным способом.


