
CVE-2026-56158 向けに 5 種類の .NET デシリアライゼーション ペイロード形式を生成し、HTTP/SOAP/JSON エンドポイント経由で配信します。モックサーバー、スキャナー、JSON レポート出力も含まれます。
深刻(CVSS 9.8) — Microsoft .NET Framework & .NET Runtime における信頼されないデータの逆シリアル化(CWE-502) 修正日: 2026年7月14日 | 発見者: Positive Technologies (PT-2026-60174)
CVE-2026-56158 は、Microsoft .NET Framework および .NET ランタイムにおける重大なリモートコード実行の脆弱性です。この欠陥は、信頼されないデータの安全でない逆シリアル化(CWE-502)に存在します — .NET アプリケーションがレガシーシリアライザー(BinaryFormatter、NetDataContractSerializer、SoapFormatter、ObjectStateFormatter)または TypeNameHandling.All/Auto を有効にした Json.NET を使用する場合、認証されていないリモート攻撃者が細工したシリアル化ペイロードを送信し、逆シリアル化時に任意のコード実行を引き起こす可能性があります。
この脆弱性は、ベクター AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H を持つ CVSS 3.1 基本スコア 9.8(Critical) を有しており、以下のことを意味します:
Microsoft は、毎月の Patch Tuesday サイクルの一環として、2026年7月14日 にセキュリティ更新プログラムをリリースしました。
| フィールド | 値 |
|---|---|
| CVE ID | CVE-2026-56158 |
| タイトル | .NET Framework リモートコード実行の脆弱性 |
| CVSS 3.1 | 9.8 Critical(AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CVSS 2.0 | 7.5 High(AV:N/AC:L/Au:N/C:P/I:P/A:P) |
| CWE | CWE-502(信頼されないデータの逆シリアル化) |
| 公開日 | 2026年7月14日 |
| 修正日 | 2026年7月14日 |
| 発見者 | Positive Technologies(PT-2026-60174) |
| EPSS | 未スコア |
| CISA KEV | 未掲載 |
.NET ランタイムのレガシーシリアライザーは、型や内容を検証せずにシリアル化されたストリームから任意のオブジェクト型を再構築します。攻撃者がシリアル化入力を制御できる場合、逆シリアライザーを誘導して、コンストラクター、コールバック、またはプロパティセッターが任意のコードを実行する予期しない型をインスタンス化させることができます — 典型的な逆シリアル化ガジェットチェーン攻撃です。
この脆弱性は、複数のシリアル化メカニズムに影響します:
TypeConfuseDelegate ガジェットチェーンが Process.Start に委任ProcessStartInfo を埋め込みProcess.StartTypeNameHandling.All/Auto が有効な場合の $type メタデータを含む JSON。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 フィールドJSON with $type → JsonConvert.DeserializeObject<T>(json, TypeNameHandling.All)
→ ObjectDataProvider.MethodName = "Start" → Process.Start → RCE
$type メタデータを含む JSONapplication/jsonTypeNameHandling.All または Auto を使用する REST API エンドポイント┌─────────────────────────────────────────────────────────────────────┐
│ exploit.py │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌───────────────┐ ┌───────────────────────┐ │
│ │ PayloadGen │ │ PayloadDeliv │ │ VulnerabilityScanner │ │
│ │ │ │ │ │ │ │
│ │ • BinaryFmt │ │ • HTTP POST │ │ • HTTP header check │ │
│ │ • NetData │──▶│ • SOAP/WCF │──▶│ • Endpoint discovery │ │
│ │ • SoapFmt │ │ • JSON API │ │ • ViewState analysis │ │
│ │ • ObjectState│ │ • File save │ │ • Version detection │ │
│ │ • Json.NET │ │ │ │ │ │
│ └──────────────┘ └───────────────┘ └───────────────────────┘ │
│ │ │ │ │
│ └───────────────────┼──────────────────────┘ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────────────────────────────────┐ │
│ │ PayloadList │ │ Report Generator (JSON) │ │
│ │ (Mock .NET) │ │ • CVE metadata, CVSS, CWE │ │
│ │ │ │ • Payload hashes (SHA-256) │ │
│ │ Simulates │ │ • Delivery results │ │
│ │ vulnerable │ │ • RCE confirmation │ │
│ │ deserialization│ │ • References │ │
│ └──────────────┘ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
Attacker ────POST /api/deserialize──────▶ Target (.NET < 8.0.29)
Content-Type: application/octet-stream
Body: [BinaryFormatter payload]
│
▼
BinaryFormatter.Deserialize()
(no type validation)
│
▼
TypeConfuseDelegate invoked
│
▼
Process.Start("cmd.exe", "/c calc.exe")
│
▼
calc.exe spawns → RCE CONFIRMED
graph TD
A[Attacker] --> B[PayloadGenerator]
B --> B1[BinaryFormatter]
B --> B2[NetDataContractSerializer]
B --> B3[SoapFormatter]
B --> B4[ObjectStateFormatter]
B --> B5[Json.NET]