TGViewer
Искусство. Код... ИИ? Искусство. Код... ИИ? @art_code_ai · 706 subscribers
Post #78 552
🐞 CVE-2026-40372: Improper verification of cryptographic signature in ASP.NET Core

Microsoft сама сравнивает эту уязвимость, исправленную на днях, и получившую CVSSv2 9.4, с MS10-070 (2010 год) — классической padding oracle атакой на legacy ASP.NET ViewState/encryption infrastructure. Обе уязвимости разрушают криптографические гарантии целостности, позволяя подделывать подписанные данные. Разница в том, что MS10-070 требовала множественных запросов для oracle-атаки, тогда как CVE-2026-40372 позволяет напрямую подделывать payload'ы, поскольку HMAC-проверка фактически отсутствует.

ASP.NET Core Data Protection — это встроенный фреймворк для симметричного шифрования и HMAC-подписи конфиденциальных данных «на лету». Он применяется повсеместно в ASP.NET Core приложениях: шифрование и подпись authentication cookies, защита antiforgery-токенов, шифрование TempData, защита session state и любых пользовательских payload'ов через IDataProtector.Protect() / Unprotect().

🐛 Уязвимость

В .NET 10.0 разработчики переписали часть кода ManagedAuthenticatedEncryptor — managed-реализации аутентифицированного шифрования, которая используется на Linux, macOS и других не-Windows платформах (на Windows используется отдельный путь через CNG, который этой уязвимостью не затронут).

Регрессия была внесена в метод CalculateAndValidateMac класса ManagedAuthenticatedEncryptor. Ошибка заключалась в двух вещах:

HMAC вычислялся по неправильному диапазону байт payload'а — вместо (IV + ciphertext + AAD) использовались некорректные смещения, из-за чего подпись фактически покрывала не те данные.

Вычисленный хеш в ряде случаев отбрасывался — результат HMAC-вычисления не сравнивался с тегом из входящего payload'а, либо сравнивался с массивом нулевых байт.

Вот, как выглядел уязвимый код код (упрощенно):
// ManagedAuthenticatedEncryptor.CalculateAndValidateMac

private void CalculateAndValidateMac(
byte[] payloadArray,
int ivOffset,
int macOffset, // смещение, где начинается HMAC-тег в payload
int eofOffset, // конец payload
ReadOnlySpan<byte> validationSubkey,
byte[] validationSubkeyArray)
{
using var hmac = new HMACSHA256(validationSubkeyArray);
byte[] computedMac = hmac.ComputeHash(
payloadArray,
ivOffset,
ivOffset // <-- ОШИБКА: должно быть (macOffset - ivOffset), хэш считается по пустому буферу
);
}


В результате любой payload с произвольным содержимым и нулевыми (или любыми) байтами вместо HMAC-тега проходил валидацию.

🧑‍💻 Атаки

Подделка authentication cookie

Формат cookie: Base64Url( [key_id:16B] [IV:16B] [AES-CBC(AuthTicket):NB] [HMAC:32B])

Атакующий формирует поддельный cookie:
var forgedTicket = CreateAuthTicket(
claimsIdentity: new ClaimsIdentity(new[] {
new Claim(ClaimTypes.Name, "admin"),
new Claim(ClaimTypes.Role, "Administrator")
}, "Cookies")
);

byte[] iv = RandomBytes(16);
byte[] ciphertext = AesCbcEncrypt(arbitraryKey, iv, Serialize(forgedTicket));

byte[] fakeHmac = new byte[32];

// (key_id публично доступен — он передаётся в каждом cookie)
byte[] payload = Concat(knownKeyId, iv, ciphertext, fakeHmac);

string forgedCookie = Base64UrlEncode(payload);


Обход antiforgery-токенов

ASP.NET Core Antiforgery также опирается на Data Protection. Атакующий может аналогичным образом подделать и antiforgery-токен и выполнять CSRF-атаки, обходя стандартную защиту.

Расшифровка защищённых данных

Поскольку MAC-валидация не работает, атакующий может использовать приложение как оракул: отправлять модифицированные payload'ы и по ответам приложения (ошибка расшифровки vs. успех) побайтово восстанавливать ключ шифрования. После чего — расшифровать любые перехваченные ранее protected-payload'ы.

Ну и 🍒, напоследок: если во время окна уязвимости атакующий подделал cookie и аутентифицировался как привилегированный пользователь, приложение выдало ему легитимно подписанные токены — refresh-токены, API-ключи, ссылки для сброса пароля. Эти токены остаются валидными и после обновления до 10.0.7, пока не будет ротирован Key Ring 😕

#уязвимости
  • ❤ 3
  • 🔥 2
More from @art_code_ai
  1. Sep 29, 2026Объяснили с Раддой Юрьевой на Хабре, почему смешивать формальные и ИИшные подходы в задача…
  2. Sep 27, 2026🔗 Старый добрый аппсек, часть 2 Продолжаем вспоминать ключевые вехи аппсека и смежных обл…
  3. Sep 26, 2026Post #155
  4. Sep 24, 2026🔗 Старый добрый аппсек, часть 1 ...совершенно незаслуженно задвинутый на второй план ИИ-х…
  5. Sep 23, 2026Post #153
  6. Sep 21, 2026👨‍💻 Продуктивные выходные Как-то незаметно (и неожиданно) для себя с удовольствием провё…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →