
CVE-2026-99999のシミュレーション専用の概念実証。これはLinuxカーネルのvirtio-net IPv4 csum_start検証の不具合により、ゲストからホストへのヒープメモリ開示を可能にするものです。
不正な virtio-net チェックサムメタデータを介した Linux カーネルの情報漏洩。
CVSS 9.3 CRITICAL | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
発見者: Paulos | CNA: kernel.org | 公開日: 2026-10-15
⚠️ これは教育・検証用の PoC です。--simulate モードでのみ動作します
(ネットワーク I/O なし、root 権限不要)。実際のシステムを悪用することなく、
攻撃チェーンをローカルで実演するものです。
ゲスト VM は、virtio_net_hdr の csum_start == 0 を持つ virtio-net フレームを
送信できます。これはトランスポートヘッダではなく IPv4 ヘッダを指しています。
ホスト上での GSO セグメンテーション中に、skb_checksum_help() が
[csum_start, csum_start + csum_offset + 2) を対象とするチェックサムを再計算し、
その結果を csum_start + csum_offset に書き戻します。
csum_start = 0 かつ csum_offset = 0 の場合、この書き込みは IHL バイト
(IP オフセット 0)に到達し、0x45(IHL 5 → 20 バイト)から 0x4F
(IHL 15 → 60 バイト)へと破壊します。その後カーネルの ip_do_fragment() は、
20 バイトしか存在しないにもかかわらず IP ヘッダを 60 バイト読み取ります。
その結果、送信される各フラグメントに隣接するホストカーネルのヒープメモリが
約 32〜64 バイト混入します。
影響: ゲストからホストへのカーネルヒープメモリの継続的な漏洩。
攻撃対象領域: virtio-net NIC と TAP ブリッジングが有効な KVM/QEMU ホスト、 またはホストが virtio-net フレームを GSO 経由で処理するあらゆる VM→ホスト間の 通信経路。
| オフセット | フィールド | csum_offset=0 で破壊 | csum_offset=6 で破壊 |
|---|---|---|---|
| 0 | バージョン + IHL | ✅ IHL バイト | |
| 1 | TOS | ||
| 2–3 | 全長 | ||
| 4–5 | 識別子 | ||
| 6–7 | フラグ / フラグメントオフセット | ✅ フラグ/フラグメントオフセット (下位) | |
| 8 | TTL | ||
| 9 | プロトコル | ||
| 10–11 | ヘッダチェックサム | ||
| 12–15 | 送信元 IP | ||
| 16–19 | 宛先 IP |
Guest VM
→ constructs virtio_net_hdr with csum_start=0 (pointing at IP header)
→ sends frame through virtio-net to host
Host kernel (GSO segmentation path)
→ skb_checksum_help() called
→ writes checksum result to csum_start + csum_offset
→ if csum_offset=0: writes IHL byte (0x45 → 0x4F)
→ ip_do_fragment() reads 60B header when only 20B exist
→ ~32–64B heap memory included in each outbound fragment
| csum_offset | 破損フィールド | 結果 | CVSSベクター |
|---|---|---|---|
0 (デフォルト) | IHLバイト (オフセット0) | OOBヒープ読み取り → メモリリーク | 情報漏洩 |
6 | Flags/FragOffset (オフセット6) | フラグメント再構築の妨害 | 可用性 |
修正コミット以前のすべてのLinuxカーネルバージョン。
影響なし (パッチ適用済み): 5.10.272+、5.15.223+、6.1.190+、6.12.113+、6.18.57+、7.2.11+
カーネルバージョンを確認:
uname -r
cat /proc/version
要件: Python 3.6+ のみ。pip パッケージ不要、ネットワーク不要、root 不要。
# Clone
git clone https://github.com/01luyicheng/CVE-2026-99999.git
cd CVE-2026-99999
# Run — IHL corruption / heap-leak simulation (CVSS 9.3 path, default)
python3 CVE-2026-99999_pwnescape.py --simulate
# Simulate with 5 datagrams and 8 fragments each
python3 CVE-2026-99999_pwnescape.py --simulate -n 5 -f 8
# Flags/FragOffset corruption path (fragment reassembly disruption)
python3 CVE-2026-99999_pwnescape.py --simulate -c 6
--simulate を付けない場合、スクリプトは脆弱性の詳細をすべて出力して終了します:
python3 CVE-2026-99999_pwnescape.py
| フラグ | 説明 | デフォルト |
|---|---|---|
--simulate | エクスプロイトチェーンのシミュレーションを実行(必須) | — |
-c, --csum-offset | 0 = IHL バイト(範囲外読み取り、デフォルト)、6 = Flags/FragOffset | 0 |
-n, --num-packets | シミュレーションするデータグラム数 | 3 |
-f, --fragments | データグラムあたりのフラグメント数(最小 2) | 4 |
シミュレーションは 5 つのステップで実行されます(ネットワーク不要):
csum_start=0(IPv4 IHL バイトを指す)と設定可能な csum_offset を持つ virtio_net_hdr を追加します。csum_start + csum_offset へのカーネル書き込みをローカルでシミュレーションし、どの IP ヘッダーバイトがどの値に上書きされるかを示します。csum_offset=0)の場合には約 32~64B のヒープメモリリークについて言及します。python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 0
csum_start=0, csum_offset=0 → 書き込みが IHL バイトに到達 → IHL 5→15 →
ip_do_fragment() は 20B しか存在しないのに 60B を読み取る → フラグメントごとに
約 32~64B のヒープメモリが漏洩。
python3 CVE-2026-99999_pwnescape.py --simulate -n 1 -c 6
csum_start=0, csum_offset=6 → 書き込みが Flags/FragOffset バイトに到達 →
フラグメント再構築メタデータが破損 → フラグメント再構築が失敗。
この PoC は独立してレビューされています。主な所見:
完全な技術レビューレポートはセキュリティ上の理由から内部リポジトリ
(CVE-2026-99999-internal) に保管されています。
パッチ適用状況を確認:
# Check if your kernel has the fix (look for commit 6785011f8b16abf40b1e9d8b2)
cat /proc/config.gz 2>/dev/null | zcat | grep CONFIG_IPV4
# Or check dmesg for related errors after heavy network activity from a VM
6785011f8b16abf40b1e9d8b2 (stable ツリー), f43798c27684 (mainline)<[email protected]> パッチシリーズこのツールは、隔離されたラボ管理環境における認可されたセキュリティ研究および教育のみを目的としています。
csum_offset=0 (IHL/OOB 読み取りパス) に変更; デッドコードを整理; 詳細なレビューレポートを内部リポジトリへ移動; SEO 向けに README を書き直し。csum_offset のロジックを修正; デフォルトを OOB 読み取りパス (-c 0) に変更;
--csum-offset CLI フラグを追加; 壊れていた --tap パスを削除。--simulate モード; IP ヘッダーのバイト
レイアウトを修正。