
CVE-2026-74469(DiagSpill)の研究リポジトリ。LinuxカーネルSCTPピアトランスポートカウンタのオーバーフローによる境界外書き込みで、PoC、根本原因分析、パッチの詳細を含む。
DiagSpill
Linux カーネルの SCTP 脆弱性は、16 ビットのピアトランスポートカウンタの
オーバーフローに起因し、カウンタが 65535 から 0 へラップすることを可能にします。SCTP
診断ダンプ中に、ラップした値によって skb ペイロードの予約が不足し、続いてピアアドレスデータの
範囲外書き込みが発生する可能性があります。
このリポジトリは、許可されたセキュリティ研究、カーネル 脆弱性分析、CTF 環境、カーネルデバッグ、および防御的 テストのみを目的としています。
明示的な許可なく、実証コード(PoC)をシステムに対して使用しないでください。
| 項目 | 詳細 |
|---|---|
| CVE | CVE-2026-74469 |
| コードネーム | DiagSpill |
| コンポーネント | Linux カーネル |
| サブシステム | SCTP / sock_diag |
| 影響を受けるファイル | net/sctp/associola.c |
| 主要関数 | sctp_assoc_add_peer() |
| バグ分類 | 整数オーバーフロー / 範囲外書き込み |
| 影響 | カーネルメモリ破壊 |
| 潜在的な影響 | ローカル権限昇格 |
| CVSS v3.1 | 7.0 — High |
| 攻撃ベクトル | ローカル |
| 攻撃の複雑さ | 高 |
| 必要な権限 | 低 |
| ユーザー操作 | なし |
| ステータス | 修正済み |
Linux カーネルの CVE アドバイザリでは、この問題を SCTP における 16 ビットの
transport_count オーバーフローと説明しており、それに続いて INET_DIAG_PEERS
の割り当てが過小になり、診断ダンプ中に範囲外書き込みが発生します。
脆弱なコードは、一意のピアトランスポートの数を 16 ビットカウンタで管理しています:
transport_count
新しく追加された一意のピアごとにカウンターが増加します。
重要な境界は次のとおりです:
65535
別の独自トランスポートを追加すると、次のようになります:
65535 + 1
↓
0
その結果生じるラップアラウンドは、以下の間に不整合を生じさせます:
transport_count
and:
transport_addr_list
診断サブシステムは後に、応答バッファのサイズを計算する際にラップされたカウンタを信頼する一方で、ピアアドレスの完全なリストを反復処理し続けます。
この脆弱性は次のように表すことができます:
SCTP Association
│
▼
Add unique peers
│
▼
transport_count
uint16_t
│
▼
65,535 peers
│
▼
+ 1 unique peer
│
▼
Integer wrap
│
▼
transport_count = 0
│
▼
SCTP sock_diag
│
▼
Reserve incorrect payload
│
▼
Iterate complete peer list
│
▼
Out-of-bounds skb write
上流のアドバイザリでは、65,536 番目のトランスポートでカウンタがゼロにラップアラウンドすると明記されています。
この診断コードは、実質的に同じ状態に対する 2 つの異なる見方に依存しています。
transport_count
│
▼
payload size
transport_addr_list
│
▼
copy every peer address
整数がラップした後:
transport_count = 0
transport_addr_list =
[peer 1]
[peer 2]
[peer 3]
...
[peer 65536]
アロケータはしたがって、以下に基づいて領域を予約します:
0 peers
コピー操作がまだ処理できる間は、
65536 peer addresses
この不一致がメモリ安全性の違反を引き起こします。
Linux Kernel のアドバイザリでは、結果として生じる診断ダンプを、空のペイロードを確保した後に skb のテールを超えて約 8 MiB のピアアドレスを書き込むものと説明しています。
概念的には:
Expected skb:
┌───────────────────────────────┐
│ INET_DIAG header │
├───────────────────────────────┤
│ Peer addresses │
└───────────────────────────────┘
▲
│
valid end
Actual vulnerable state:
┌───────────────────────────────┐
│ INET_DIAG header │
└───────────────────────────────┘
▲
│
skb tail
↓
Peer address writes
↓
Peer address writes
↓
Peer address writes
↓
OUT-OF-BOUNDS WRITE
Red Hat はこの脆弱性を CWE-787: 境界外書き込み に分類しています。
関連するパスは次のように要約できます:
SCTP association
│
▼
sctp_assoc_add_peer()
│
▼
transport_count++
│
▼
16-bit overflow
│
▼
SCTP sock_diag
│
▼
INET_DIAG_PEERS
│
▼
skb payload reservation
│
▼
transport_addr_list iteration
│
▼
Out-of-bounds write
影響を受けるソースファイルは次のとおりです:
net/sctp/associola.c
Linux カーネルの CVE アナウンスは、このファイルを明示的に特定しています。
アップストリームの修正は次のとおりです:
bd0e9289e2642f6a5c54faad304ce0f41e926d22
コミット:
sctp: prevent peer transport count overflow
修正では、次の場合に新しい一意のピアを拒否します:
transport_count >= U16_MAX
重要なのは、このチェックが既存ピアの検索後に実行される点です。
これにより、アソシエーションが上限に達している場合でも、既に存在するトランスポートを取得する機能が維持されます。
New peer
│
▼
transport_count++
│
▼
Possible 16-bit wrap
│
▼
Diagnostic size mismatch
│
▼
OOB write
New peer
│
▼
Existing peer?
│
┌─┴──────────┐
│ │
YES NO
│ │
▼ ▼
Reuse Check U16_MAX
transport │
▼
Reject at limit
重要なセキュリティ特性は、既存のピアに対する通常のルックアップセマンティクスを維持しつつ、カウンタが決してラップしないようにすることです。
| セキュリティ特性 | 脆弱 | パッチ適用済み |
|---|---|---|
| 16ビットトランスポート制限の適用 | ❌ | ✅ |
| カウンタのラップ防止 | ❌ | ✅ |
| 既存ピアが引き続き使用可能 | ✅ | ✅ |
| 診断ペイロードサイズの信頼性 | ❌ | ✅ |
| OOB skb書き込みの防止 | ❌ | ✅ |
| カーネルメモリ破壊の緩和 | ❌ | ✅ |
メモリ破壊は潜在的に以下を引き起こす可能性があります:
開示後に公開された研究では、特定の条件下でのローカルroot権限での悪用が報告されていますが、元のLinux Kernel CNAスコアリングではAV:L/AC:H/PR:L/UI:Nが使用されています。
この脆弱性は、非常に特定のSCTP/アドレス設定の状況下で潜在的にリモートから到達可能であるとも説明されていますが、これは一般的にリモートから悪用可能な脆弱性と同等に扱うべきではありません。
推奨される分離トポロジー: