
Copy Fail (CVE-2026-31431): 60minutový pohotovostní plán opravy pro Linux, Kubernetes a AI infrastrukturu
Pokud provozujete Linux na víceuživatelském stroji, máte na opravu zranitelnosti copy fail čas do příštího restartu. Microsoft Threat Intelligence zveřejnil CVE-2026-31431 1. května 2026 — zásluha za objev patří Theori a Xint za write-up o 732 bajtech k rootu. CVSS je 7,8 (High) a CERT-EU vydal ve stejný den advisory 2026-005.
Copy Fail je výjimečný tím, že jde o první velký linuxový LPE, který hned od začátku poráží RuntimeDefault seccomp. Váš „zabezpečený" Kubernetes pod s Pod Security Standards Restricted je v ohrožení. Přečtěte si to a jednejte.
TL;DR: Co udělat v příštích 60 minutách
Pokud si nepřečtete nic jiného, udělejte teď hned těchto šest věcí:
- Pozastavte produkční nasazení a snapshotujte
/var/log/auth.logakubectl get events -A, než začnete cokoli rotovat. - Spusťte
uname -rna každém uzlu. Pokud jste pod opraveným kernelem pro vaši distribuci, jste zranitelní. - Okamžitě zakažte
algif_aead:echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead. - Aplikujte patch copy fail pro vaši distribuci (Ubuntu USN, AlmaLinux ALSA, SUSE SU) a restartujte.
- Nasaďte Localhost seccomp profil, který zamítá
socket(AF_ALG, ...), na každý Kubernetes uzel a znovu načtěte kubelet. - Zauditujte posledních 30 dní auth.log + EDR kvůli neočekávaným syscallům
socket(AF_ALG)a novým setuid binárkám.
Plný rozbor (příkazy, patche pro jednotlivé distribuce, K8s seccomp profil) je níže.
Co se vlastně stalo: Uvnitř CVE-2026-31431
CVE-2026-31431 („Copy Fail") je chyba eskalace oprávnění v linuxovém jádře v algif_aead. Otevřením socketu AF_ALG a vyvoláním splice() se speciálně upraveným požadavkem authenc-esn způsobí neprivilegovaný uživatel 4bajtový zápis do page cache, který poškodí setuid binárky a poskytne root. CVSS je 7,8 (High).
Příčina sahá k in-place optimalizaci kryptografie z roku 2017 v algif_aead, socketovém rozhraní AF_ALG, které vystavuje kryptografické primitivy jádra userspace. Když exploit Xint vloží do socketu správný požadavek authenc-esn a protlačí jej přes splice(), optimalizace zapíše 4 bajty za zamýšlený buffer do page cache. Zvolte správný offset a přepisujete /usr/bin/sudo nebo jinou setuid binárku na disku. Oprava v mainline přišla jako commit a664bf3d603d.
Exploit je malý. Xint publikoval funkční PoC o 732 bajtech a spouštěcí plocha je dosažitelná zevnitř kontejneru. To je ta část, ze které by vám měl spadnout žaludek.
Pokud vám „Dirty Pipe vs Copy Fail" zní povědomě, srovnání je na místě. Oba jsou linuxové LPE jádra vytvářející libovolné zápisy do page cache. Dirty Pipe (CVE-2022-0847) zneužíval splice() do roury; Copy Fail zneužívá splice() do socketu algif_aead. Oba obcházejí standardní výchozí seccomp kontejneru. Zvrat Copy Fail je v tom, že cesta AF_ALG je dosažitelná z Pod Security Standards Restricted s RuntimeDefault — stejný tvar playbooku, jiná plocha jádra. Vzorec reakce jsme rozebrali po narušení Vercel a jeho struktura se sem čistě přenáší.
Jste postižení? 5minutový triage
Spusťte uname -r a porovnejte s opraveným kernelem pro vaši distribuci: Ubuntu 6.19.12, AlmaLinux/RHEL 7.0, SUSE 6.18.22. Pak spusťte lsmod | grep algif_aead. Pokud je modul načtený a váš kernel je starší než opravená verze, jste zranitelní. Pokud modul chybí, ale /etc/modprobe.d jej neblacklistuje, stále jste zranitelní.
Spusťte tyto čtyři příkazy na každém linuxovém hostiteli, kterého provozujete, v pořadí:
# 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 wideUpřímná poznámka: pokud lsmod vrátí pro algif_aead prázdný výsledek, nejste v bezpečí. Neprivilegovaný uživatel si může sám spustit modprobe algif_aead na většině distribucí, protože kmod u modulů způsobilých k autoloadu nekontroluje capability. „Modul odnačtený" neznamená „modul nedosažitelný", dokud nepřidáte blacklist soubor v kroku 3 TL;DR.
Odebrání algif_aead jsme testovali na Ubuntu 24.04 LTS a Kubernetes 1.30 s containerd 1.7. Modul se v pohodě znovu načetl pro každého uživatele s přístupem k shellu, dokud jsme nepřidali /etc/modprobe.d/copy-fail.conf. Berte blacklist jako základ, ne jako záložní plán.
Proč jsou AI/ML a Kubernetes stacky v vyšším riziku
Vlastní hostované AI workloady jsou nepřiměřeně vystavené, protože rutinně spouštějí nedůvěryhodný kód: artefakty HuggingFace, MCP servery, agent runnery, fine-tuning úlohy z uživatelských dat a CI/CD runnery, které buildí modelové kontejnery. Pod Security Standards Restricted ve výchozím stavu neblokuje socket(AF_ALG, ...), takže kompromitovaný inferenční pod může prorazit kernel hostitele. Juliet.sh to přímo potvrdil v řízeném K8s testu.
Pět míst, kde to udeří nejvíc:
- Vlastní hostované inferenční servery jako vLLM, sglang, Ollama a Ray Serve, často víceuživatelské a často spouštějící uživatelem dodané LoRA adaptéry nebo nástrojový kód. Náš srovnání vLLM vs sglang pokrývá provozní tvar; oba v pohodě běží na vanilla containerd podu s
RuntimeDefault. - MCP servery, kde pluginy třetích stran volají shell, parsují uživatelský vstup a mohou běžet ve stejném podu jako samotný model. Každý, kdo stavěl agent runtimy, které perzistují stav, ví, jak tenká je hranice důvěry.
- CI/CD runnery buildící ML obrazy, které stahují libovolné artefakty HuggingFace a spouštějí
pip installz nedůvěryhodných zdrojů, vše pod UID runneru. - Agent platformy, kde je podle definice kód agenta řízen uživatelem za běhu. Pokud provozujete platformy pro nasazení agentů, každý plugin a nástrojové rozšíření je v ohrožení.
- GPU uzly, typicky výkonné, víceuživatelské a často provozované s uvolněnými bezpečnostními profily kvůli přístupu ke CUDA/ovladačům. Jsou to zároveň vaše nejdražší stroje. Týmy spouštějící LLM lokálně na sdílených GPU sestavách jsou zjevný cíl.
Konkrétní příklad: uživatel nahraje LoRA adaptér, který obsahuje requirements.txt se škodlivým balíčkem. pip install běží pod UID inferenčního kontejneru. Tento kontejner, i na PSS Restricted s RuntimeDefault, může zavolat socket(AF_ALG, ...) a spustit Copy Fail. Právě jste přišli o hostitele. Každý další pod sdílející tento uzel je teď v zóně dopadu.
60minutový pohotovostní plán opravy
Opravte Copy Fail za 60 minut tím, že projdete pět fází v pořadí: Freeze (5 min, pozastavit auto-deploye, snapshotovat logy), Detect (10 min, uname -r a lsmod na uzel), Mitigate (15 min, blacklist modprobe plus seccomp profil), Patch (20 min, aktualizace jádra distribuce plus rolling reboot) a Verify (10 min, potvrdit prázdný lsmod a uname -r odpovídající opravené verzi).
Cílem je opraveno, ověřeno a zpět v provozu za méně než hodinu. Rozdělili jsme to do pěti těsných fází.
Fáze 1 — Freeze (0:00–0:05)
Pozastavte auto-deploye, snapshotujte logy, odložte apt upgrade/dnf update, dokud nezaznamenáte aktuální stav.
# 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/nullFáze 2 — Detect (0:05–0:15)
Spusťte 4příkazový triage z předchozí H2 proti každému hostiteli. Pro Kubernetes tento jednořádek spustí uname -r na každém uzlu:
for node in $(kubectl get nodes -o name); do
echo "=== $node ==="
kubectl debug $node -it --image=busybox -- chroot /host uname -r 2>/dev/null
donePublikované Falco pravidlo od Sysdig (Unexpected AF_ALG Socket Creation) také stojí za nasazení, pokud ho ještě nemáte. Spustí se v okamžiku, kdy skončí fáze 3, pokud se o to ještě něco pokouší.
Fáze 3 — Mitigate (0:15–0:30)
Zakažte algif_aead. Toto je sekvence algif_aead disable; je bez restartu a aplikuje se za sekundy.
# 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"Také nasaďte copy fail seccomp profil z H2 #7 do adresáře seccomp vašeho kubelet hned teď. Nečekejte na fázi 4.
Fáze 4 — Patch (0:30–0:50)
Aplikujte patche distribuce. Tabulka pro jednotlivé distribuce níže má jednořádek pro každou distribuci. Pro Kubernetes je drain-cordon-uncordon bezpečný vzor:
# 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 $NODEV našich testovacích bězích trvala sekvence modprobe + rmmod ~8 sekund na uzel; instalace jádra + restart trvala 3–5 minut na uzel podle distribuce. Počítejte s tím napříč vaším fleetem.
Fáze 5 — Verify (0:50–1:00)
Znovu spusťte triage. Potvrďte, že lsmod | grep algif_aead vrací prázdný výsledek, uname -r odpovídá opravené verzi a kubectl get nodes ukazuje každý uzel Ready na novém kernelu.
# 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}'Upřímná výhrada: pokud nemůžete restartovat v příštích 60 minutách (kompliance změnová okna, zákaznické SLA), kombinace blacklistu modprobe a seccomp profilu postačí, dokud nemůžete patchovat. Obojí se aplikuje bez restartu. Naplánujte instalaci jádra na příští údržbové okno a mezitím jste trvale zmírněni.
Příkazy patchů pro jednotlivé distribuce
Opravené verze jádra: 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. Spusťte aktualizační příkaz pro danou distribuci a pak restartujte.
| Distribuce | Postižené verze | Opravená verze | Příkaz patche (pak restart) | Advisory |
|---|---|---|---|---|
| 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 |
Dvě poznámky specifické pro distribuce, které stojí za vytažení:
- RHEL. Pokud
dnf update kernelneukazuje nic novějšího, spusťtesubscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpmsa zkuste to znovu. Základní repo RHEL 9 nese opravený build jako první. - SUSE.
zypper update kernel-defaultje správný balíček na SLE 15 SP6 s výchozím flavor jádra; přepněte nakernel-azurenebokernel-rt, pokud jste na těchto flavorech. Po aktualizaci ověřte pomocízypper info kernel-default.
Pro příkaz patche copy fail ubuntu je jednořádek výše oficiální cesta doporučená Canonical; stránka USN odkazuje stejný meta-balíček linux-image-generic napříč stacky HWE i GA.
Kubernetes a kontejnerová mitigace: Proč RuntimeDefault nestačí
Kubernetes Pod Security Standards Restricted s seccompProfile.type: RuntimeDefault neblokuje socket(AF_ALG, ...). Chcete-li zastavit Copy Fail na kontejnerové vrstvě, nasaďte Localhost seccomp profil, který explicitně zamítá rodinu socketů AF_ALG, nebo použijte upstream containerd seccomp profil z moby/moby PR #52501, jakmile bude vydán pro váš runtime.
Localhost profil, který opravuje copy fail kubernetes mitigaci, se dodává ve čtyřech částech: JSON seccomp profil, úryvek pod-spec, který jej používá, vzor DaemonSetu pro jednotlivé cloudy pro jeho rollout a ověřovací příkaz. Vložte JSON níže do /var/lib/kubelet/seccomp/profiles/copy-fail.json na každém uzlu:
{
"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"
}
]
}Pak do něj přihlaste každý workload přes 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.jsonPro cloudově spravovaný Kubernetes funguje vzor DaemonSetu na všech pěti hlavních poskytovatelích. Zde je matice AKS copy fail / EKS copy fail mitigace:
| Poskytovatel | Cesta profilu | Mechanismus distribuce | Výhrada |
|---|---|---|---|
| AKS (Azure) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet zapisuje soubor přes hostPath; kubelet jej načte. Viz Azure/AKS#5753. | Použijte obraz uzlů založený na Mariner pro rychlejší in-tree patch |
| EKS (AWS) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet + EKS-optimalizované AMI 1.30+ | Bottlerocket dostane patch jádra přes auto-update; Amazon Linux 2023 potřebuje dnf update kernel |
| GKE (Google) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet funguje ve standardním režimu; Autopilot zakazuje hostPath, použijte NodeConfig | COS-117+ dodává opravený kernel |
| OVHcloud MKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet, dle OVHcloud Copy Fail blogu | OVH publikuje managed refresh obrazu uzlů v 7denním cyklu |
| DigitalOcean DOKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet; obrazy uzlů DO se auto-aktualizují při příštím rollu poolu | Pro patch jádra je nutný roll poolu, DaemonSet pokrývá mezeru |
Jednoduchý DaemonSet, který profil umístí na místo, když nasazujete inferenční workloady napříč spravovaným Kubernetes:
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 }Ověřte, že dorazil:
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5Localhost profil jsme nasadili přes DaemonSet na 5uzlovém AKS clusteru. Kubelet jej načetl do 30 sekund bez restartu uzlu a testovací pod, který volal socket(AF_ALG, ...), okamžitě dostal EPERM.
Upřímná výhrada: pokud provozujete managed K8s službu, která nezpřístupňuje adresář seccomp kubelet (některé serverless K8s nabídky jej skrývají), blacklist modprobe na každé šabloně uzlu je vaše jediná cesta. Zapečte blacklist do obrazu uzlu, znovu nasaďte pool uzlů a ověřte pomocí kubectl debug.
Detekce: Jak poznat, že jste už byli zneužiti
Grepujte /var/log/auth.log a journalctl -u containerd kvůli neočekávaným syscallům socket(AF_ALG, ...) za posledních 30 dní. Zkontrolujte nové setuid binárky pomocí find / -perm -4000 -newer /etc/shadow -mtime -30. Sysdig publikuje Falco pravidlo (Unexpected AF_ALG Socket Creation); Microsoft Defender XDR dodává signaturu 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-rulesPokud najdete zásah (novou setuid binárku, kterou jste nenasadili, nebo událost načtení algif_aead jádra spojenou s neočekávaným uživatelem), berte to jako potvrzenou kompromitaci. Rotujte přihlašovací údaje, izolujte hostitele, eskalujte na tým reakce na incidenty a zvažte, zda nezačalo běžet 72hodinové notifikační okno GDPR. Cena přehnané reakce je údržbové okno; cena nedostatečné reakce je příštích 18 měsíců vaší kariéry.
Hardening: Jak přežít příští CVE jádra bez požárního cvičení
Copy Fail nebude poslední CVE jádra, které porazí RuntimeDefault. Šest věcí, které můžete udělat tento kvartál, aby příští byla méně bolestivá:
- Minimální plocha modulů jádra. Blacklistujte
algif_*,bluetooth,dccp,tipc,sctp,cifs, pokud je nepoužíváte. Většina workloadů je nepoužívá. - Default-deny seccomp na každém workloadu. Udělejte z Localhost profilů normu.
RuntimeDefaultje podlaha, ne strop. - Obnovování uzlů založené na obraze (Talos Linux, Bottlerocket, Flatcar). Atomické restarty, neměnný kernel, bezbolestný rollback.
- Runtime monitoring. Falco nebo Tetragon zachytávající neočekávané syscally v reálném čase. Spárujte s runtime observabilitou pro AI workloady, kde je plocha syscallů širší.
- Krátkodobé události načtení kernel-mod alertující ve vašem SIEM. Pokud se
algif_aeadněkdy načte na produkčním hostiteli, který jej nepotřebuje, chcete to vědět za sekundy. - Připněte verze K8s a obrazy uzlů na baseline, který aktivně bezpečnostně sledujete. Plovoucí tagy jsou budoucí incident čekající na to, až se stane.
To je lekce, kterou nás Copy Fail učí, než dorazí další. Týmy, které zvládnou příští zero-day za 30 minut místo 60, jsou ty, které už těchto šest kontrol odeslaly.
Často kladené otázky
Jsem postižený Copy Fail (CVE-2026-31431)?
Téměř jistě ano, pokud provozujete jakoukoli hlavní linuxovou distribuci na kernelu vydaném před 1. květnem 2026 a umožňujete neprivilegovaný přístup k shellu. To zahrnuje každý víceuživatelský stroj, každý Kubernetes worker a každý CI runner. Spusťte uname -r a zkontrolujte proti tabulce opravených verzí výše. CVSS je 7,8.
Je můj Kubernetes cluster zranitelný i s PSS Restricted?
Ano. Pod Security Standards Restricted s seccompProfile.type: RuntimeDefault neblokuje socket(AF_ALG, ...). Juliet.sh to přímo otestoval: pod běžící s PSS Restricted plus RuntimeDefault prorazil kernel hostitele přes Copy Fail. Potřebujete Localhost seccomp profil (poskytnutý v sekci K8s mitigace výše).
Blokuje Docker Desktop Copy Fail?
Výchozí seccomp profil Docker Desktop již zamítá mnoho syscallů, ale neblokoval AF_ALG, dokud nepřistál moby/moby PR #52501. Aktualizujte Docker na vydání, které zahrnuje opravený profil (backport Docker 29.x), nebo aplikujte seccomp profil ručně. Linuxové instalace Dockeru bez této aktualizace zůstávají vystavené.
Zastaví to seccomp RuntimeDefault?
Ne. RuntimeDefault je neupravený profil container runtime (výchozí Docker/containerd). Povoluje socket(AF_ALG, ...), protože legitimní workloady občas používají kryptografické API jádra. Opravou je Localhost profil, který explicitně zamítá AF_ALG (plný JSON v sekci K8s), nebo upgrade na výchozí profil moby/moby PR #52501.
Co když teď nemohu restartovat kernel?
Blacklist modprobe plus Localhost seccomp profil zamítající socket(AF_ALG, ...) postačí, dokud nemůžete patchovat. Obojí se aplikuje bez restartu. Přidejte blacklist algif_aead do /etc/modprobe.d/copy-fail.conf, spusťte rmmod algif_aead, nasaďte seccomp profil a restartujte při příštím údržbovém okně.
Je Copy Fail zneužíván v divočině?
K 5. květnu 2026 příspěvek threat intelligence Microsoftu nepotvrzuje zneužívání v divočině, ale charakterizuje chybu jako „triviálně zbraňovatelnou" vzhledem k publikovanému 732bajtovému exploitu Xint. Třída primitiv exploitu (zápis do page cache přes splice) se překrývá s Dirty Pipe (CVE-2022-0847), který byl široce zneužíván během týdnů po zveřejnění.
Ovlivňuje Copy Fail konkrétně AI/ML workloady?
Ano, nepřiměřeně. Vlastní hostovaná inference (vLLM, sglang, Ollama), agent runtimy, MCP servery a CI buildy ML obrazů rutinně spouštějí nedůvěryhodný uživatelský kód. Kterýkoli z nich v kontejneru, i na PSS Restricted, může spustit Copy Fail a prorazit hostitele. GPU uzly jsou nejrizikovější profil, protože jsou typicky víceuživatelské.
Jak se Copy Fail liší od Dirty Pipe?
Oba jsou linuxové LPE jádra vytvářející libovolné zápisy do page cache, ale spouštěcí plocha se liší: Dirty Pipe zneužíval splice() do roury, Copy Fail zneužívá splice() do socketu algif_aead (AF_ALG). Oba obcházejí standardní výchozí seccomp kontejneru. Zvrat Copy Fail: cesta AF_ALG je dosažitelná z Pod Security Standards Restricted s RuntimeDefault.
Shrnutí
Copy Fail je opravitelný zhruba za 60 minut, pokud projdete playbook od začátku do konce: blacklist modprobe, aktualizace jádra, seccomp profil, ověření. Úhel Kubernetes a AI infrastruktury je to, co dělá toto CVE odlišným od rutinního LPE: PSS Restricted s RuntimeDefault vás nezachrání a jediný kompromitovaný inferenční pod může prorazit hostitele. Blacklist modprobe plus Localhost seccomp profil je trvalá obrana i poté, co patchujete.
Chcete druhý pár očí na váš runbook reakce na incidenty, nebo hardenovaný K8s baseline, než dorazí příští CVE jádra? Spojte se s Techsy. Provozujeme hardening platforem pro produkční AI/ML stacky.
Naposledy aktualizováno 2026-05-05. Příspěvek překontrolujeme kvůli novým advisory distribucí 2026-05-12.