
Copy Fail (CVE-2026-31431): Linux、Kubernetes、AIインフラ向け60分緊急パッチ対応ガイド
マルチテナント環境でLinuxを実行している場合、次の再起動までにCopy Fail脆弱性を修正する必要があります。Microsoft Threat Intelligenceは2026年5月1日にCVE-2026-31431を開示しました。発見者はTheori、また732バイトでroot権限を取得する詳細な解説を提供したのはXintです。CVSSスコアは7.8(高)であり、CERT-EUも同日にアドバイザリー2026-005を発出しました。
Copy Failが異なる点は、標準設定のままでも**RuntimeDefault seccompを無効化する**初の主要なLinux特権昇格(LPE)であることです。「セキュア」だと考えられているKubernetesポッド(Pod Security Standards Restricted適用済み)も影響範囲に含まれます。この記事を読み、直ちに対応してください。
TL;DR: 今後60分以内に実行すべきこと
これだけしか読まないとしても、以下の6つの項目を今すぐ実行してください。
- 本番環境のデプロイを一時停止し、何かをローテーションし始める前に、
/var/log/auth.logとkubectl get events -Aのスナップショットを取得します。 - 全ノードで
uname -rを実行します。使用しているディストリビューションのパッチ適用済みカーネルバージョンより低い場合、脆弱性の影響を受けます。 algif_aeadを直ちに無効化します:echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead。- ディストリビューション用のCopy Failパッチ(Ubuntu USN、AlmaLinux ALSA、SUSE SU)を適用し、再起動します。
- すべてのKubernetesノードに
socket(AF_ALG, ...)を拒否するLocalhost seccompプロファイルを配置し、kubeletを再読み込みします。 - 過去30日間のauth.logおよびEDRログを監査し、予期せぬ
socket(AF_ALG)システムコールや新しいsetuidバイナリの存在を確認します。
完全な内訳(コマンド、ディストリビューション固有のパッチ、K8s seccompプロファイル)は以下に記載しています。
実際に何が起こったのか: CVE-2026-31431の内側
CVE-2026-31431(「Copy Fail」)は、**algif_aeadにおけるLinuxカーネルの特権昇格欠陥です。AF_ALGソケットを開き、細工されたauthenc-esnリクエストでsplice()をトリガーすることで、非特権ユーザーがページキャッシュへの4バイト書き込みを引き起こし、setuidバイナリを破損させてroot権限を取得します。CVSSスコアは7.8(高)**です。
根本原因は、ユーザー空間にカーネル暗号プリミティブを公開するAF_ALGソケットインターフェースであるalgif_aeadにおける、2017年のインプレース暗号最適化に遡ります。Xintのエクスプロイトが適切なauthenc-esnリクエストをソケットに供給し、splice()を通じてパイプ処理すると、この最適化により意図したバッファを超えた4バイトがページキャッシュに書き込まれます。適切なオフセットを選択すれば、ディスク上の/usr/bin/sudoや他の任意のsetuidバイナリを書き換えることができます。メインラインの修正はコミットa664bf3d603dとして取り込まれました。
エクスプロイトは小規模です。Xintは732バイトの動作するPoC(概念実証コード)を公開しており、そのトリガー表面はコンテナ内部から到達可能です。ここが最も警戒すべき点です。
「Dirty Pipe対Copy Fail」という比較に聞き覚えがあるなら、その比較は妥当です。どちらも任意のページキャッシュ書き込みを生み出すLinuxカーネルLPEです。Dirty Pipe (CVE-2022-0847)はパイプへのsplice()を悪用しましたが、Copy Failはalgif_aeadソケットへのsplice()を悪用します。どちらも標準的なコンテナseccompのデフォルト設定をバイパスします。Copy Failの特徴は、AF_ALGパスがRuntimeDefaultを使用したPod Security Standards Restrictedから到達可能である点です。同じ対応プレイブックの形状ですが、異なるカーネル表面を狙います。私たちはVercel侵害後の対応パターンを取り上げましたが、その構造はここにも cleanly ポートできます。
影響を受けているか? 5分間のトリアージ
uname -rを実行し、ディストリビューションのパッチ適用済みカーネルと比較してください:Ubuntu 6.19.12、AlmaLinux/RHEL 7.0、SUSE 6.18.22。次にlsmod | grep algif_aeadを実行します。モジュールがロードされており、カーネルがパッチ適用済みバージョンより古い場合、脆弱性の影響を受けます。モジュールが存在しないものの、/etc/modprobe.dでブラックリスト化されていない場合も、依然として脆弱です。
運用中のすべてのLinuxホストで、以下の4つのコマンドを順序通りに実行してください。
# 1. Identify running kernel
uname -r# 2. Cross-reference against the per-distro table further down.
# Ubuntu < 6.19.12 = vulnerable. RHEL/AlmaLinux/Rocky < 7.0 = vulnerable. SUSE < 6.18.22 = vulnerable.
cat /etc/os-release | grep -E '^(NAME|VERSION_ID)='# 3. Is the module loaded?
lsmod | grep -E 'algif_(aead|skcipher)'# 4. (Kubernetes only) count nodes you need to triage
kubectl get nodes -o wide率直な注意: lsmodがalgif_aeadに対して空を返す場合、あなたは安全ではありません。ほとんどのディストリビューションでは、非特権ユーザー自身がmodprobe algif_aeadを実行できるためです。これはkmodが自動ロード対象モジュールに対して機能(capability)によるゲートを行わないためです。「モジュールがアンロードされている」状態は、TL;DRのステップ3でブラックリストファイルを追加するまで、「モジュールが到達不可能」であることを意味しません。
Ubuntu 24.04 LTSおよびcontainerd 1.7を搭載したKubernetes 1.30でalgif_aeadの削除をテストしました。/etc/modprobe.d/copy-fail.confを追加するまで、シェルアクセスを持つ任意のユーザーに対してモジュールは正常に再ロードされました。ブラックリストはバックアッププランではなく、必須条件として扱ってください。
AI/MLおよびKubernetesスタックがより高いリスクにある理由
セルフホスト型AIワークロードは、信頼できないコードを日常的に実行するため、不均衡に大きな影響を受けます。HuggingFaceアーティファクト、MCPサーバー、エージェントランナー、ユーザーデータからのファインチューニングジョブ、モデルコンテナをビルドするCI/CDランナーなどです。Pod Security Standards Restrictedはデフォルトでsocket(AF_ALG, ...)をブロックしないため、侵害された推論ポッドがホストカーネルを乗っ取ることが可能です。Juliet.shは制御されたK8sテストでこれを直接確認しました。
これが最も深刻に影響する5つの場所:
- セルフホスト型推論サーバー: vLLM、sglang、Ollama、Ray Serveなど。これらはしばしばマルチテナントであり、ユーザー提供のLoRAアダプターやツールコードを頻繁に実行します。私たちのvLLM vs sglang比較では運用形態について触れていますが、どちらも
RuntimeDefaultを使用したvanilla containerdポッド上で問題なく動作します。 - MCPサーバー: サードパーティ製プラグインがシェルコマンドを実行したり、ユーザー入力を解析したりし、モデル自体と同じポッド内で実行される可能性があります。状態を永続化するエージェントランタイムを構築した経験のある anyone は、信頼境界がいかに薄いかを知っています。
- MLイメージをビルドするCI/CDランナー: 任意のHuggingFaceアーティファクトを取得し、信頼できないソースから
pip installを実行します。これらはすべてランナーのUIDで実行されます。 - エージェントプラットフォーム: 定義上、エージェントコードはランタイム時にユーザー制御下にあります。エージェントデプロイメントプラットフォームを運用している場合、すべてのプラグインとツール拡張が影響範囲に含まれます。
- GPUノード: 通常は高性能でマルチテナントであり、CUDA/ドライバーアクセスのために緩和されたセキュリティプロファイルで実行されることが多いです。これらはあなたが保有する中で最もコストの高いマシンでもあります。共有GPUリグでローカルでLLMを実行しているチームは明白な標的です。
具体的な例: ユーザーが悪意あるパッケージを含むrequirements.txt付きのLoRAアダプターをアップロードします。pip installは推論コンテナのUIDで実行されます。RuntimeDefaultを使用したPSS Restricted上のコンテナであっても、socket(AF_ALG, ...)を実行してCopy Failをトリガーできます。これでホストは失われました。そのノードを共有している他のすべてのポッドが爆発半径内にあります。
60分緊急パッチ対応プレイブック
5つのフェーズを順に実行することで、60分以内にCopy Failをパッチ適用します: Freeze(5分、自動デプロイの停止、ログのスナップショット)、Detect(10分、ノードごとのuname -rおよびlsmod)、Mitigate(15分、modprobeブラックリストおよびseccompプロファイル)、Patch(20分、ディストリビューションカーネルの更新およびローリング再起動)、Verify(10分、lsmodが空であり、uname -rがパッチ適用済みバージョンと一致することを確認)。
目標は、1時間以内にパッチ適用、検証、サービス復帰を果たすことです。これを5つの緊密なフェーズに分割しました。
フェーズ1 — Freeze(0:00–0:05)
自動デプロイを一時停止し、ログをスナップショット取得します。現在の状態を記録するまで、apt upgradeやdnf updateを控えてください。
# Pause GitOps / CI auto-deploys (adjust to your stack)
flux suspend kustomization --all -A 2>/dev/null || true
argocd app set --sync-policy none $(argocd app list -o name) 2>/dev/null || true
# Snapshot evidence before anything changes
mkdir -p /tmp/copy-fail-evidence-$(date +%s)
cp /var/log/auth.log* /tmp/copy-fail-evidence-*/
journalctl --since "30 days ago" > /tmp/copy-fail-evidence-*/journal.log
kubectl get events -A --sort-by=.lastTimestamp > /tmp/copy-fail-evidence-*/k8s-events.log 2>/dev/nullフェーズ2 — Detect(0:05–0:15)
前のH2セクションの4コマンドトリアージをすべてのホストに対して実行します。Kubernetesの場合、このワンライナーはすべてのノードでuname -rを実行します。
for node in $(kubectl get nodes -o name); do
echo "=== $node ==="
kubectl debug $node -it --image=busybox -- chroot /host uname -r 2>/dev/null
doneまだデプロイしていない場合は、Sysdigが公開したFalcoルール(Unexpected AF_ALG Socket Creation)もここでデプロイする価値があります。フェーズ3終了後もなお試行しているものがあれば、即座にアラートを発報します。
フェーズ3 — Mitigate(0:15–0:30)
algif_aeadを無効化します。これはalgif_aead無効化シーケンスであり、再起動不要で数秒で適用されます。
# On every Linux host
cat <<EOF | sudo tee /etc/modprobe.d/copy-fail.conf
blacklist algif_aead
blacklist algif_skcipher
install algif_aead /bin/false
EOF
sudo rmmod algif_aead 2>/dev/null
sudo rmmod algif_skcipher 2>/dev/null
# Verify the module is gone and stays gone
lsmod | grep algif_ && echo "STILL LOADED" || echo "OK — module unloaded"また、H2 #7のCopy Fail seccompプロファイルを今すぐkubelet seccompディレクトリにデプロイしてください。フェーズ4を待たないでください。
フェーズ4 — Patch(0:30–0:50)
ディストリビューションのパッチを適用します。以下のディストリビューション別表には、各ディストリビューション用のワンライナーが記載されています。Kubernetesの場合、drain-cordon-uncordonが安全なパターンです。
# Per node, in a rolling sweep
NODE=node-01
kubectl cordon $NODE
kubectl drain $NODE --ignore-daemonsets --delete-emptydir-data --timeout=600s
ssh $NODE 'sudo apt update && sudo apt install -y linux-image-generic && sudo reboot'
# Wait for node to come back
until kubectl get node $NODE -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q True; do sleep 5; done
kubectl uncordon $NODE私たちのテスト実行では、modprobe + rmmodシーケンスはノードあたり約8秒かかりました。カーネルインストール + 再起動は、ディストリビューションに応じてノードあたり3〜5分かかりました。フリート全体でその時間を予算計上してください。
フェーズ5 — Verify(0:50–1:00)
トリアージを再実行します。lsmod | grep algif_aeadが空を返し、uname -rがパッチ適用済みバージョンと一致し、kubectl get nodesが新しいカーネル上ですべてのノードがReady状態であることを確認します。
# On every node
lsmod | grep algif_aead && echo "FAIL: module still loadable"
uname -r # must match patched version for distro
# From your control plane
kubectl get nodes -o wide
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}'率直な注意事項: 次の60分以内に再起動できない場合(コンプライアンス変更ウィンドウ、顧客 facing SLAなど)、modprobeブラックリストとseccompプロファイルの組み合わせは、パッチ適用が可能になるまで十分です。どちらも再起動なしで適用できます。次のメンテナンスウィンドウでカーネルインストールをスケジュールし、その間は持続的な軽減策を講じます。
ディストリビューション別パッチコマンド
パッチ適用済みカーネルバージョン: Ubuntu 24.04/24.10 6.19.12、RHEL/AlmaLinux/Rocky 9 + 10 7.0 (kernel-7.0.0-553.42.1.el9)、Debian 12 6.19.12、SUSE SLE 15 SP6 6.18.22、Amazon Linux 2023 6.19.12、Arch 7.0。ディストリビューション固有の更新コマンドを実行し、その後再起動してください。
| ディストリビューション | 影響を受けるバージョン | パッチ適用済みバージョン | パッチコマンド(その後再起動) | アドバイザリー |
|---|---|---|---|---|
| Ubuntu 22.04 / 24.04 / 24.10 | < 6.19.12 | 6.19.12 | apt update && apt install -y linux-image-generic | Ubuntu USN |
| Debian 12 / 13 | < 6.19.12 | 6.19.12 | apt update && apt install -y linux-image-amd64 | Debian Security |
| RHEL 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | Red Hat CVE |
| AlmaLinux 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | AlmaLinux ALSA |
| Rocky Linux 9 / 10 | < 7.0.0-553.42.1 | kernel-7.0.0-553.42.1.el9 | dnf update kernel | Rocky Errata |
| SUSE SLE 15 SP6 / openSUSE Leap 15.6 | < 6.18.22 | 6.18.22 | zypper update kernel-default | SUSE Communities |
| Amazon Linux 2023 | < 6.19.12 | 6.19.12 | dnf update kernel | AWS Security Center |
| Arch Linux | < 7.0 | 7.0 | pacman -Syu | Arch Security Tracker |
注目すべき2つのディストリビューション固有の注意点:
- RHEL.
dnf update kernelで新しいものが見つからない場合、subscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpmsを実行して再試行してください。ベースのRHEL 9リポジトリが最初にパッチ適用済みビルドを提供します。 - SUSE.
zypper update kernel-defaultは、デフォルトカーネルフレーバーを使用したSLE 15 SP6での正しいパッケージです。それらのフレーバーを使用している場合は、kernel-azureまたはkernel-rtに切り替えてください。更新後にzypper info kernel-defaultで確認してください。
ubuntu copy fail patch commandについては、上記のワンライナーがCanonical公式推奨パスです。USNページは、HWEおよびGAスタック全体で同じlinux-image-genericメタパッケージをリンクしています。
Kubernetes & コンテナ軽減策: なぜRuntimeDefaultでは不十分なのか
seccompProfile.type: RuntimeDefaultを使用したKubernetes Pod Security Standards Restrictedは、socket(AF_ALG, ...)をブロックしません。コンテナ層でCopy Failを阻止するには、AF_ALGソケットファミリーを明示的に拒否するLocalhost seccompプロファイルをデプロイするか、ランタイムにリリースされた時点でmoby/moby PR #52501の上流containerd seccompプロファイルを使用してください。
Copy Fail Kubernetes軽減策を修正するLocalhostプロファイルは4つの部分で構成されます: JSON seccompプロファイル、それを使用するポッド仕様のスニペット、それをロールアウトするためのクラウド別DaemonSetパターン、および検証コマンド。以下のJSONをすべてのノードの/var/lib/kubelet/seccomp/profiles/copy-fail.jsonに配置してください。
{
"defaultAction": "SCMP_ACT_ALLOW",
"architectures": ["SCMP_ARCH_X86_64", "SCMP_ARCH_X86", "SCMP_ARCH_AARCH64"],
"syscalls": [
{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"errnoRet": 1,
"args": [
{
"index": 0,
"value": 38,
"op": "SCMP_CMP_EQ",
"comment": "AF_ALG = 38; deny kernel crypto socket family"
}
]
},
{
"names": ["socket"],
"action": "SCMP_ACT_ALLOW"
}
]
}次に、ポッド仕様経由ですべてのワークロードをそれにオプトインさせます。
apiVersion: v1
kind: Pod
metadata:
name: inference
spec:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: copy-fail.json
runAsNonRoot: true
runAsUser: 1000
containers:
- name: vllm
image: vllm/vllm-openai:v0.6.3
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
seccompProfile:
type: Localhost
localhostProfile: copy-fail.jsonクラウド管理型Kubernetesの場合、DaemonSetパターンは主要5プロバイダーすべてで機能します。以下はAKS Copy Fail / EKS Copy Fail軽減策マトリックスです。
| プロバイダー | プロファイルパス | 配布メカニズム | 注意事項 |
|---|---|---|---|
| AKS (Azure) | /var/lib/kubelet/seccomp/profiles/ | DaemonSetがhostPath経由でファイルを書き込み、kubeletが取得します。Azure/AKS#5753参照。 | インツリーパッチを迅速に行うためにMarinerベースのノードイメージを使用 |
| EKS (AWS) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet + EKS最適化AMI 1.30+ | Bottlerocketは自動更新経由でカーネルパッチを取得。Amazon Linux 2023はdnf update kernelが必要 |
| GKE (Google) | /var/lib/kubelet/seccomp/profiles/ | DaemonSetは標準モードで機能。AutopilotはhostPathを許可しないため、NodeConfigを使用 | COS-117+はパッチ適用済みカーネルを出荷 |
| OVHcloud MKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet、OVHcloud Copy Failブログに従う | OVHは7日サイクルでマネージドノードイメージのリフレッシュを公開 |
| DigitalOcean DOKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet。DOノードイメージは次のプールロール時に自動更新 | カーネルパッチにはプールロールが必要。DaemonSetはそのギャップをカバー |
マネージドKubernetes across で推論ワークロードをデプロイしている場合、プロファイルを所定の位置に配置するシンプルなDaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: copy-fail-seccomp-installer
namespace: kube-system
spec:
selector: { matchLabels: { app: copy-fail-seccomp } }
template:
metadata: { labels: { app: copy-fail-seccomp } }
spec:
hostPID: true
containers:
- name: installer
image: busybox:1.36
command: ["sh", "-c", "cp /profile/copy-fail.json /host-seccomp/copy-fail.json && sleep infinity"]
volumeMounts:
- { name: profile, mountPath: /profile }
- { name: host-seccomp, mountPath: /host-seccomp }
volumes:
- name: profile
configMap: { name: copy-fail-profile }
- name: host-seccomp
hostPath: { path: /var/lib/kubelet/seccomp/profiles, type: DirectoryOrCreate }着地したことを確認:
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5私たちは5ノードのAKSクラスターでDaemonSet経由でLocalhostプロファイルをデプロイしました。Kubeletはノード再起動なしで30秒以内にそれを取得し、socket(AF_ALG, ...)を呼び出したテストポッドは即座にEPERMを受け取りました。
率直な注意事項: kubelet seccompディレクトリを公開しないマネージドK8sサービス(一部のサーバーレスK8sオファリングはこれを隠蔽)を実行している場合、すべてのノードテンプレートでのmodprobeブラックリストが唯一の手段です。ブラックリストをノードイメージに組み込み、ノードプールを再デプロイし、kubectl debugで検証してください。
検知: すでにエクスプロイトされているかどうかを確認する方法
過去30日間の予期せぬsocket(AF_ALG, ...)システムコールについて、/var/log/auth.logおよびjournalctl -u containerdをgrepします。find / -perm -4000 -newer /etc/shadow -mtime -30を使用して新しいsetuidバイナリを確認します。SysdigはFalcoルール(Unexpected AF_ALG Socket Creation)を公開しており、Microsoft Defender XDRはシグネチャBehavior:Linux/CopyFailExploit.Aを提供しています。
# 1. Auth.log for unexpected sudo/setuid invocations near AF_ALG syscalls
sudo grep -E 'session opened for user root' /var/log/auth.log* | \
awk '{print $1, $2, $3, $11}' | sort | uniq -c | sort -rn | head -20# 2. New or modified setuid binaries since the disclosure date
sudo find / -xdev -perm -4000 -newer /etc/shadow -mtime -30 \
-not -path '/proc/*' -not -path '/sys/*' 2>/dev/null# 3. Module load events for algif_aead in the last 30 days
sudo journalctl --since "30 days ago" | grep -E 'algif_aead|algif_skcipher'# 4. Falco rule reference (deploy via helm chart)
# https://github.com/falcosecurity/rules — rule name: "Unexpected AF_ALG Socket Creation"
falcoctl artifact install copy-fail-rulesヒットが見つかった場合(デプロイしていない新しいsetuidバイナリ、または予期せぬユーザーに関連付けられたカーネルalgif_aeadロードイベント)、それは確定した侵害として扱ってください。資格情報をローテーションし、ホストを隔離し、インシデント対応チームにエスカレーションし、GDPRの72時間通知クロックが始まったかどうかを検討してください。過剰反応のコストはメンテナンスウィンドウですが、過少反応のコストは今後の18ヶ月のキャリアです。
強化: 火消し作業なしで次のカーネルCVEを乗り切る方法
Copy Failは、RuntimeDefaultを打ち負かす最後のカーネルCVEではありません。次のもっと痛みを伴わないものにするために、今四半期で実行できる6つのこと:
- 最小限のカーネルモジュール表面。 使用しない場合は、
algif_*、bluetooth、dccp、tipc、sctp、cifsをブラックリスト化してください。ほとんどのワークロードは使用しません。 - すべてのワークロードでデフォルト拒否seccomp。 Localhostプロファイルを標準にしてください。
RuntimeDefaultは床であり、天井ではありません。 - イメージベースのノードリフレッシュ(Talos Linux、Bottlerocket、Flatcar)。アトミックな再起動、不変のカーネル、痛みのないロールバック。
- ランタイム監視。 FalcoまたはTetragonが予期せぬシステムコールをリアルタイムで捕捉。システムコール表面が広いAIワークロードには、ランタイム観測性とペアリングします。
- SIEMでの短命カーネルモジュールロードイベントのアラート。 必要のない本番ホストで
algif_aeadがロードされた場合、数秒以内に知りたいはずです。 - 積極的にセキュリティ追跡しているベースラインにK8sバージョンとノードイメージをピン留め。 フローティングタグは、将来のインシデントを待っているだけです。
それが、次のものが落ちる前にCopy Failが私たちに教えてくれる教訓です。次のゼロデイを60分ではなく30分で処理できるチームは、すでにこれら6つのコントロールを出荷しているチームです。
よくある質問
私はCopy Fail (CVE-2026-31431)の影響を受けていますか?
2026年5月1日より前にリリースされたカーネル上で主要なLinuxディストリビューションを実行し、非特権シェルアクセスを許可している場合、ほぼ確実にイエスです。これには、すべてのマルチテナントボックス、すべてのKubernetesワーカー、すべてのCIランナーが含まれます。uname -rを実行し、上記のパッチ適用済みバージョン表と照合してください。CVSSは7.8です。
PSS Restricted即使在しても、私のKubernetesクラスターは脆弱ですか?
はい。seccompProfile.type: RuntimeDefaultを使用したPod Security Standards Restrictedは、socket(AF_ALG, ...)をブロックしません。Juliet.shはこれを直接テストしました。PSS Restricted plus RuntimeDefaultで実行されているポッドは、Copy Fail経由でホストカーネルをポップしました。Localhost seccompプロファイル(上記のK8s軽減策セクションで提供)が必要です。
Docker DesktopはCopy Failをブロックしますか?
Docker Desktopのデフォルトseccompプロファイルは多くのシステムコールをすでに拒否していますが、moby/moby PR #52501が取り込まれるまでAF_ALGをブロックしていませんでした。パッチ適用済みプロファイル(Docker 29.xバックポート)を含むリリースにDockerを更新するか、seccompプロファイルを手動で適用してください。その更新なしのLinux Dockerインストールは依然として露出しています。
seccomp RuntimeDefaultはこれを止めますか?
いいえ。RuntimeDefaultは未変更のコンテナランタイムプロファイル(Docker/containerdデフォルト)です。正当なワークロードが時々カーネル暗号APIを使用するため、socket(AF_ALG, ...)を許可します。修正策は、AF_ALGを明示的に拒否するLocalhostプロファイル(K8sセクションの完全なJSON)か、moby/moby PR #52501デフォルトへのアップグレードです。
今すぐカーネルを再起動できない場合はどうすればよいですか?
modprobeブラックリストとsocket(AF_ALG, ...)を拒否するLocalhost seccompプロファイルの組み合わせは、パッチ適用が可能になるまで十分です。どちらも再起動なしで適用できます。/etc/modprobe.d/copy-fail.confにblacklist algif_aeadを追加し、rmmod algif_aeadを実行し、seccompプロファイルをデプロイし、次のメンテナンスウィンドウで再起動してください。
Copy Failは野外で悪用されていますか?
2026年5月5日現在、Microsoftの脅威インテリジェンス投稿は野外での悪用を確認していませんが、Xintが公開した732バイトのエクスプロイトを考慮し、バグを「容易に武器化可能」と特徴付けています。エクスプロイトプリミティブクラス(splice経由のページキャッシュ書き込み)はDirty Pipe (CVE-2022-0847) と重複しており、こちらは開示後数週間以内に広く悪用されました。
Copy Failは特にAI/MLワークロードに影響しますか?
はい、不均衡にそうです。セルフホスト型推論(vLLM、sglang、Ollama)、エージェントランタイム、MCPサーバー、MLイメージ用のCIビルドは、日常的に信頼できないユーザーコードを実行します。PSS Restricted即使在しても、コンテナ内のこれらのいずれかがCopy Failをトリガーし、ホストをポップする可能性があります。GPUノードは、通常マルチテナントであるため、最も高いリスクプロファイルです。
Copy FailはDirty Pipeとどのように異なりますか?
どちらも任意のページキャッシュ書き込みを生み出すLinuxカーネルLPEですが、トリガー表面が異なります。Dirty Pipeはパイプへのsplice()を悪用しましたが、Copy Failはalgif_aead(AF_ALG)ソケットへのsplice()を悪用します。どちらも標準的なコンテナseccompデフォルトをバイパスします。Copy Failの特徴: AF_ALGパスはRuntimeDefaultを使用したPod Security Standards Restrictedから到達可能です。
結論
Copy Failは、プレイブックを端から端まで実行すれば、およそ60分でパッチ適用可能です。modprobeブラックリスト、カーネル更新、seccompプロファイル、検証。KubernetesおよびAIインフラの角度が、このCVEを通常のLPEとは異なるものにしています。RuntimeDefaultを使用したPSS Restrictedはあなたを救わず、単一の侵害された推論ポッドがホストをポップする可能性があります。modprobeブラックリストとLocalhost seccompプロファイルは、パッチ適用後でも持続的な防御策です。
インシデント対応ランブックに対するセカンドオピニオン、または次のカーネルCVEの前に硬化されたK8sベースラインが必要ですか?Techsyにお問い合わせください。私たちは本番AI/MLスタックのプラットフォーム強化を実行しています。
最終更新 2026-05-05。2026-05-12に新しいディストリビューションアドバイザリーについてポストを掃討します。