Génère cinq formats de payload de désérialisation .NET pour CVE-2026-56158, les distribue via des endpoints HTTP/SOAP/JSON, inclut un serveur simulé, un scanner et une sortie de rapport JSON.
Critique (CVSS 9.8) — Désérialisation de données non fiables (CWE-502) dans Microsoft .NET Framework et .NET Runtime Corrigé : 14 juillet 2026 | Attribué à : Positive Technologies (PT-2026-60174)
CVE-2026-56158 est une vulnérabilité critique d'exécution de code à distance dans Microsoft .NET Framework et le runtime .NET. La faille réside dans la désérialisation non sécurisée de données non fiables (CWE-502) — lorsqu'une application .NET utilise des sérialiseurs hérités (BinaryFormatter, NetDataContractSerializer, SoapFormatter, ObjectStateFormatter) ou Json.NET avec TypeNameHandling.All/Auto, un attaquant distant non authentifié peut fournir une charge utile sérialisée spécialement conçue qui déclenche l'exécution de code arbitraire lors de la désérialisation.
La vulnérabilité présente un score de base CVSS 3.1 de 9.8 (Critique) avec le vecteur AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, ce qui signifie :
Microsoft a publié des mises à jour de sécurité le 14 juillet 2026 dans le cadre du cycle mensuel Patch Tuesday.
| Champ | Valeur |
|---|---|
| Identifiant CVE | CVE-2026-56158 |
| Titre | Vulnérabilité d'exécution de code à distance dans .NET Framework |
| CVSS 3.1 | 9.8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CVSS 2.0 | 7.5 Élevé (AV:N/AC:L/Au:N/C:P/I:P/A:P) |
| CWE | CWE-502 (Désérialisation de données non fiables) |
| Publiée | 14 juillet 2026 |
| Corrigée | 14 juillet 2026 |
| Découvreur | Positive Technologies (PT-2026-60174) |
| EPSS | Pas encore évalué |
| CISA KEV | Non répertorié |
Les sérialiseurs hérités du runtime .NET reconstruisent des types d'objets arbitraires à partir de flux sérialisés sans valider le type ni le contenu. Lorsqu'un attaquant contrôle l'entrée sérialisée, il peut amener le désérialiseur à instancier des types inattendus dont les constructeurs, les rappels ou les setters de propriétés exécutent du code arbitraire — une attaque classique par chaîne de gadgets de désérialisation.
La vulnérabilité affecte plusieurs mécanismes de sérialisation :
TypeConfuseDelegate délègue à Process.StartProcessStartInfo intégré dans le corps SOAPProcess.Start via le champ ViewState$type lorsque TypeNameHandling.All/Auto est activé ; le gadget ObjectDataProvider appelle Process.Start| Produit | Plage vulnérable | Version corrigée | Article 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 | Toutes les versions antérieures au correctif | Corrigée | KB5100985 |
| .NET Framework 4.6.2–4.7.2 | Toutes les versions antérieures au correctif | Corrigée | KB5100991 |
| .NET Framework 4.8 | Toutes les versions antérieures au correctif | Corrigée | KB5101011 |
| .NET Framework 4.8.1 | Toutes les versions antérieures au correctif | Corrigée | KB5101002 |
| Visual Studio 2022 (17.12) | Avant correctif | 17.12.x | — |
| Visual Studio 2022 (17.14) | Avant correctif | 17.14.x | — |
| Visual Studio 2026 (18.7) | Avant correctif | 18.7.x | — |
Paquets Alpine Linux :
dotnet8-runtime < 8.0.29-r0dotnet9-runtime < 9.0.18-r0dotnet10-runtime < 10.0.10-r0Cet exploit PoC génère et délivre des charges utiles via 5 formats d'attaque par désérialisation différents :
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 ou 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 en HTTP POSTJSON with $type → JsonConvert.DeserializeObject<T>(json, TypeNameHandling.All)
→ ObjectDataProvider.MethodName = "Start" → Process.Start → RCE
$typeapplication/jsonTypeNameHandling.All ou Auto