
CVE-2026-74469(DiagSpill)の研究リポジトリ。LinuxカーネルSCTPピアトランスポートカウンタのオーバーフローによる境界外書き込みで、PoC、根本原因分析、パッチの詳細を含む。
DiagSpill
Linux カーネルの SCTP 脆弱性は、16 ビットのピアトランスポートカウンタの
オーバーフローによって引き起こされ、カウンタが 65535 から 0 へ
ラップアラウンドすることを可能にします。SCTP 診断ダンプ中に、ラップした値が
skb ペイロードの予約不足を引き起こし、続いてピアアドレスデータの
境界外書き込みが発生する可能性があります。
このリポジトリは、許可されたセキュリティ研究、カーネル脆弱性分析、 CTF 環境、カーネルデバッグ、および防御的テストのみを目的としています。
明示的な許可なく、システムに対して概念実証コードを使用しないでください。
Linux カーネル CVE アドバイザリでは、この問題を SCTP における 16 ビットの
transport_count オーバーフローとして説明しており、それに続いて
INET_DIAG_PEERS の過小な割り当てと、診断ダンプ中の境界外書き込みが
発生します。
脆弱なコードは、一意のピアトランスポートの数を 16 ビットカウンタで 管理しています:
transport_count
新しく追加された一意のピアごとにカウンタがインクリメントされます。
重要な境界は次のとおりです:
65535
さらに別の一意のトランスポートを追加すると、次のようになります:
65535 + 1
↓
0
結果として生じるラップアラウンドは、次の間に不整合を生み出します:
transport_count
および:
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 カーネルアドバイザリでは、結果として生じる診断ダンプが空の ペイロードを予約し、その後 約 8 MiB のピアアドレスを skb テールを 超えて書き込むと説明されています。
概念的には:
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
重要なセキュリティ特性は、既存ピアの通常の検索セマンティクスを維持しつつ、 カウンタがラップすることを決して防ぐことです。
メモリ破壊は潜在的に次の結果をもたらす可能性があります:
開示後に公開された研究では、特定の条件下でのローカル root 権限昇格が 報告されていますが、元の Linux カーネル CNA スコアリングでは AV:L/AC:H/PR:L/UI:N が使用されています。
この脆弱性は、非常に特定の SCTP/アドレス設定の状況下で潜在的に リモートから到達可能であるとも説明されていますが、これは一般的に リモートで悪用可能な脆弱性と同等に扱うべきではありません。
推奨される分離トポロジ:
┌───────────────────────────────────────────┐
│ Linux VM │
│ │
│ ┌───────────────────┐ │
│ │ SCTP Association │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ Multiple SCTP │ │
│ │ Peer Transports │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ SCTP sock_diag │ │
│ └─────────┬─────────┘ │
│ │ │
│ ▼ │
│ INET_DIAG_PEERS │
│ │
└───────────────────────────────────────────┘
便利なツール:
ip sctp
ss
ss -a
ss -A sctp
dmesg -w
gdb
pwndbg
crash
SCTP サポートの確認:
lsmod | grep sctp
カーネル設定の確認:
grep CONFIG_IP_SCTP /boot/config-$(uname -r)
実行中のカーネルの確認:
uname -r
SCTP 設定の確認:
grep -E 'CONFIG_IP_SCTP|CONFIG_SCTP' \
/boot/config-$(uname -r)
ロードされた SCTP モジュールの確認:
lsmod | grep -i sctp
SCTP ソケットの検査:
ss -A sctp
制御されたカーネル研究の場合:
01. Build vulnerable kernel
↓
02. Boot isolated VM
↓
03. Enable SCTP
↓
04. Create controlled SCTP association
↓
05. Populate unique peer transports
↓
06. Reach transport-count boundary
↓
07. Trigger SCTP diagnostic dump
↓
08. Monitor skb diagnostics
↓
09. Capture kernel behavior
↓
10. Apply upstream fix
↓
11. Repeat test
↓
12. Compare vulnerable vs patched
カーネル出力の監視:
sudo dmesg -w
デバッグの場合:
gdb vmlinux
または:
pwndbg vmlinux
CVE-2026-74469-DiagSpill/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── sctp-transport-count.md
│ ├── sock-diag.md
│ ├── skb-overflow.md
│ └── patch-analysis.md
│
├── kernel/
│ ├── vulnerable/
│ └── patched/
│
├── lab/
│ ├── setup.sh
│ ├── cleanup.sh
│ └── topology.md
│
├── screenshots/
│
├── docs/
│ └── research-notes.md
│
└── LICENSE
主な緩和策は、アップストリームの修正を含むカーネルにアップグレードすることです。
Debian/Kali の場合:
sudo apt update
sudo apt full-upgrade
その後再起動:
sudo reboot
確認:
uname -r
SCTP が不要な場合、管理者は環境と運用要件に応じて、影響を受ける SCTP
機能を無効化することも検討できます。公開研究では、これらのコンポーネントが
未使用の場合の即時緩和策として、SCTP / sctp_diag の無効化が
具体的に挙げられています。
アップストリームの安定版発表では、以下の修正済みリリースが リストされています:
これらのバージョンは Linux カーネル CVE の発表によるものです。 ディストリビューションは、異なるバージョン番号のパッケージに修正を バックポートする場合があります。
16 ビットカウンタには厳格な最大値があります:
U16_MAX = 65535
セキュリティ上重要なコードは、この境界を明示的に処理する必要があります。
バッファの割り当てに使用されるサイズは、実際にそこにコピーされる オブジェクトの数に対応していなければなりません。
カーネル診断 API は、内部状態が不整合になると、メモリ破壊の攻撃対象面に なる可能性があります。
元のプリミティブは整数オーバーフローですが、結果として生じるセキュリティ への影響はカーネルの境界外書き込みです。
SCTP アソシエーションは大量のピアトランスポートの集合を含む可能性があり、 カウンタの制限とリスト管理ロジックがセキュリティ上重要になります。
net/sctp/associola.csctp_assoc_add_peer()sctp: prevent peer transport count overflowbd0e9289e2642f6a5c54faad304ce0f41e926d22Linux Kernel · SCTP · sock_diag · OOB Write · Kernel Security
Research • Analyze • Reproduce • Harden
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-74469 |
| コードネーム | DiagSpill |
| コンポーネント | Linux Kernel |
| サブシステム | SCTP / sock_diag |
| 影響を受けるファイル | net/sctp/associola.c |
| 主要関数 | sctp_assoc_add_peer() |
| バグクラス | 整数オーバーフロー / 境界外書き込み |
| 影響 | カーネルメモリ破壊 |
| 潜在的な影響 | ローカル権限昇格 |
| CVSS v3.1 | 7.0 — High |
| 攻撃ベクトル | ローカル |
| 攻撃の複雑さ | 高 |
| 必要な権限 | 低 |
| ユーザー操作 | なし |
| ステータス | 修正済み |
| セキュリティ特性 | 脆弱 | 修正済み |
|---|
| 16 ビットトランスポート制限の適用 | ❌ | ✅ |
| カウンタのラップ防止 | ❌ | ✅ |
| 既存ピアが引き続き使用可能 | ✅ | ✅ |
| 診断ペイロードサイズの信頼性 | ❌ | ✅ |
| OOB skb 書き込みの防止 | ❌ | ✅ |
| カーネルメモリ破壊の緩和 | ❌ | ✅ |
| ブランチ | 修正済みリリース |
|---|
| 5.10 | 5.10.265 |
| 5.15 | 5.15.216 |
| 6.1 | 6.1.183 |
| 6.6 | 6.6.151 |
| 6.12 | 6.12.103 |
| 6.18 | 6.18.44 |
| 7.1 | 7.1.8 |
| 7.2 | 7.2-rc6 |