Introduction
以前の 開発メモ その478 CVE-2026-31431 Copy Fail に続いての二週連続での致命的な脆弱性。
報告ページは Dirty Frag: Universal Linux LPE。
やばいのは、embargo (エンバーゴ:IT 業界の場合、CVE アサイン、パッチ配布などの対応が完了する準備の期間) 破綻したということ。
現在は掲題の通り CVE がアサイン済み。
What’s this?
二つの脆弱性から成る。
- xfrm-ESP Page-Cache Write (CVE-2026-43284)
- RxRPC Page-Cache Write (CVE-2026-43500)
影響範囲
- xfrm-ESP Page-Cache Write (CVE-2026-43284)
- 2017 年以降 (Linux kernel 4.14 から 7.0)
- RxRPC Page-Cache Write (CVE-2026-43500)
- RxRPC が 2023年6月に導入されたのでそれ以降のディストリビューション全て。
原因
xfrm-ESP Page-Cache Write (CVE-2026-43284)
Copy-Fail と同様、esp4 と esp6 モジュールに関するインプレース復号処理の高速パスが原因。
どちらも IPsec ESP (IPsec Encapsulating Security Payload) に関するモジュール。xfrm は Linux カーネルにおける IPsec 変換レイヤー。
Copy-Fail と似ているが、システムコール splice ではなく、splice によって到達する socket 送信経路で、カーネル内部的に MSG_SPLICE_PAGES という Linux カーネル内部の sendmsg() 系の処理で使われるフラグ (pipe の page をコピーせず socket buffer / skb に付与可能なら付与、という意味) が使用されることが原因の一部。
RxRPC Page-Cache Write (CVE-2026-43500)
Copy-Fail と同様、RxRPC モジュールに関するインプレース復号処理の高速パスが原因。
Copy-Fail が AF_ALG を入り口としていたのに対し、AF_RXRPC を入り口としている (AF は Address Family)。AF_RXRPC を起点とし、Linux カーネル内の RxRPC モジュールが同様に MSG_SPLICE_PAGES によって page cache 由来の page を skb fragment に載せ、その後 RxRPC 側のインプレース処理がその page に書いてしまうことにある。
対策
2026/05/10 時点で一部のディストリビューションでパッチが配布済み。
応急処理
すぐにパッチを適用できない場合。
1 | $ sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf' |
Ubuntu とか root ログインできない場合は
1 | $ sudo sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf' |
応急処理実施後
1 | $ git clone https://github.com/V4bel/dirtyfrag.git |
念のため再起動しても、上記のようになることを確認。
応急処置を戻す場合。
以下は Debian/Ubuntu 系。
1 | $ sudo rm /etc/modprobe.d/dirtyfrag.conf |
修正による影響
xfrm-ESP Page-Cache Write (CVE-2026-43284)
IPsec を使っている環境でこの脆弱性の緩和策を適用すると IPsec が使えなくなる。
RxRPC Page-Cache Write (CVE-2026-43500)
Andrew File System (AFS: カーネギーメロン大学の Andrew Project の一部として開発された分散ファイルシステム) を使っている環境にのみ影響。一般的なサーバでは使っていないので影響はなし。
Have a try!!
ということで試してみた。
実行環境は
1 | $ uname -a |
実行には git と gcc が必要。
1 | $ git clone https://github.com/V4bel/dirtyfrag.git |
