はじめに
Copy Fail (CVE-2026-31431) について、脆弱性の仕組みを解説する記事や PoC で root を奪ってみた検証記事は既にたくさん公開されています。
一方で、「で、自分の AL2023 にはどうパッチ当てるの?」 という実務情報がパッと出てこなくて、自分が運用している EC2 で対応する際にだいぶ手探りでした。同じところで詰まる人がいると思うので残しておきます。
結論から言うと、Amazon Linux 2023 (AL2023) はとてもシンプルで、公式ドキュメントに従えば終わりです。
TL;DR
sudo dnf upgrade --releasever=latest -y
sudo reboot
EC2の再起動が必要です
これで CVE-2026-31431 修正済みのカーネルに更新されます(後述の「適用済みかの確認方法」で確認できます)。
環境
$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
PRETTY_NAME="Amazon Linux 2023.11.20260413"
...
$ uname -r
6.18.20-20.229.amzn2023.x86_64
なぜ --releasever=latest が必要か
AL2023 公式ドキュメントに明記されています:
AL2023 AMIs are locked to a specific version of the Amazon Linux repository. To apply both security and bug fixes to an AL2023 instance, update the DNF configuration to the latest available release version.
If you don't specify the release version with the optional flag to the
dnf check-updatecommand, only the currently configured repository version is checked.
要するに、AL2023 の AMI は起動時点のリポジトリバージョンにロックされており、--releasever を指定しないと、そのロックされたリポジトリ内でしか更新がチェックされません。新しい CVE 対応は新しいリポジトリバージョンに含まれていることが多いため、--releasever=latest を付けないと該当アップデートが検出されないケースがあります。
適用済みかの確認方法
再起動後の確認には以下を使います。
1. ALAS と稼働カーネルの突き合わせ
CVE-2026-31431 への対応 ALAS は Amazon Linux Security Center の CVE ページから確認できます。私の場合、適用後の uname -r は 6.18.20-41.237.amzn2023.x86_64 で、これは ALAS2023-2026-1649 で配布された CVE-2026-31431 修正版と完全一致しました。
2. カーネルパッケージの changelog で修正コミットを確認
AL2023 の 6.18 系カーネルパッケージ名は kernel6.18 です(系列によって異なる)。changelog には CVE 番号は直接書かれていませんが、修正コミットのサブジェクトで grep できます:
$ rpm -q --changelog kernel6.18 | grep -i "algif_aead - Revert"
+ [2026-03-26] crypto: algif_aead - Revert to operating out-of-place (herbert@gondor.apana.org.au)
ここに出てくる crypto: algif_aead - Revert to operating out-of-place は、ALAS2023-2026-1649 の Issue Overview に書かれている修正内容と一致します。
3. ライブパッチで対応している場合
$ sudo kpatch list
Loaded patch modules:
livepatch_CVE_2026_31431 [enabled]
Loaded patch modules: に [enabled] 状態で表示されていれば適用済みです。
Kernel Live Patching
補足:一時緩和策について
AWS の CVE ページ と ALAS には、algif_aead モジュールの読み込みを無効化する一時緩和策も記載されています。本記事では恒久対応であるカーネル更新+再起動を主軸とし、再起動猶予手段として Kernel Live Patching を補足する形で解説しています。モジュール無効化の緩和策は本記事ではスコープ外とします。
メンテナンスウィンドウまで再起動できない、サービス停止が困難など、再起動を遅らせたい事情があるなら、AL2023 には Kernel Live Patching が用意されています。
ただし公式ドキュメントによれば、ライブパッチには制約があります:
An AL2023 kernel receives kernel live patches for 3 months. After this period, no new kernel live patches are released for that kernel version. To continue to receive kernel live patches after 3 months, you must reboot the instance to move to the new kernel version.
要するに、3ヶ月以上は猶予されないので、いずれ再起動は必要です。あくまで再起動までのつなぎとして使うものです。
該当 ALAS は ALAS2023LIVEPATCH-2026-XXX の形で公開されており、自分のカーネルに対応した番号を Amazon Linux Security Center の CVE ページで確認できます。例えばカーネル 6.18.20-20.229 用は ALAS2023LIVEPATCH-2026-128 です。
ALAS の指示通りの適用コマンドはこちらです:
sudo systemctl enable --now kpatch.service
sudo dnf update --advisory ALAS2023LIVEPATCH-2026-128 --releasever=latest
私自身が実証したのはパッケージ直指定のルートです:
sudo systemctl enable --now kpatch.service
sudo dnf install -y kernel-livepatch-6.18.20-20.229 --releasever=latest
どちらも実行後に sudo kpatch list で livepatch_CVE_2026_31431 [enabled] が出れば適用完了です。
なお、uname -r の出力(例: 6.18.20-20.229.amzn2023.x86_64)をそのまま kernel-livepatch- の後ろに付けるとマッチしません。パッケージ名は .amzn2023.x86_64 を含まない 6.18.20-20.229 の形である点に注意してください。
まとめ
| 状況 | やること |
|---|---|
| 通常(再起動可能) |
sudo dnf upgrade --releasever=latest -y → sudo reboot
|
| 再起動を遅らせたい(3ヶ月まで) | Kernel Live Patching で暫定対応 → 後日再起動 |
| 適用済み確認 |
uname -r を ALAS のカーネルバージョンと突き合わせ + changelog で修正コミット確認 |
PoC や仕組みの解説は世の中に十分あるので、本記事は 「AL2023 で実際にどう塞ぐか」 にフォーカスしました。同じく対応する人の役に立てば幸いです。
参考
- Manage package and operating system updates in AL2023 (AWS 公式)
- Kernel Live Patching on AL2023 (AWS 公式)
- Copy Fail (CVE-2026-31431) Amazon Linux Security Center
- ALAS2023-2026-1649 (CVE-2026-31431 対応のカーネル更新)
- ALAS2023LIVEPATCH-2026-128 (CVE-2026-31431 対応のライブパッチの一例)
- Copy Fail: 732 Bytes to Root on Every Major Linux Distribution (Xint)
- Copy Fail とは?(結構詳しめ) — 仕組みの解説はこちらが詳しい