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 と同様、esp4esp6 モジュールに関するインプレース復号処理の高速パスが原因。
どちらも 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
2
$ 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 || true

Ubuntu とか root ログインできない場合は

1
2
$ sudo sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf'
$ sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true

応急処理実施後

1
2
3
4
5
6
7
8
9
10
11
$ git clone https://github.com/V4bel/dirtyfrag.git
Cloning into 'dirtyfrag'...
remote: Enumerating objects: 54, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 54 (delta 7), reused 9 (delta 5), pack-reused 34 (from 1)
Receiving objects: 100% (54/54), 5.84 MiB | 3.56 MiB/s, done.
Resolving deltas: 100% (17/17), done.
$ cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil
$ ./exp
dirtyfrag: failed (rc=1)

念のため再起動しても、上記のようになることを確認。

応急処置を戻す場合。
以下は Debian/Ubuntu 系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sudo rm /etc/modprobe.d/dirtyfrag.conf
$ sudo update-initramfs -u
$ sudo reboot

# 状況確認
$ modprobe -n -v esp4
insmod /lib/modules/6.8.0-111-generic/kernel/net/xfrm/xfrm_algo.ko
insmod /lib/modules/6.8.0-111-generic/kernel/net/ipv4/esp4.ko
$ modprobe -n -v esp6
insmod /lib/modules/6.8.0-111-generic/kernel/net/xfrm/xfrm_algo.ko
insmod /lib/modules/6.8.0-111-generic/kernel/net/ipv6/esp6.ko
$ modprobe -n -v rxrpc
insmod /lib/modules/6.8.0-111-generic/kernel/net/ipv4/udp_tunnel.ko
insmod /lib/modules/6.8.0-111-generic/kernel/net/ipv6/ip6_udp_tunnel.ko
insmod /lib/modules/6.8.0-111-generic/kernel/net/rxrpc/rxrpc.ko

修正による影響

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
2
$ uname -a
Linux esxi-vm02 6.8.0-111-generic #111~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 14 17:13:45 UTC x86_64 x86_64 x86_64 GNU/Linux

実行には gitgcc が必要。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git clone https://github.com/V4bel/dirtyfrag.git
Cloning into 'dirtyfrag'...
remote: Enumerating objects: 54, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 54 (delta 7), reused 9 (delta 5), pack-reused 34 (from 1)
Receiving objects: 100% (54/54), 5.84 MiB | 3.56 MiB/s, done.
Resolving deltas: 100% (17/17), done.
$ cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil
$ id
uid=1000(t-takeuchi) gid=1000(t-takeuchi) groups=1000(t-takeuchi),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),122(lpadmin),134(lxd),135(sambashare),999(docker)
$ ./exp
$ id
uid=0(root) gid=0(root) groups=0(root)