Linux脆弱性 CVE-2026-31431「Copy Fail」は何が危ないのか・対策

LinuxカーネルのAF_ALGまわりで公開されたローカル権限昇格脆弱性 Copy Fail について、取り急ぎ最低限の情報を整理した。

Linux脆弱性 CVE-2026-31431「Copy Fail」は何が危ないのか・対策

Linuxカーネルに2017年から潜んでいた脆弱性として、CVE-2026-31431、通称「Copy Fail」が公開された。

何が起きるのか

そのLinuxマシンにログインできる一般ユーザーがごく短い攻撃プログラムを実行するだけで簡単に管理者(root)権限を取得できる。

「一般ユーザー」が管理者権限を奪取してしまうケース

上記のような状況でも普通は管理者権限にまではアクセスできないが、本脆弱性を組み合わせ利用することで管理者権限にも到達できてしまうことが問題となっている。

脆弱性のありか

Linuxカーネルの algif_aead。環境によっては algif_aead.ko というカーネルモジュール(ドライバ)として提供されているが、カーネル本体に組み込まれている場合もある。

対策

1. OSアップデートを行う

ただしカーネルのバグなので再起動しないと修正が反映されない。また、この記事を書いている時点では各ディストリビューションやリリース系列によって修正済みパッケージの提供状況に差がある。単に「主要ディストリビューションだから修正済み」とは考えず、後述する各ディストリビューションの公式CVE追跡ページで確認すること。

参考: kernel.org上での修正済みバージョン

上記はあくまで kernel.orgにおけるバージョンなので、ソースコードからカーネルをビルドして利用している人以外(つまり普通の人)は ** 各ディストロにおける修正済みバージョン(リビジョン)についての公式情報をあたること。 **

2. algif_aead.koの自動ロードを無効にする

algif_aead がカーネルモジュールとして提供されている環境では、この方法なら再起動不要。/etc/modprobe.d/disable-algif.conf というファイルを作成してその中身を install algif_aead /bin/false にすることで問題のモジュールを自動ロードできなくする。このモジュールは滅多に使われていないため無効にしても大抵の環境では差し支えない。

echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead

rmmod のエラーは握りつぶさず確認したほうがよい。ここで Module algif_aead is builtin と表示される場合、この回避策は効いていない。

注意: カーネル組み込みの場合、この回避策は効かない

Fedora / RHEL / CentOS Stream / AlmaLinux / Rocky Linux などでは algif_aead がカーネル本体に組み込まれており、上記の自動ロード抑止は効果がない。この場合は rmmod も効かないので、修正版カーネルへの更新と再起動、もしくは ブートローダー設定ファイルにカーネル引数を追加しての再起動 が必要になる。

grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init" 
reboot

再起動後、下記のテストスクリプトをそのままターミナルからペーストして最後に改行する。

python3 - <<'PY'
import socket
import errno

def test(typ, name):
    s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)
    try:
        s.bind((typ, name))
        print(f"NG: bind succeeded: type={typ!r}, name={name!r}")
        return True
    except OSError as e:
        print(f"OK: bind failed: type={typ!r}, name={name!r}, errno={e.errno} ({e.strerror})")
        return False
    finally:
        s.close()

test("aead", "authencesn(hmac(sha256),cbc(aes))")
PY

この結果、下記のようなOKメッセージが出れば問題の機能(algif_aead)を無効にできていることになる。

OK: bind failed: type='aead', name='authencesn(hmac(sha256),cbc(aes))', errno=2 (No such file or directory)

現在のカーネルで algif_aead がモジュールか組み込みかは、次のように確認できる。

modinfo algif_aead

filename: (builtin) と表示される場合はカーネル組み込み。/lib/modules/.../algif_aead.ko のようなパスが表示される場合はモジュール。

カーネル設定から見る場合は次のように確認できる。

zgrep CONFIG_CRYPTO_USER_API_AEAD /proc/config.gz 2>/dev/null \
  || grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)

CONFIG_CRYPTO_USER_API_AEAD=y なら組み込み、CONFIG_CRYPTO_USER_API_AEAD=m ならモジュール、is not set なら該当機能は無効。

各ディストリビューションの公式CVE追跡ページ

参考情報

関連記事

当社代表のデスクトップ(※)を常時ライブ配信中

※ライブ配信専用PC

OSSの検証や自社用ツールの開発といった公開できる作業に限り、 ライブ配信専用PC上で行っています。常時配信ですのでいつでもお気軽にチャットメッセージ(公開)を残していって下さい。