Linuxカーネルに、ほぼすべての主要ディストリビューションへ一斉に影響するローカル権限昇格(LPE)のゼロデイ脆弱性が公開された。コードネームはCopy Fail、CVE番号はCVE-2026-31431。一般ユーザー権限さえあれば、わずか732バイトのPythonスクリプトで確実にroot(管理者)を奪取できる。クラウド・コンテナ・CI/CDといった「Linuxが土台になっているあらゆる場所」に直撃する脆弱性であり、CISAは公開直後にKEV(既知の悪用脆弱性カタログ)へ追加した。本稿では、なぜこの古いコードが今になって牙を剥いたのか、そしてLinuxを運用する組織が今すぐ何を確認すべきかを実務目線で解説する。
概要
- 脆弱性:Linuxカーネルの暗号サブシステム(AF_ALGインターフェースの
algif_aeadモジュール)に存在するローカル権限昇格。 - CVE / 深刻度:CVE-2026-31431、CVSS 7.8(High)。ローカル攻撃だが影響は機密性・完全性・可用性すべてに「高」。
- 公開日:2026年4月29日に公開。CISA KEVには5月1日に追加され、米連邦機関には5月15日までの是正期限が課された。
- 影響範囲:2017年以降にリリースされたカーネル4.14〜6.19.12系。Ubuntu / Debian / RHEL / Amazon Linux / SUSE / AlmaLinux / Fedora / Arch など事実上全ディストリビューション。
- 厄介な点:競合条件(race condition)に依存しない決定論的なエクスプロイトで、環境を問わず100%再現する。
何が起きたのか
2026年4月29日、研究者によってLinuxカーネルのローカル権限昇格脆弱性「Copy Fail」が公開された。MicrosoftのセキュリティチームやPalo Alto Networks Unit 42、Red Hat、Ubuntu、Tenable、Wizなど、主要なベンダーが相次いでアドバイザリと解説を出す異例の注目度となった。
本脆弱性が「ここ数年で最も深刻なLinuxの脅威」と評される理由は、その普遍性と確実性にある。バグの原因は2017年にパフォーマンス改善目的で導入されたコードであり、それ以降にビルドされたカーネルはディストリビューションを問わず広く影響を受ける。さらに、多くのカーネルエクスプロイトが「タイミング次第で成功率が変わる」「カーネルのメモリ配置(オフセット)に依存する」といった不安定さを抱えるのに対し、Copy Failは競合条件もメモリオフセットの推測も必要としない。標準ライブラリだけで書かれた732バイトのPythonスクリプトが、改変なしであらゆる対象で動作する。
この「修正なしで使い回せる単一スクリプト」という性質が、攻撃者にとっての価値を跳ね上げている。攻撃の前段(フィッシングやWebアプリの脆弱性などで一般ユーザーのシェルを得る段階)さえ突破できれば、後はこのスクリプトを実行するだけでroot権限が手に入る。CISAが公開2日後の5月1日にKEV登録したのは、それだけ悪用の現実味が高いと判断したためだ。
技術的な解説
バグの舞台:AF_ALG と algif_aead
脆弱性が存在するのは、Linuxカーネルの暗号サブシステムだ。Linuxには、ユーザー空間のプログラムがカーネルの暗号処理機能を利用するためのAF_ALGというソケットインターフェースがある。アプリケーションが自前で暗号ライブラリを持たなくても、ソケット経由でカーネルにAES暗号化などを依頼できる仕組みだ。Copy Failはこのうち、認証付き暗号(AEAD)を扱うalgif_aeadモジュールに潜んでいた。
根本原因:2017年の「インプレース最適化」
2017年、暗号処理を高速化するために「入力(req->src)と出力(req->dst)を同じメモリ領域(scatterlist)で扱う」というインプレース最適化が導入された。データをコピーせず同じバッファ上で読み書きすればメモリ効率が良くなる、という発想だ。
ところがこの最適化には欠陥があった。特定のアルゴリズム(authencesn)を使うと、暗号処理が本来の出力領域を4バイトはみ出して書き込む挙動が生じる。そして、はみ出した4バイトの書き込み先はカーネルのページキャッシュ——つまり、ディスク上のファイルをメモリにキャッシュした領域に着弾し得る。攻撃者はパラメータ(seqno_loと呼ばれるシーケンス番号)を操作することで、この4バイトの上書き先を狙った場所に誘導できる。
「ディスクを書き換えずにファイルを書き換える」という発想
Copy Failという名前が示すとおり、攻撃の核心はページキャッシュの改ざんにある。攻撃者は、AF_ALGソケットとsplice()システムコールの相互作用を悪用し、/usr/bin/suのようなsetuid(実行時に所有者権限で動く)バイナリのメモリ上のキャッシュコピーへ、わずか4バイトを書き込む。
重要なのは、ディスク上の実ファイルは一切変更されない点だ。改ざんされるのはメモリにキャッシュされた「読み込み済みのコピー」だけ。それでもOSは次にそのバイナリを実行する際、キャッシュされた(=改ざん済みの)内容を使う。攻撃者は高い権限で動くsetuidバイナリにシェルコード相当の細工を仕込み、それを実行することでroot権限のシェルを取得する。ファイルの整合性チェック(ディスク上のハッシュ照合)をすり抜けやすいのも、この「ディスクは無傷」という特性ゆえだ。
※本稿では攻撃の流れを概念レベルで解説しており、実際のエクスプロイトコードや悪用に必要な詳細パラメータは記載していない。目的はあくまで防御側が脅威の本質を理解するためである。
なぜクラウド・コンテナで特に危険なのか
Copy Failが単なる「1台のサーバーのroot奪取」にとどまらない理由は、カーネルとページキャッシュがホスト全体で共有されるというクラウド基盤の構造にある。
- コンテナ脱出:DockerやKubernetesのコンテナはホストのカーネルを共有する。コンテナ内で一般ユーザーを取った攻撃者がCopy Failでホストのrootを奪えば、コンテナの隔離を突破してホストや他コンテナへ侵入できる。
- マルチテナント侵害:1台の物理ホスト上で複数顧客のワークロードが動くマルチテナント環境では、1テナントの侵害が同居する他テナントへ波及し得る。
- CI/CDパイプラインの汚染:ビルドジョブが任意のコードを実行する性質上、CI環境はもともと「一般ユーザーのコード実行」が常態化している。そこでrootを取られればビルド成果物やシークレットの汚染に直結する。
つまりCopy Failは、クラウド認証情報の窃取や横展開の「最後のひと押し」として組み込まれやすい。初期侵入を担う別の脆弱性やフィッシングと組み合わさることで、被害は単体の数倍に膨らむ。
日本企業への影響
LinuxはWebサーバーやAPIサーバー、Kubernetesクラスタ、データベース、社内基盤の大半を支えている。日本企業も例外ではなく、オンプレミスのLinuxサーバーからAWS / GCP / Azure上のEC2・GKE・AKSまで、影響を受ける対象は膨大だ。
特に注意すべきは、「外部公開していないから安全」という思い込みが通用しない点である。Copy Failはローカル権限昇格であり、それ単体ではリモートからの侵入はできない。しかし現実の攻撃は多段階で進む。
- 公開Webアプリの脆弱性(SSRF・RCE・デシリアライズ等)で一般ユーザーのシェルを取られる
- 盗まれたSSH鍵やパスワードで一般アカウントにログインされる
- 悪意あるコンテナイメージや汚染された依存パッケージが一般権限で実行される
これらで「一般ユーザーの足場」を取られた瞬間、Copy Failがrootへの確実な踏み台になる。権限昇格は「侵入が成立した後の被害を最大化する」フェーズであり、ここを塞げないと一つの小さな侵入が全体崩壊につながる。共用Linuxサーバーや、多数の開発者がログインするビルドサーバー・踏み台サーバーは特にリスクが高い。
今すぐ確認すべきポイント
1. カーネルを修正版へ更新する
最優先はパッチ適用だ。Debian・Ubuntu・SUSE・Red Hatなど主要ディストリビューションは既に修正版カーネルを公開している。修正は問題となった2017年の最適化を取り除き、暗号インターフェースで読み込みと書き込みの分離を復元するものだ。各ディストリの最新カーネルへ更新し、再起動して反映する。
# 現在のカーネルバージョンを確認
uname -r
# Debian / Ubuntu 系
sudo apt update && sudo apt upgrade linux-image-$(uname -r | sed 's/-[a-z]*$//')*
# もしくは
sudo apt full-upgrade
# RHEL / Alma / Rocky 系
sudo dnf upgrade kernel
# 更新後は再起動して新カーネルで起動する
sudo reboot2. 即時再起動できない場合は algif_aead を無効化する
本番サービスの都合で再起動を伴うカーネル更新が難しい場合、緊急回避策として脆弱なalgif_aeadモジュールの読み込みをブロックできる。AF_ALG経由のAEAD暗号を使うアプリケーションがないか事前確認は必要だが、多くの一般的なサーバーでは影響なく無効化できる。
# algif_aead が現在ロードされているか確認
lsmod | grep algif_aead
# モジュールのロードをブロックする設定を追加
echo "install algif_aead /bin/true" | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# 既にロード済みなら(使用中でなければ)アンロード
sudo modprobe -r algif_aead3. クラウド・コンテナ基盤の更新計画を立てる
マネージドKubernetes(EKS / GKE / AKS)はノードのOSイメージ更新で対応する。ノードグループのローリング更新やノードの入れ替えで、修正済みカーネルのイメージへ移行する。コンテナ「内部」の更新では解決しない(脆弱なのはホストのカーネル)点を運用チームに周知することが重要だ。
4. 一般ユーザーのコード実行を前提に多層防御を見直す
Copy Failは「一般権限さえ取れればrootに化ける」脆弱性であるため、そもそも一般権限を取られない・取られても暴れさせないための層が効く。
- 公開アプリの脆弱性(特にRCEにつながるSSRFやパストラバーサル)の早期修正
- SSH鍵・認証情報の棚卸しと不要アカウントの削除(ゼロトラストの考え方で最小権限化)
- seccomp / AppArmor / SELinux によるシステムコール・権限の制限
- EDR・監査ログ(auditd)による異常なsetuid実行・権限昇格の検知
5. 侵害有無を調査する
既に悪用された痕跡がないかも確認したい。ページキャッシュ改ざんはディスク上のファイルに痕跡を残しにくいが、攻撃の前後には不審な兆候が現れる。auditdで予期しないユーザーによるroot昇格やシェル起動を確認し、見覚えのないsetuidバイナリの実行・短時間のroot化・直後の横展開を疑う通信がないかをログから洗い出す。少しでも疑わしい場合はインシデント対応手順に沿ってトリアージする。
参考情報
- Microsoft Security Blog: CVE-2026-31431: Copy Fail vulnerability enables Linux root privilege escalation across cloud environments
- Palo Alto Networks Unit 42: Copy Fail — What You Need to Know About the Most Severe Linux Threat in Years
- Red Hat: RHSB-2026-002 Cryptographic Subsystem Privilege Escalation - Linux Kernel (CVE-2026-31431) - Copy Fail
- Ubuntu / Canonical: Fixes available for CVE-2026-31431 (Copy Fail) Linux Kernel Local Privilege Escalation Vulnerability
- Tenable: Copy Fail (CVE-2026-31431) Linux Kernel Privilege Escalation FAQ
- Wiz: Copy Fail — Universal Linux Local Privilege Escalation Vulnerability
- CISA: Known Exploited Vulnerabilities Catalog(CVE-2026-31431)