Linuxカーネルに2017年から潜んでいた脆弱性として、CVE-2026-31431、通称「Copy Fail」が公開された。
何が起きるのか
そのLinuxマシンにログインできる一般ユーザーがごく短い攻撃プログラムを実行するだけで簡単に管理者(root)権限を取得できる。
「一般ユーザー」が管理者権限を奪取してしまうケース
- ログイン権限を持った関係者(あるいは元関係者)がウィルス感染した
- 他のソフトウェアの脆弱性で一般ユーザーとして活動できる経路をこじあけられてしまった
- 不特定多数の利用者が同一のサーバに同居して自由に利用できるタイプのサービスを提供しており、利用者の中に悪意を持った者、又はウィルス感染などで既にアクセス権を奪取されている者がいる
上記のような状況でも普通は管理者権限にまではアクセスできないが、本脆弱性を組み合わせ利用することで管理者権限にも到達できてしまうことが問題となっている。
脆弱性のありか
Linuxカーネルの algif_aead。環境によっては algif_aead.ko というカーネルモジュール(ドライバ)として提供されているが、カーネル本体に組み込まれている場合もある。
対策
1. OSアップデートを行う
ただしカーネルのバグなので再起動しないと修正が反映されない。また、この記事を書いている時点では各ディストリビューションやリリース系列によって修正済みパッケージの提供状況に差がある。単に「主要ディストリビューションだから修正済み」とは考えず、後述する各ディストリビューションの公式CVE追跡ページで確認すること。
参考: kernel.org上での修正済みバージョン
- 5.10.254, 5.15.204, 6.1.170, 6.6.137, 6.12.85, 6.18.26, 7.0.3 以降
上記はあくまで 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追跡ページ
-
Ubuntu https://ubuntu.com/security/CVE-2026-31431(High優先度、詳細な影響バージョン一覧あり)
-
Debian https://security-tracker.debian.org/tracker/CVE-2026-31431(各リリースごとの固定状況が一目でわかる)
-
Red Hat Enterprise Linux (RHEL) / CentOS Stream / Rocky Linux / AlmaLinux / Oracle Linux https://access.redhat.com/security/cve/CVE-2026-31431 (Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2460538)
-
SUSE Linux Enterprise / openSUSE https://www.suse.com/security/cve/CVE-2026-31431.html
-
Amazon Linux https://explore.alas.aws.amazon.com/CVE-2026-31431.html(AL2 / AL2023両方記載)
-
Fedora Red HatのCVEページを参照(上記) または Bodhi Updates で最新パッケージを確認
-
Arch Linux 専用CVEページはなく、Arch Linux Security Tracker または
pacman -Si linuxでkernel更新状況を確認
参考情報
- NVD: CVE-2026-31431
- Copy Fail — CVE-2026-31431
- kernel.org stable commit: a664bf3d603d
- Debian Security Tracker: CVE-2026-31431
- Lobsters: Copy Fail — 732 Bytes to Root