flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
CVE-2026-31431:Linux カーネルの Copy Fail
Copy Fail は Linux AF_ALG の AEAD 経路にあるローカル権限昇格の脆弱性です。in-place 最適化が送信元と宛先のマッピングを混同し、上流修正は out-of-place 処理に戻しました。CISA は CVE を KEV に掲載しています。[1], [2], [5]
図書館員がコピーに印を付けるはずなのに、機械の近道で鉛筆が原本に届く状況を想像してください。in-place の近道により結果用の書き込みが別のマッピング済みページに届く可能性がありました。修正は送信元と宛先を分けます。[3], [8]
主要な概念と専門用語
AEAD- 関連データ付き認証暗号:データを暗号化し、追加の非暗号化メタデータを認証します。[8]
algif_aead- AEAD 用 AF_ALG 実装で、脆弱な送信元・宛先処理経路を含みます。[3]
Page cache- ファイル内容のカーネルメモリキャッシュ。ページへの書き込みはディスク書き戻し前の読み取りにも影響します。[8]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-669 CWE-1288
- CISA KEV — 追加日 2026-05-01 — CVE-2026-31431
根本原因の分析 (Root Cause)
2017 年の変更 72548b093ee3 は algif_aead に in-place 最適化を導入しました。送信元と宛先は異なるマッピングの場合があります。authencesn は一時データを出力領域の外へ書き込み、in-place scatterlist により splice() で渡されたファイルのページキャッシュへ届く可能性がありました。Linux の CVE 通知は関連データのコピーを残しつつ out-of-place 処理へ戻す修正を説明しています。ローカルアクセスと脆弱経路の有効化が必要です。CVSS 7.8(AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)で、未認証のリモート侵入経路ではありません。[1], [3], [8], [7], [9], [10]
ステップ・バイ・ステップの攻撃フロー
書き込みが出力範囲を越える
authencesn の一時データ処理が出力範囲外へ書き込み、splice() で渡されたファイルのキャッシュページに届く可能性があります。[8]
ソースコード比較:脆弱 vs 堅牢化
概念の要約であり、カーネルの逐語的なコードやコンパイル可能なパッチではありません。上流通知によると修正は 72548b093ee3 をほぼ戻し、異なるマッピングに対応するため関連データのコピーを残します。[3], [2]
ソース抜粋: crypto/algif_aead.c (_aead_recvmsg)
/* 修正前: 暗号処理を同じバッファ上で実行する。 */
rsgl_src = areq->first_rsgl.sgl.sg;
if (ctx->enc) {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
/* 認証タグ用の TX scatterlist を構築して連結する。 */
areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
/* ... */
}
aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
/* 修正後: リクエストごとのソース scatterlist を保持する。 */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* areq->tsgl を割り当てて初期化し、TX ページをそこへ追加する。 */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* 関連データをコピーしつつ、ソースと宛先は分離しておく。 */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
エンジニアリング&システム堅牢化チェックリスト
- ✓ディストリビューションのサポート対象チャネルで更新し、パッケージ通知で
CVE-2026-31431の修正を確認してください。一般的な上流バージョンだけで判断しないでください。[1], [5], [7] - ✓共有カーネルと信頼できないローカルユーザーがあるマルチテナントホスト、ビルドワーカー、コンテナノードを優先してください。[5], [7]
- ✓すぐに更新できない場合は OS ベンダーが文書化した緩和策のみを適用し、影響を確認してください。コードはカーネルに組み込まれている場合があります。[5], [7]
- ✓不変イメージや修正がバックポートされた LTS を含め、全体のカーネルとパッケージ出所を確認してください。[5], [7]
- ✓コンテナはホストカーネルを共有するため、ローカル権限昇格は namespace 分離を弱める可能性があります。[5], [8]
- ✓修正後も追加バックポートを確認し、未修正ホストを是正対象として追跡してください。KEV 掲載は修正の代わりになりません。[1], [5]
参考資料
- Linux kernel CVE notice for CVE-2026-31431
- Upstream stable patch: revert algif_aead to out-of-place operation
- Stable patch source with the algif_aead.c code diff
- CVE record and CVSS vector
- Canadian Centre for Cyber Security alert AL26-009
- CISA Known Exploited Vulnerabilities catalog entry
- Red Hat CVE analysis and affected product status
- Xint technical disclosure: Copy Fail — 732 Bytes to Root on Linux
- MITRE CWE-1288: Improper Validation of Consistency within Input
- MITRE CWE-669: Incorrect Resource Transfer Between Spheres
- NVD — CVE-2026-31431 weakness mapping (source: redhat-SADP)