root の情報が失われた環境で権限昇格できる既報のやつ。
結局、ウェブアプリの脆弱性や SSH 情報の漏洩でローカルユーザー (シェル) を奪えないと話が始まらないので CVSS はそこまででもない……? と思っていたのですが、乗られたら大体おわりだし、まあねという気もするしう〜ん。
現代のカーネル
概ねパッケージマネージャーから kernel 更新してシステム全体を reboot すれば大丈夫。
sudo dnf update kernel && sudo reboot
AlmaLinux
RHEL から修正がこねえ〜! とのことで、当時バチバチで独自に Kernel ロールバックしたパッチが全体配布始まっていた。
こういうの見てると Alma に引っ越したほうがいいのかなあ、という気持ちがちょっと出てくる。 (普段は Rocky を使っている)
その他の対策
メモリ上のコマンドを書き換えて su できてしまう (原理的にメモリ上に存在すればどんなコマンドも書き換えれる?) という話なので、入口になっている algif を封じるということらしい。
modinfo algif_aead を実行して、filename: (builtin) が出ればカーネル組み込み、/../../../.. .. algif_aead.ko のようにパスが出ればモジュール適応らしい。
モジュール適応の場合は、以下のように rmmod を使うことで無効化できる
algif モジュールを封じる
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf sudo rmmod algif_aead
この結果 Module algif_aead is builtin と出ると、封印がうまくいっていないらしい (=カーネル組み込みのはずなので、 modinfo で改めて確認する)。
rmmod の実行時結果を /dev/null に送るか送らないかは人によるので、とりあえず送らないようにしている。
Module algif_aead is builtin カーネル組み込みの場合
algif が封印できない環境として、RHEL 一族 (Fedora, CentOS, 互換ディストリ) がいるらしい。
これらは前述のカーネル組み込み型らしく、rmmod では無効化できず素直にカーネル修正を適用するか、ブートーローダーで無効化するしかないらしい。
sudo grubby --update-kernel=ALL --args=initcall_blacklist=algif_aead_init sudo reboot
grubby が存在しない環境の場合は、直接編集してリブートしろとのことだった。 調べただけなんだけど、直接 grub いじるのは怖いよなあ、という具合なので、面倒でも grubby いれた方がよさそうだし、それできるなら素直にカーネルアップデートした方がいい。
sudo vi /etc/default/grub # GRUB_CMDLINE_LINUX_DEFAULT 行に initcall_blacklist=algif_aead_init を追加 sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo reboot
どうしても再起動できない場合
kernel 5.8 以上なら、 eBPF とかいうヤツで防げるらしいけど、使ったこと無いので書くだけ書いておく、という具合で。
RedHat
自分向けのまとめでこれを書いている最中に RedHat でナレッジと Errata が出来ているのを発見した。
ナレッジ
対応としては概ね前述の通り。
Errata
https://access.redhat.com/errata/RHSA-2026:13566access.redhat.com
8, 9, 10 とメンテナンス中のバージョンは全部 algif の巻き戻し修正が降ってきている模様。
kernel: crypto: algif_aead - Revert to operating out-of-place (CVE-2026-31431)
素直に当てるのがいいすね。