Hyunwoo Kim (@v4bel) 氏によって発見された Dirty Frag 脆弱性クラスに対するパッチシリーズです。
Dirty Frag は、権限のないローカルユーザーが読み取り専用ファイル(例: /usr/bin/su、/etc/passwd)のページキャッシュの任意のバイトを上書きできるようにし、主要なすべての Linux ディストリビューションで root へのローカル権限昇格 を引き起こします。
このリポジトリ内のパッチは、このリポジトリのメンテナーによって書かれたものではありません。
- CVE-2026-43284 (ESP パッチ): Hyunwoo Kim (@v4bel) 氏と Kuan-Ting Chen 氏によって執筆されました。Linux カーネル本流のコミット
f4c50a4034e6にマージされました。- CVE-2026-43500 (RxRPC パッチ): Hyunwoo Kim (@v4bel) 氏によって執筆されました。netdev メーリングリストの
afKV2zGR6rrelPC7@v4belに提出され、マージ待ちです。このリポジトリは、それらのパッチの 整形済みミラー であり、
git am対応形式で利便性のために収集されています。 すべてのクレジットは原作者に帰属します。元の研究と PoC: https://github.com/V4bel/dirtyfrag
4.10(コミット cac2661c53f3、2017-01-17)から f4c50a4034e6 より前の 6.x までのカーネル6.4(コミット 2dc334f1a63a、2023-06-08)から最新のアップストリームまで(まだパッチはマージされていません)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# パッチ 1 を適用 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# パッチ 2 を適用 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch での適用(コンテキストのずれにより git am が失敗する場合)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
パッチをすぐに適用できない場合は、影響を受けるモジュールをブラックリストに登録します:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
警告:
esp4/esp6を削除すると IPsec ESP が無効になります。本番システムに適用する前に影響を評価してください。
両方の亜種は同じ根本原因を共有しています: カーネルのゼロコピー splice() パスが、コピーオンライト(CoW)セマンティクスなしで 読み取り専用のページキャッシュページ を skb フラグメントに直接配置します。その後のインプレース暗号操作がそのページキャッシュページに書き込み、キャッシュされたファイルの内容を恒久的に変更します。
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- CoW なし!
│
▼
[esp_input / rxkad_verify_packet_1]
インプレース AEAD/fcrypt 復号 src == dst == &P
│
▼
page_cache_page_P への STORE <- 読み取り専用ファイルキャッシュへの任意書き込み
| 亜種 |
|---|
| ファイル | CVE | サブシステム | ステータス |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c、net/ipv6/esp6.c、net/ipv4/ip_output.c、net/ipv6/ip6_output.c | ✅ 本流にマージ済み (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c、net/rxrpc/conn_event.c | ⏳ netdev ML に提出済み (afKV2zGR6rrelPC7@v4bel)、マージ待ち |
| アプローチ |
|---|
| ESP | splice フラグメントに SKBFL_SHARED_FRAG をマークし、esp_input()/esp6_input() でこのフラグをチェックして、インプレース暗号化の前に skb_cow_data() を強制する |
| RxRPC | skb_cloned() ゲートを (skb_cloned(skb) || skb->data_len) に拡張し、非線形 skb(splice フラグメントを含む可能性がある)がインプレース復号の前に常にコピーされるようにする |