Генерирует пять форматов полезных нагрузок .NET для десериализации по CVE-2026-56158, доставляет их через конечные точки HTTP/SOAP/JSON, включает мок-сервер, сканер и вывод JSON-отчёта.
Критический (CVSS 9.8) — десериализация недоверенных данных (CWE-502) в Microsoft .NET Framework и .NET Runtime Исправлено: 14 июля 2026 | Обнаружено: Positive Technologies (PT-2026-60174)
CVE-2026-56158 — критическая уязвимость удалённого выполнения кода в Microsoft .NET Framework и .NET runtime. Проблема заключается в небезопасной десериализации недоверенных данных (CWE-502): когда .NET-приложение использует устаревшие сериализаторы (BinaryFormatter, NetDataContractSerializer, SoapFormatter, ObjectStateFormatter) или Json.NET с TypeNameHandling.All/Auto, неаутентифицированный удалённый злоумышленник может доставить специально сформированную сериализованную полезную нагрузку, которая при десериализации приводит к выполнению произвольного кода.
Уязвимость имеет базовую оценку CVSS 3.1 — 9.8 (критический) с вектором AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, что означает:
Microsoft выпустила обновления безопасности 14 июля 2026 года в рамках ежемесячного цикла Patch Tuesday.
| Поле | Значение |
|---|---|
| CVE ID | CVE-2026-56158 |
| Название | Уязвимость удалённого выполнения кода в .NET Framework |
| CVSS 3.1 | 9.8 (критический) (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CVSS 2.0 | 7.5 (высокий) (AV:N/AC:L/Au:N/C:P/I:P/A:P) |
| CWE | CWE-502 (десериализация недоверенных данных) |
| Опубликовано | 14 июля 2026 |
| Исправлено | 14 июля 2026 |
| Исследователь | Positive Technologies (PT-2026-60174) |
| EPSS | Оценка ещё не присвоена |
| CISA KEV | Не указан |
Устаревшие сериализаторы .NET runtime восстанавливают произвольные типы объектов из сериализованных потоков без проверки типа или содержимого. Когда злоумышленник контролирует сериализованные входные данные, он может направить десериализатор на создание экземпляров неожиданных типов, конструкторы, обратные вызовы или сеттеры свойств которых выполняют произвольный код, — это классическая атака с использованием цепочки гаджетов при десериализации.
Уязвимость затрагивает несколько механизмов сериализации:
TypeConfuseDelegate делегирует вызов Process.StartProcessStartInfo встраивается в тело SOAPProcess.Start через поле ViewState$type при включённом TypeNameHandling.All/Auto; гаджет ObjectDataProvider вызывает Process.Start| Продукт | Уязвимый диапазон | Исправленная версия | Статья KB |
|---|---|---|---|
| .NET 8.0 | 8.0.0 – 8.0.28 | 8.0.29 | KB5100998 |
| .NET 9.0 | 9.0.0 – 9.0.17 | 9.0.18 | KB5100998 |
| .NET 10.0 | 10.0.0 – 10.0.9 | 10.0.10 | KB5101001 |
| .NET Framework 3.5 | Все до исправления | Исправлено | KB5100985 |
| .NET Framework 4.6.2–4.7.2 | Все до исправления | Исправлено | KB5100991 |
| .NET Framework 4.8 | Все до исправления | Исправлено | KB5101011 |
| .NET Framework 4.8.1 | Все до исправления | Исправлено | KB5101002 |
| Visual Studio 2022 (17.12) | До исправления | 17.12.x | — |
| Visual Studio 2022 (17.14) | До исправления | 17.14.x | — |
| Visual Studio 2026 (18.7) | До исправления | 18.7.x | — |
Пакеты Alpine Linux:
dotnet8-runtime < 8.0.29-r0dotnet9-runtime < 9.0.18-r0dotnet10-runtime < 10.0.10-r0Данный PoC-эксплойт генерирует и доставляет полезные нагрузки через 5 различных форматов атак при десериализации:
Serialized Stream → BinaryFormatter.Deserialize() → TypeConfuseDelegate
→ Process.Start("cmd.exe", "/c calc.exe") → RCE
application/octet-streamActivitySurrogateSelector+ObjectSurrogate → TypeConfuseDelegate → Process.StartXML with type info → NetDataContractSerializer.ReadObject()
→ ProcessStartInfo instantiation → Process.Start → RCE
application/octet-stream или text/xmlSOAP envelope → SoapFormatter.Deserialize()
→ ProcessStartInfo in SOAP body → Process.Start → RCE
text/xmlViewState binary → ObjectStateFormatter.Deserialize()
→ Process.Start via ViewState field → RCE
application/octet-stream__VIEWSTATE в HTTP POSTJSON with $type → JsonConvert.DeserializeObject<T>(json, TypeNameHandling.All)
→ ObjectDataProvider.MethodName = "Start" → Process.Start → RCE
$typeapplication/jsonTypeNameHandling.All или Auto