
Copy Fail (CVE-2026-31431):Linux、Kubernetes 與 AI 基礎架構的 60 分鐘緊急修補手冊
如果您在多租戶伺服器上運行 Linux,您必須在下一次重新開機前修復 Copy Fail 漏洞。微軟威脅情報團隊於 2026 年 5 月 1 日揭露了 CVE-2026-31431——感謝 Theori 的發現以及 Xint 提供的 732 位元組取得 root 權限的分析報告。CVSS 評分為 7.8(高),且 CERT-EU 在同一天發布了 advisory 2026-005。
Copy Fail 的不同之處在於:它是第一個在預設情況下就能 擊敗 RuntimeDefault seccomp 的主要 Linux 本機權限提升(LPE)漏洞。即使您的 Kubernetes Pod 已設定為 Pod Security Standards Restricted,仍處於受影響範圍。請閱讀並立即採取行動。
重點摘要:接下來 60 分鐘該做什麼
如果您沒時間細讀,請立即執行以下六個步驟:
- 暫停生產環境部署,並在開始輪換任何憑證之前,對
/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 socket 並使用精心製作的 authenc-esn 請求觸發 splice(),非特權使用者會導致 4 位元組的頁面快取寫入,從而破壞 setuid 二進位檔並取得 root 權限。CVSS 評分為 7.8(高)。
根本原因可追溯至 2017 年 algif_aead 中的原地加密優化,這是將核心加密原語暴露給使用者空間的 AF_ALG socket 介面。當 Xint 的 exploit 將正確的 authenc-esn 請求饋送到 socket 並透過 splice() 管道傳輸時,該優化會將 4 個位元組寫入預期緩衝區之外的頁面快取中。選擇正確的偏移量,您就可以重寫磁碟上的 /usr/bin/sudo 或任何其他 setuid 二進位檔。主線修復已作為 commit a664bf3d603d 合併。
這個 exploit 很小。Xint 發布了一個僅 732 位元組 的有效 PoC,且觸發表面可從容器內部訪問。這正是應該讓您感到擔憂的部分。
如果「Dirty Pipe vs Copy Fail」聽起來很熟悉,這個比較是合理的。兩者都是產生任意頁面快取寫入的 Linux 核心 LPE。Dirty Pipe (CVE-2022-0847) 濫用 splice() 進入 pipe;而 Copy Fail 則濫用 splice() 進入 algif_aead socket。兩者都能繞過標準容器 seccomp 預設值。Copy Fail 的特殊之處在於,AF_ALG 路徑可從具有 RuntimeDefault 的 Pod Security Standards Restricted 中訪問,雖然 playbook 形狀相同,但核心表面不同。我們在 Vercel 入侵事件 後涵蓋了回應模式,其結構在此處也完全適用。
您是否受到影響?5 分鐘分類檢查
執行 uname -r 並與您發行版的修補核心進行比較:Ubuntu 6.19.12、AlmaLinux/RHEL 7.0、SUSE 6.18.22。然後執行 lsmod | grep algif_aead。如果模組已載入且您的核心舊於修補版本,則您存在漏洞。如果模組不存在但 /etc/modprobe.d 未將其列入黑名單,您仍然存在漏洞。
在您運行的每台 Linux 主機上依序執行以下四個指令:
# 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 和 Kubernetes 1.30(搭配 containerd 1.7)上測試了 algif_aead 移除。在我們添加 /etc/modprobe.d/copy-fail.conf 之前,任何擁有 shell 存取權的使用者都可以順利重新載入該模組。請將黑名單視為基本必備措施,而非備用計畫。
為什麼 AI/ML 和 Kubernetes 堆疊面臨更高風險
自託管 AI 工作負載面臨不成比例的風險,因為它們經常執行不受信任的程式碼:HuggingFace 構件、MCP 伺服器、代理程式執行器、來自使用者資料的微調作業,以及建構模型容器的 CI/CD 執行器。Pod Security Standards Restricted 預設不會封鎖 socket(AF_ALG, ...),因此受損的推論 Pod 可能攻破主機核心。Juliet.sh 已在受控的 K8s 測試中直接確認這一點。
受影響最嚴重的五個領域:
- 自託管推論伺服器,如 vLLM、sglang、Ollama 和 Ray Serve,通常為多租戶,且經常運行使用者提供的 LoRA 適配器或工具程式碼。我們的 vLLM vs sglang 比較 涵蓋了操作形態;兩者都能在具有
RuntimeDefault的 vanilla containerd Pod 上愉快運行。 - MCP 伺服器,第三方外掛程式在其中執行 shell 命令、解析使用者輸入,並可能與模型本身在同一個 Pod 中運行。任何建構過 持久化狀態的代理程式執行環境 的人都知道信任邊界有多麼薄弱。
- 建構 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。您剛剛失去了主機控制權。共享該節點的每個其他 Pod 現在都處於爆炸半徑內。
60 分鐘緊急修補手冊
透過按順序執行五個階段,在 60 分鐘內修補 Copy Fail:凍結(5 分鐘,暫停自動部署、快照日誌)、偵測(10 分鐘,每個節點執行 uname -r 和 lsmod)、緩解(15 分鐘,modprobe 黑名單加上 seccomp 設定檔)、修補(20 分鐘,發行版核心更新加上滾動重新開機),以及驗證(10 分鐘,確認 lsmod 為空且 uname -r 符合修補版本)。
目標是在一小時內完成修補、驗證並恢復服務。我們將其分為五個緊湊的階段。
第一階段 — 凍結 (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第二階段 — 偵測 (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),現在也值得部署。如果第三階段結束後仍有任何嘗試行為,它將會觸發警報。
第三階段 — 緩解 (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 目錄。不要等待第四階段。
第四階段 — 修補 (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 分鐘,具體取決於發行版。請為您的整個艦隊預算此時間。
第五階段 — 驗證 (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 分鐘內重新開機(合規性變更視窗、面向客戶的 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 |
有兩個值得特別指出的發行版注意事項:
- 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 socket 家族的 Localhost seccomp 設定檔,或使用來自 moby/moby PR #52501 的上游 containerd seccomp 設定檔(一旦發布到您的執行環境)。
修復 Copy Fail Kubernetes 緩解 的 Localhost 設定檔包含四個部分:JSON seccomp 設定檔、使用它的 Pod spec 片段、用於滾動部署的每雲端 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"
}
]
}然後透過 Pod spec 讓每個工作負載選用此設定:
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 模式適用於所有五大供應商。以下是 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 上 部署推論工作負載 時,一個簡單的 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, ...) 的測試 Pod 立即收到 EPERM。
誠實提醒:如果您運行的受管 K8s 服務未公開 kubelet seccomp 目錄(某些無伺服器 K8s 產品隱藏了它),那麼每個節點模板上的 modprobe 黑名單是您唯一的途徑。將黑名單嵌入節點映像,重新部署節點池,並使用 kubectl debug 進行驗證。
偵測:如何判斷您是否已被利用
在過去 30 天內,grep /var/log/auth.log 和 journalctl -u containerd 查找意外的 socket(AF_ALG, ...) 系統呼叫。使用 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。本季度您可以做的六件事,讓下一次變得沒那麼痛苦:
- 最小化核心模組表面。 如果您不使用
algif_*、bluetooth、dccp、tipc、sctp、cifs,請將其列入黑名單。大多數工作負載都不需要它們。 - 每個工作負載預設拒絕 seccomp。 讓 Localhost 設定檔成為常態。
RuntimeDefault是底線,而非上限。 - 基於映像的節點刷新(Talos Linux、Bottlerocket、Flatcar)。原子重新開機、不可變核心、輕鬆回滾。
- 運行時監控。 Falco 或 Tetragon 即時捕捉意外的系統呼叫。將其與 AI 工作負載的 運行時可觀測性 配對,因為其系統呼叫表面更廣。
- SIEM 中的短暫核心模組載入事件警報。 如果
algif_aead在不需要它的生產主機上載入,您希望在幾秒內得知。 - 將 K8s 版本和節點映像固定到您積極進行安全追蹤的基準。 浮動標籤是等待發生的未來事件。
這就是 Copy Fail 在下一個漏洞出現之前教給我們的教訓。那些能在 30 分鐘而不是 60 分鐘內處理下一個零日漏洞的團隊,是已經實施了這六項控制的團隊。
常見問題
我是否受到 Copy Fail (CVE-2026-31431) 的影響?
如果您在 2026 年 5 月 1 日之前發布的核心上運行任何主要 Linux 發行版,並且允許非特權 shell 存取,那麼幾乎可以確定您是。這包括每個多租戶伺服器、每個 Kubernetes 工作節點和每個 CI 執行器。執行 uname -r 並对照上方的已修補版本表進行檢查。CVSS 為 7.8。
即使具有 PSS Restricted,我的 Kubernetes 叢集是否存在漏洞?
是的。具有 seccompProfile.type: RuntimeDefault 的 Pod Security Standards Restricted 不會封鎖 socket(AF_ALG, ...)。Juliet.sh 直接測試了這一點:運行具有 PSS Restricted 加上 RuntimeDefault 的 Pod 透過 Copy Fail 攻破了主機核心。您需要一個 Localhost seccomp 設定檔(在上述 K8s 緩解部分中提供)。
Docker Desktop 是否封鎖 Copy Fail?
Docker Desktop 的預設 seccomp 設定檔已經拒絕許多系統呼叫,但在 moby/moby PR #52501 合併之前並未封鎖 AF_ALG。請將 Docker 更新到包含已修補設定檔的版本(Docker 29.x 回溯移植),或手動套用 seccomp 設定檔。沒有該更新的 Linux Docker 安裝仍然存在暴露風險。
seccomp RuntimeDefault 能阻止此漏洞嗎?
不能。RuntimeDefault 是未修改的容器執行環境設定檔(Docker/containerd 預設值)。它允許 socket(AF_ALG, ...),因為合法的工作負載偶爾會使用核心加密 API。解決方案是一個明確拒絕 AF_ALG 的 Localhost 設定檔(K8s 部分中的完整 JSON)或升級到 moby/moby PR #52501 預設值。
如果我現在無法重新開機核心怎麼辦?
modprobe 黑名單加上拒絕 socket(AF_ALG, ...) 的 Localhost seccomp 設定檔足以支撐到您能夠修補為止。兩者皆無需重新開機即可套用。將 blacklist algif_aead 添加到 /etc/modprobe.d/copy-fail.conf,執行 rmmod algif_aead,部署 seccomp 設定檔,並在下一次維護視窗重新開機。
Copy Fail 是否在野外被利用?
截至 2026 年 5 月 5 日,微軟的威脅情報文章未確認野外利用,但鑑於 Xint 發布的 732 位元組 exploit,將該錯誤描述為「輕易武器化」。該 exploit 原語類別(透過 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() 進入 pipe,Copy Fail 濫用 splice() 進入 algif_aead (AF_ALG) socket。兩者都能繞過標準容器 seccomp 預設值。Copy Fail 的特殊之處:AF_ALG 路徑可從具有 RuntimeDefault 的 Pod Security Standards Restricted 中訪問。
結論
Copy Fail 可在約 60 分鐘內修補,如果您端到端地執行手冊:modprobe 黑名單、核心更新、seccomp 設定檔、驗證。Kubernetes 和 AI 基礎架構的角度使得此 CVE 不同於常規 LPE:具有 RuntimeDefault 的 PSS Restricted 無法保護您,且單個受損的推論 Pod 即可攻破主機。即使在修補之後,modprobe 黑名單加上 Localhost seccomp 設定檔也是持久的防禦措施。
希望有人幫您複查事件回應運行手冊,或在下一個核心 CVE 出現之前建立強化的 K8s 基準?聯繫 Techsy。我們為生產環境 AI/ML 堆疊提供平台強化服務。
最後更新於 2026-05-05。我們將於 2026-05-12 掃描文章以獲取新的發行版公告。