Компания Microsoft выпустила внеплановое обновление для ASP.NET Core. Патч устранил критическую уязвимость в криптографических API Data Protection, которая позволяла неаутентифицированным атакующим получить привилегии SYSTEM, подделав аутентификационные файлы cookie.
Уязвимость отслеживается под идентификатором CVE-2026-40372 и получила 9,1 балла по шкале CVSS. Проблему обнаружили после того, как пользователи начали массово сообщать о сбоях дешифрования в своих приложениях: ошибка проявилась с установкой .NET 10.0.6, вышедшей в рамках апрельского «вторника обновлений».
Как пояснили в компании, регрессия в пакетах NuGet Microsoft.AspNetCore.DataProtection версий 10.0.0–10.0.6 приводила к тому, что managed authenticated encryptor вычислял HMAC-тег валидации по неверным байтам полезной нагрузки, а в некоторых случаях и вовсе отбрасывал вычисленный хеш. Из-за этого атакующий мог подделать полезные нагрузки, прошедшие проверки подлинности Data Protection, и расшифровать ранее защищенные аутентификационные cookie, antiforgery-токены, TempData, состояние OIDC и так далее.
Особую опасность представлял сценарий, при котором злоумышленник мог пройти аутентификацию под видом привилегированного пользователя и заставить приложение выпустить легитимно подписанные токены (обновление сессии, ключ API, ссылку для сброса пароля) для себя. Такие токены остаются действительными и после обновления до версии 10.0.7, если не произвести ротацию ключей Data Protection.
В Microsoft подчеркнули, что для успешной эксплуатации уязвимости нужно выполнить три условия:
- приложение использует пакет Microsoft.AspNetCore.DataProtection версии 10.0.6 из NuGet (напрямую или через зависимость вроде Microsoft.AspNetCore.DataProtection.StackExchangeRedis);
- NuGet-копия библиотеки фактически загружена в рантайме;
- приложение работает в Linux, macOS или другой ОС, отличной от Windows.
В компании призвали всех, чьи приложения используют ASP.NET Core Data Protection, как можно скорее обновить пакет Microsoft.AspNetCore.DataProtection до версии 10.0.7 и повторно развернуть приложение.
