Genera cinco formatos de payload de deserialización .NET para CVE-2026-56158, los entrega a través de endpoints HTTP/SOAP/JSON, e incluye servidor mock, escáner y salida de informes JSON.
Crítico (CVSS 9.8) — Deserialización de datos no confiables (CWE-502) en Microsoft .NET Framework y .NET Runtime Parcheado: 14 de julio de 2026 | Atribuido a: Positive Technologies (PT-2026-60174)
CVE-2026-56158 es una vulnerabilidad crítica de ejecución remota de código en Microsoft .NET Framework y en el runtime de .NET. La falla reside en la deserialización insegura de datos no confiables (CWE-502): cuando una aplicación .NET utiliza serializadores heredados (BinaryFormatter, NetDataContractSerializer, SoapFormatter, ObjectStateFormatter) o Json.NET con TypeNameHandling.All/Auto, un atacante remoto no autenticado puede entregar una carga útil serializada manipulada que desencadena la ejecución de código arbitrario al deserializarla.
La vulnerabilidad tiene una puntuación base CVSS 3.1 de 9.8 (Crítico) con el vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, lo que significa:
Microsoft publicó actualizaciones de seguridad el 14 de julio de 2026 como parte del ciclo mensual de Patch Tuesday.
| Campo | Valor |
|---|---|
| ID de CVE | CVE-2026-56158 |
| Título | Vulnerabilidad de ejecución remota de código en .NET Framework |
| CVSS 3.1 | 9.8 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CVSS 2.0 | 7.5 Alto (AV:N/AC:L/Au:N/C:P/I:P/A:P) |
| CWE | CWE-502 (Deserialización de datos no confiables) |
| Publicación | 14 de julio de 2026 |
| Parche | 14 de julio de 2026 |
| Descubridor | Positive Technologies (PT-2026-60174) |
| EPSS | Aún sin puntuación |
| CISA KEV | No incluida |
Los serializadores heredados del runtime de .NET reconstruyen tipos de objetos arbitrarios a partir de flujos serializados sin validar el tipo ni el contenido. Cuando un atacante controla la entrada serializada, puede dirigir al deserializador para que cree instancias de tipos inesperados cuyos constructores, callbacks o setters de propiedades ejecuten código arbitrario: un ataque clásico de cadena de gadgets de deserialización.
La vulnerabilidad afecta a múltiples mecanismos de serialización:
TypeConfuseDelegate delega en Process.StartProcessStartInfo incrustado en el cuerpo SOAPProcess.Start mediante el campo ViewState$type cuando TypeNameHandling.All/Auto está habilitado; el gadget ObjectDataProvider llama a Process.Start| Producto | Rango vulnerable | Versión corregida | Artículo de 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 | Todos los anteriores al parche | Parcheado | KB5100985 |
| .NET Framework 4.6.2–4.7.2 | Todos los anteriores al parche | Parcheado | KB5100991 |
| .NET Framework 4.8 | Todos los anteriores al parche | Parcheado | KB5101011 |
| .NET Framework 4.8.1 | Todos los anteriores al parche | Parcheado | KB5101002 |
| Visual Studio 2022 (17.12) | Anterior al parche | 17.12.x | — |
| Visual Studio 2022 (17.14) | Anterior al parche | 17.14.x | — |
| Visual Studio 2026 (18.7) | Anterior al parche | 18.7.x | — |
Paquetes de Alpine Linux:
dotnet8-runtime < 8.0.29-r0dotnet9-runtime < 9.0.18-r0dotnet10-runtime < 10.0.10-r0Este exploit PoC genera y entrega cargas útiles mediante 5 formatos diferentes de ataque por deserialización:
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 o 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 de HTTP POSTJSON with $type → JsonConvert.DeserializeObject<T>(json, TypeNameHandling.All)
→ ObjectDataProvider.MethodName = "Start" → Process.Start → RCE
$typeapplication/jsonTypeNameHandling.All o Auto