
CVE-2026-81000(TUNderflow)の研究リポジトリ。LinuxカーネルのTUN/TAP受信ヘッドルーム整数アンダーフローによりローカル権限昇格が可能となる脆弱性で、PoC、根本原因分析、ラボ環境構築を含む。
TUNderflow
TUN/TAPネットワークサブシステムにおけるLinuxカーネルのメモリ破壊脆弱性であり、受信ヘッドルームの境界チェック不足とパケット割り当てパスにおける整数アンダーフローによって引き起こされます。
このリポジトリは、許可されたセキュリティ研究、脆弱性分析、CTF環境、カーネルデバッグ、および防御的テストを目的としています。
明示的な許可なく、システムに対して概念実証コードを使用しないでください。
CVEアドバイザリでは、この問題を整数アンダーフローとして説明しており、これによりskb->dataが割り当てられたskbヘッドの外側に配置される可能性があります。
この脆弱性は、LinuxカーネルのTUN/TAP受信パスに存在します。
影響を受けるコードは、TUNデバイスに設定された受信ヘッドルームを、パケットヘッドルームとして、またどの程度のパケットデータをリニアに保つべきかを計算する際の両方で使用しています。
したがって、過大なヘッドルーム値は、以下において無効な計算を引き起こす可能性があります:
SKB_MAX_HEAD(align)
指定された値が使用可能な1ページのskbヘッドを超えると、計算がアンダーフローする可能性があります。
概念的には:
Oversized receive headroom
│
▼
SKB_MAX_HEAD()
│
▼
Integer underflow
│
▼
Negative value
│
▼
size_t wrap
│
▼
Invalid skb data placement
│
▼
Kernel memory corruption
脆弱な実装は以下にあります:
drivers/net/tun.c
tun_get_user()が脆弱なパスの中心です。
根本的な問題は、TUN受信ヘッドルームの境界チェックが不十分であることです。
カーネルは、その値をTUN/TAPに伝播するネットワークデバイスパスを通じて、過大なヘッドルーム要求を受け取る可能性があります。
この脆弱性は、複雑な仮想ネットワーク構成によって大きなヘッドルーム値がTUNデバイスに到達する場合に特に興味深いものとなります。
公開情報では、以下を含むシナリオが説明されています:
Netkit
│
▼
VXLAN
│
▼
Open vSwitch
│
▼
TUN
構成例では、約4160バイトのヘッドルームがraw TUNポートに伝播し、脆弱な算術演算でアンダーフローを引き起こす可能性があります。
この破壊は、カーネルネットワークメモリ管理ロジックで発生します。
潜在的な結果には以下が含まれます:
公開情報では、この脆弱性はLinuxのローカルroot脆弱性群の1つとして報告されており、公開されたPoCがサポート対象において非特権ローカルユーザーからrootへの実行を達成できると述べられています。
悪用可能性は環境に依存し、関連するTUN/ネットワークデバイス構成とサポート機能が必要です。
ATTACKER
│
▼
Oversized network headroom
│
▼
Virtual network device
│
▼
Open vSwitch
│
▼
TUN/TAP
│
▼
tun_get_user()
│
▼
SKB_MAX_HEAD(align)
│
▼
Integer underflow
│
▼
size_t wraparound
│
▼
Invalid skb->data offset
│
▼
Kernel memory corruption
重要なコンポーネントは以下です:
drivers/net/tun.c
│
├── tun_set_headroom()
│
├── tun_get_user()
│
└── tun_alloc_skb()
脆弱な関係は次のように簡略化できます:
tun->align
│
├── skb headroom
│
└── linear-data calculation
両方の計算で同じ過大な値を使用すると、要求されたヘッドルームと実際のskbヘッド予算との間に安全でない関係が生じます。
重要なセキュリティ特性は、概念的に次のように表すことができます:
usable_head < requested_headroom
これは次の結果を引き起こす可能性があります:
SKB_MAX_HEAD(align) < 0
続いて符号なし変換が行われます:
negative value
↓
size_t
↓
very large unsigned value
これは最終的にskbの割り当て/データ配置に影響を与える可能性があります。
公式の説明では、結果の値がsize_tのlinear変数に代入されるときにラップアラウンドすることが特に指摘されています。
アップストリームの修正は以下です:
447c9303942c439a117d9b76ce6d6e2116c38ee7
コミット:
net: tun: bound receive headroom
この修正は、TUNによって保存されるヘッドルームを、利用可能な1ページのskbヘッド予算と最大有効16ビットskbヘッダーオフセットに対して制限します。また、raw TUNおよびTAP処理に十分なリニアデータが利用可能であることも保証します。
User / network device
│
▼
Large headroom
│
▼
tun->align
│
▼
Unsafe arithmetic
│
▼
Potential OOB access
User / network device
│
▼
Large headroom
│
▼
Bounded headroom
│
▼
Safe skb calculation
│
▼
Normal packet processing
推奨されるラボトポロジ:
┌─────────────────────────────────────────┐
│ Linux VM / Host │
│ │
│ ┌─────────┐ ┌──────────────┐ │
│ │ Netkit │────▶│ VXLAN │ │
│ └─────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ Open vSwitch │ │
│ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ TUN/TAP │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────┘
便利なツール:
uname -a
ip link
ip tuntap
bridge link
ovs-vsctl show
dmesg -w
カーネルデバッグ用:
GDB
GDB + GEF
GDB + pwndbg
crash
objdump
readelf
pahole
実行中のカーネルを確認:
uname -r
カーネル設定を確認:
grep CONFIG_TUN /boot/config-$(uname -r)
期待される設定:
CONFIG_TUN=y
または:
CONFIG_TUN=m
モジュールがロードされているか確認:
lsmod | grep tun
公開情報では、制御された検証のための専用のTUNderflow PoCリポジトリが提供されています。
安全な研究ワークフロー:
1. Build vulnerable kernel
2. Boot isolated VM
3. Configure TUN/TAP
4. Reproduce oversized headroom
5. Monitor kernel messages
6. Capture crash/corruption behavior
7. Apply upstream patch
8. Repeat test
9. Compare results
カーネルを監視:
sudo dmesg -w
ラボの目的は、本番システムを攻撃することではなく、脆弱な動作と修正済みの動作の違いを実証することです。
CVE-2026-81000-TUNderflow/
│
├── README.md
│
├── exploit/
│ ├── poc.c
│ └── Makefile
│
├── analysis/
│ ├── root-cause.md
│ ├── kernel-path.md
│ ├── integer-underflow.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
本番環境では、アップストリームのバージョン番号だけに頼るのではなく、インストールされているディストリビューションカーネルをベンダーのセキュリティアドバイザリと照合して確認してください。
例えばOracle Linuxは、net: tun: bound receive headroom修正を含むセキュリティ更新を公開しています。
公開情報では、開示された4つのローカルroot脆弱性(TUNderflowを含む)の修正を含む最初のリリースとして、以下の安定版カーネルリリースが特定されています:
TUNderflowは、いくつかの重要なカーネルセキュリティ原則を示しています:
ネットワーク構成値を盲目的に信頼してはなりません。
整数アンダーフローは、一見無害な計算をメモリ安全性のプリミティブに変える可能性があります。
ネットワークデバイスのヘッドルーム値は、実際のskbメモリ予算と一致している必要があります。
仮想ネットワーク層は、予期しないパケットメタデータを複数のサブシステムに伝播させる可能性があります。
アップストリームの修正を研究することは、クラッシュだけを見るよりも、元の脆弱性をより明確に理解するのに役立つことがよくあります。
drivers/net/tun.ctun_get_user()447c9303942c439a117d9b76ce6d6e2116c38ee7net: tun: bound receive headroom0xBlackash
サイバーセキュリティ研究 · Linuxカーネルセキュリティ · 脆弱性研究 · CTF
CVE-2026-81000 · TUNderflow · TUN/TAP · Linux Kernel · LPE
| 項目 | 詳細 |
|---|
| CVE | CVE-2026-81000 |
| コードネーム | TUNderflow |
| コンポーネント | Linuxカーネル |
| サブシステム | TUN/TAP |
| 影響を受けるコード | drivers/net/tun.c |
| 主要関数 | tun_get_user() |
| バグクラス | 整数アンダーフロー / 範囲外メモリアクセス |
| 影響 | カーネルメモリ破壊 |
| 潜在的な影響 | ローカル特権昇格 |
| CVSS v3.1 | 7.8 — 高 |
| 攻撃ベクトル | ローカル |
| 必要な権限 | 低 |
| ユーザー操作 | なし |
| ステータス | 修正済み |
| セキュリティ特性 | 脆弱 | 修正 |
|---|
| ヘッドルームが制限されている | ❌ | ✅ |
| 大きなヘッドルームが安全に処理される | ❌ | ✅ |
| アンダーフロー条件が防止されている | ❌ | ✅ |
| skbデータ配置が保護されている | ❌ | ✅ |
| 不正なネットワーク構成が安全に拒否される | ❌ | ✅ |
| ブランチ | 修正リリース |
|---|
| 5.10 | 5.10.270 |
| 5.15 | 5.15.221 |
| 6.1 | 6.1.188 |
| 6.6 | 6.6.157 |
| 6.12 | 6.12.109 |
| 6.18 | 6.18.50 |
| 7.2 | 7.2.4 |