Cve-2026-40372 в Asp.net core data protection: критическая уязвимость и патч 10.0.7

CVE-2026-40372 в ASP.NET Core: критическая дыра в Data Protection и срочный патч 10.0.7
---------------------------------------------------------------------

Microsoft выпустила внеплановый релиз .NET 10.0.7, закрывающий критическую уязвимость CVE-2026-40372 в ASP.NET Core Data Protection. Оценка по CVSS - 9,1, и это не формальность: ошибка в реализации HMAC позволяет атакующему подделать защищённые сервером данные, включая auth-cookie, и залогиниться как администратор. На Windows-деплоях при типичной конфигурации это часто означает прямой путь к получению прав SYSTEM на сервере.

Речь идёт не о теоретическом риске: баг затрагивает реальные продовые инсталляции, особенно те, где ASP.NET Core развёрнут на Linux и Data Protection используется по умолчанию без отдельной жёсткой настройки.

Какие версии уязвимы

Под уязвимость попадает не весь ASP.NET Core, а конкретный NuGet-пакет:

- уязвимы версии `Microsoft.AspNetCore.DataProtection` 10.0.0 - 10.0.6;
- исправление - версия 10.0.7, выпущенная 21 апреля 2026 года как out-of-band обновление;
- проблема затрагивает именно NuGet-пакет, а не копию Data Protection, встроенную в shared framework `Microsoft.AspNetCore.App`.

Если ваше приложение использует только shared framework и не подтягивает `Microsoft.AspNetCore.DataProtection` напрямую из NuGet, вы, с высокой вероятностью, вне зоны поражения. Но это нужно проверить, а не предполагать.

Почему это вторая критическая дыра ASP.NET Core за полгода

За последние полгода это уже вторая уязвимость уровня CVSS ~9 в ASP.NET Core. Вновь в фокусе - подсистема аутентифицированного шифрования небольших полезных нагрузок. Особо болезненно уязвимость бьёт по Linux-деплоям: там Data Protection часто хранит ключи локально на диске, а админские cookie и токены живут дольше и менее тщательно контролируются, чем в изолированных Windows-средах с доменными политиками.

В отличие от многих багов, которые дают лишь отказ в обслуживании или ограниченное повышение привилегий, CVE-2026-40372 позволяет атакующему создавать заведомо доверенные сервером токены, минуя аутентификацию. Это делает проблему ближе к классу "полный захват учёток и приложений", а не к простому DoS.

---

Что такое ASP.NET Core Data Protection

Data Protection в ASP.NET Core - это встроенная подсистема симметричной криптографии, которая:

- шифрует и аутентифицирует небольшие куски данных;
- выдаёт их клиенту (браузеру, внешнему сервису);
- затем проверяет и расшифровывает полученное обратно содержимое, удостоверяясь, что его никто не подменял.

Типичные сценарии использования:

- auth-cookie аутентификации пользователя;
- CSRF-токены (antiforgery) для защиты от межсайтовых запросов;
- TempData - временные данные между двумя запросами одного пользователя;
- параметр state в OpenID Connect-потоках;
- ссылки для сброса пароля и прочие одноразовые защитные токены.

То есть Data Protection - это механизм "доверенных конвертов": сервер кладёт в них критичные данные и ожидает, что при возврате содержимое будет либо идентично исходному, либо помечено как подделка.

Как это должно работать

Используется типовая схема encrypt-then-MAC:

1. Данные шифруются симметричным алгоритмом (в данном случае AES-256-CBC).
2. По комбинации IV + шифротекст вычисляется HMAC-SHA256.
3. На выходе формируется пакет: `IV + шифротекст + HMAC-тег`.
4. При расшифровке:
- сначала проверяется HMAC;
- если тег не совпадает, пакет считается подделанным и отбрасывается;
- только после успешной проверки происходит расшифровка.

Вся безопасность завязана на корректность HMAC-проверки. Именно это место и оказалось сломано.

---

В чём суть бага CVE-2026-40372

В версиях 10.0.0-10.0.6 в managed-реализации authenticated encryptor закралась регрессия:

- HMAC-тег в ряде случаев вычисляется не по тем байтам полезной нагрузки;
- уже рассчитанный корректный хеш может быть отброшен;
- из-за этого появляется возможность подобрать или сконструировать такой payload, при котором тег выглядит валидным для поддельного содержимого.

На практике это означает:

- подделка auth-cookie без знания ключей;
- фальсификация antiforgery-токенов;
- подмена OIDC state и прочих защищённых структур;
- возможность расшифровывать ранее защищённые данные (при определённых условиях).

Microsoft в заметках к релизу 10.0.7 описывает эффект лаконично: ошибка валидации даёт возможность "подделывать полезные нагрузки, проходящие проверки DataProtection, и расшифровывать уже защищённые данные". Если убрать эвфемизмы, это означает потерю доверия ко всем токенам и cookie, выпущенным через Data Protection за уязвимый период.

---

Кого конкретно задевает уязвимость

Важно понимать разницу между:

- shared framework `Microsoft.AspNetCore.App`, который ставится вместе с .NET Runtime;
- и NuGet-пакетом `Microsoft.AspNetCore.DataProtection`, подключенным явно в проект.

Под удар попадает именно NuGet-версия пакета 10.0.0-10.0.6. Сценарии:

1. Приложение использует только shared framework, без прямой зависимости от `Microsoft.AspNetCore.DataProtection`.
- В большинстве таких случаев уязвимость не затрагивает приложение.
2. Приложение явно указывает `Microsoft.AspNetCore.DataProtection` в `csproj`, NuGet-менеджере или аналогичной системе зависимостей.
- В этом случае NuGet-пакет переопределяет версию, встроенную в shared framework.
- Если там стоит версия 10.0.0-10.0.6, приложение уязвимо.

По платформам:

- Windows: при типичной конфигурации IIS + Windows Authentication компрометация auth-cookie админа может означать доступ к функционалу, позволяющему выполнить код от имени системы, а в ряде случаев - прямое получение прав SYSTEM.
- Linux: часто используют cookie-аутентификацию без интеграции с доменом, ключи крутятся локально. Успешная подделка токенов даёт полный доступ к админским разделам приложений, API, DevOps-интерфейсам и сервисам, развёрнутым рядом.

---

Почему одного обновления пакета мало

На первый взгляд кажется: достаточно обновиться на `Microsoft.AspNetCore.DataProtection` 10.0.7 - и всё. Но это лишь половина работы.

Ключевой момент: все токены и cookie, выпущенные во время уязвимого окна (например, когда у вас стояла версия 10.0.6), остаются криптографически корректно подписанными:

- Data Protection key ring тот же;
- подписи с точки зрения новой версии валидны;
- приложение продолжит принимать их как доверенные.

Даже после установки 10.0.7:

- уже выданные злоумышленнику поддельные токены продолжают работать;
- злоумышленник может использовать их до истечения срока действия или принудительной инвалидации.

Поэтому реальный фикс состоит из трёх шагов:

1. Обновить NuGet-пакет до версии 10.0.7.
2. Провести ротацию Data Protection key ring (сделать старые ключи непригодными).
3. Очистить или принудительно инвалидировать все критичные токены (auth-cookie, refresh-токены, сессии и т.п.).

---

Что делать с CVE-2026-40372 прямо сейчас

При наличии прод-среды на ASP.NET Core 10:

1. Проверить версию Data Protection:
- убедиться, что в проекте нет явной зависимости на `Microsoft.AspNetCore.DataProtection` 10.0.0-10.0.6;
- если зависимость есть - обновить до 10.0.7.
2. Убедиться, что деплой действительно поднялся с новой версией:
- проверить артефакты билда;
- удостовериться, что старые библиотеки не кэшируются контейнерами или окружением.
3. Ротировать Data Protection key ring:
- сгенерировать новый набор ключей;
- отключить или удалить старые ключи;
- учесть, что после ротации старые cookie и токены станут недействительными.
4. Принудительно перелогинить пользователей:
- инвалировать существующие сессии;
- сбросить auth-cookie;
- по возможности, сделать принудительный logout.

Если обновиться прямо сейчас невозможно, допустимы только временные меры смягчения, но не полноценный фикс.

---

Временные митигации, если обновление задерживается

Если по организационным причинам сразу поставить 10.0.7 нельзя, имеет смысл:

1. Включить MFA для всех админских и чувствительных аккаунтов.
Это не мешает подделывать auth-cookie, но добавляет дополнительный барьер на этапе эксплуатации полученных прав.

2. Сократить срок жизни auth-cookie до минимума:
- через `ExpireTimeSpan` в `CookieAuthenticationOptions`;
- при необходимости уменьшить также время жизни refresh-токенов и других долговечных токенов.

3. Принудительно разлогинить всех пользователей:
- при старте новой версии приложения;
- при первом запросе после обновления настроек;
- через централизованный механизм инвалидации сессий.

4. Ограничить доступ к административным интерфейсам:
- по IP (VPN, корпоративные сети);
- через отдельный reverse-proxy с дополнительной проверкой.

5. Повысить уровень логирования и мониторинг аномалий:
- отслеживать аномальные логины под админскими аккаунтами;
- мониторить необычную активность с одного IP или сетей общего доступа;
- настроить алерты по резким всплескам ошибок авторизации или подозрительных запросам к чувствительным endpoint.

Эти шаги не устраняют уязвимость, но сокращают окно для её успешной эксплуатации и позволяют быстрее отреагировать.

---

Как проверить, задет ли ваш деплой

1. Проверка shared framework
Выполните команду `dotnet --info` на сервере:
- посмотрите, какая версия `Microsoft.AspNetCore.App` установлена;
- если вы не используете явную NuGet-зависимость, велика вероятность, что проблемный пакет не подключён отдельно.

2. Проверка зависимостей проекта
Откройте файл проекта (`.csproj`) или используемый менеджер зависимостей и найдите:

```xml

```

Если версия попадает в диапазон 10.0.0-10.0.6 - приложение уязвимо и требует обновления до 10.0.7 с последующей ротацией ключей.

3. Анализ среды исполнения
- На контейнеризованных деплоях убедитесь, что образы действительно пересобраны;
- на серверах без контейнеров проверьте, нет ли side-by-side установки разных версий пакетов и не подхватывается ли старая версия из локального кэша.

---

Ротация Data Protection key ring: что важно учесть

Ротация - критический шаг, без него токены, украденные или подделанные во время уязвимого периода, останутся валидными. Основные моменты:

- Где хранятся ключи:
- в файловой системе;
- в Redis;
- в базе данных;
- в специальном хранилище секретов.
- Как выполняется ротация:
- генерация нового master-ключа;
- перевод старых ключей в статус "только для расшифровки" или полное их отключение;
- удаление или архивация старых ключей при необходимости.

После ротации:

- старые cookie и токены перестанут нормально расшифровываться;
- пользователи будут разлогинены;
- возможно возникновение всплеска ошибок аутентификации и жалоб пользователей - это нужно заранее учесть в плане коммуникации.

---

Организационные шаги: что стоит сделать помимо технического фикса

1. Оценить возможный ущерб
- определить, какие системы и окружения использовали уязвимую версию;
- оценить, были ли среди них критичные админские панели, платежные модули, внутренние DevOps-инструменты.

2. Провести анализ логов
- поискать аномальные входы в админские учётки;
- проверить попытки доступа к конфиденциальным разделам с необычных IP.

3. Обновить процессы управления зависимостями
- ужесточить политику обновления инфраструктурных пакетов (вроде Data Protection);
- внедрить автоматическую проверку уязвимостей в цепочке зависимостей;
- наладить регулярный аудит версий критичных компонентов.

4. Подготовить план экстренных обновлений
- описать единый сценарий действий при выходе таких out-of-band патчей;
- назначить ответственных за оперативную оценку риска и принятие решения об обновлении.

---

Где в общем ряду угроз находится CVE-2026-40372

Эта уязвимость - не очередной "косметический" баг уровня DoS. По сути, это:

- компрометация доверенной криптосистемы внутри фреймворка;
- возможность создавать ложные, но валидные с точки зрения сервера токены;
- прямой путь к захвату аккаунтов, включая админские;
- в Windows-сценариях - потенциальная ступенька к получению прав SYSTEM.

С учётом частоты и объёма деплоев ASP.NET Core, массового использования Data Protection "по умолчанию" и сложности быстрой ротации ключей, CVE-2026-40372 вполне можно отнести к классу инцидентов, к которым стоит относиться на уровне "немедленного реагирования".

---

Подведём итог: если ваше приложение на ASP.NET Core явно тянет `Microsoft.AspNetCore.DataProtection` версий 10.0.0-10.0.6, необходимо не только обновить пакет до 10.0.7, но и принудительно ротировать Data Protection key ring и инвалидировать выданные токены. Без этого риск эксплуатации уязвимости сохранится даже после установки патча.

Прокрутить вверх