Genera cinque formati di payload di deserializzazione .NET per CVE-2026-56158, li consegna tramite endpoint HTTP/SOAP/JSON, include mock server, scanner e output di report JSON.
Critico (CVSS 9.8) — Deserializzazione di dati non attendibili (CWE-502) in Microsoft .NET Framework e .NET Runtime Corretto: 14 luglio 2026 | Attribuito a: Positive Technologies (PT-2026-60174)
CVE-2026-56158 è una vulnerabilità critica di esecuzione remota di codice in Microsoft .NET Framework e nel runtime .NET. Il difetto risiede nella deserializzazione non sicura di dati non attendibili (CWE-502): quando un'applicazione .NET utilizza serializzatori legacy (BinaryFormatter, NetDataContractSerializer, SoapFormatter, ObjectStateFormatter) o Json.NET con TypeNameHandling.All/Auto, un attaccante remoto non autenticato può consegnare un payload serializzato appositamente costruito che innesca l'esecuzione di codice arbitrario al momento della deserializzazione.
La vulnerabilità presenta un punteggio base CVSS 3.1 di 9.8, livello Critico, con il vettore AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, il che significa:
Microsoft ha rilasciato gli aggiornamenti di sicurezza il 14 luglio 2026 nell'ambito del ciclo mensile Patch Tuesday.
| Campo | Valore |
|---|---|
| CVE ID | CVE-2026-56158 |
| Titolo | Vulnerabilità di Esecuzione Remota di Codice in .NET Framework |
| CVSS 3.1 | 9.8 Critico (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 (Deserializzazione di dati non attendibili) |
| Pubblicata | 14 luglio 2026 |
| Corretta | 14 luglio 2026 |
| Scoperta da | Positive Technologies (PT-2026-60174) |
| EPSS | Non ancora valutato |
| CISA KEV | Non elencato |
I serializzatori legacy del runtime .NET ricostruiscono tipi di oggetto arbitrari a partire da flussi serializzati senza validare il tipo o il contenuto. Quando un attaccante controlla l'input serializzato, può indirizzare il deserializzatore a istanziare tipi inattesi i cui costruttori, callback o setter di proprietà eseguono codice arbitrario: un classico attacco a catena di gadget per deserializzazione.
La vulnerabilità interessa diversi meccanismi di serializzazione:
TypeConfuseDelegate delega a Process.StartProcessStartInfo incorporato nel corpo SOAPProcess.Start tramite il campo ViewState$type quando TypeNameHandling.All/Auto è abilitato; il gadget ObjectDataProvider chiama Process.Start| Prodotto | Intervallo vulnerabile | Versione corretta | Articolo 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 | Tutte le versioni precedenti alla correzione | Corretto | KB5100985 |
| .NET Framework 4.6.2–4.7.2 | Tutte le versioni precedenti alla correzione | Corretto | KB5100991 |
| .NET Framework 4.8 | Tutte le versioni precedenti alla correzione | Corretto | KB5101011 |
| .NET Framework 4.8.1 | Tutte le versioni precedenti alla correzione | Corretto | KB5101002 |
| Visual Studio 2022 (17.12) | Pre-correzione | 17.12.x | — |
| Visual Studio 2022 (17.14) | Pre-correzione | 17.14.x | — |
| Visual Studio 2026 (18.7) | Pre-correzione | 18.7.x | — |
Pacchetti Alpine Linux:
dotnet8-runtime < 8.0.29-r0dotnet9-runtime < 9.0.18-r0dotnet10-runtime < 10.0.10-r0Questo exploit PoC genera e consegna payload tramite 5 diversi formati di attacco per deserializzazione:
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 di HTTP POSTJSON with $type → JsonConvert.DeserializeObject<T>(json, TypeNameHandling.All)
→ ObjectDataProvider.MethodName = "Start" → Process.Start → RCE
$typeapplication/jsonTypeNameHandling.All o Auto