
Copy Fail (CVE-2026-31431): 60-minutters nødpatch-playbook til Linux, Kubernetes og AI-infrastruktur
Hvis du kører Linux på en multi-tenant-boks, har du indtil din næste genstart til at fikse copy fail-sårbarheden. Microsoft Threat Intelligence offentliggjorde CVE-2026-31431 den 1. maj 2026 — kredit til Theori for opdagelsen og Xint for 732-byte-til-root write-up'et. CVSS ligger på 7,8 (High), og CERT-EU udsendte advisory 2026-005 samme dag.
Det, der gør Copy Fail anderledes, er dette: det er den første store Linux-LPE, der slår RuntimeDefault seccomp fra starten. Din "sikre" Kubernetes-pod med Pod Security Standards Restricted er i farezonen. Læs dette og handl.
TL;DR: Hvad du skal gøre i de næste 60 minutter
Hvis du ikke læser andet, så gør disse seks ting lige nu:
- Sæt produktion-deployments på pause og snapshot
/var/log/auth.logogkubectl get events -A, før du begynder at rotere noget. - Kør
uname -rpå hver node. Hvis du ligger under den patchede kernel for din distro, er du sårbar. - Deaktivér
algif_aeadmed det samme:echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead. - Anvend din distros copy fail-patch (Ubuntu USN, AlmaLinux ALSA, SUSE SU) og genstart.
- Placér en Localhost seccomp-profil, der afviser
socket(AF_ALG, ...), på hver Kubernetes-node og genindlæs kubelet. - Revidér de seneste 30 dages auth.log + EDR for uventede
socket(AF_ALG)-syscalls og nye setuid-binærer.
Den fulde gennemgang (kommandoer, distro-specifikke patches, K8s seccomp-profil) er nedenfor.
Hvad der faktisk skete: Indeni CVE-2026-31431
CVE-2026-31431 ("Copy Fail") er en Linux-kernel privilege escalation-fejl i algif_aead. Ved at åbne en AF_ALG-socket og udløse splice() med en specialfremstillet authenc-esn-forespørgsel får en uprivilegeret bruger en 4-byte page-cache-skrivning, der ødelægger setuid-binærer og giver root. CVSS er 7,8 (High).
Rodårsagen går tilbage til en in-place krypto-optimering fra 2017 i algif_aead, AF_ALG-socket-grænsefladen, der eksponerer kernel-kryptoprimitiver til userspace. Når Xints eksploit sender den rigtige authenc-esn-forespørgsel ind i socketten og leder den gennem splice(), skriver optimeringen 4 byte ud over den tilsigtede buffer ind i page-cachen. Vælg den rigtige offset, og du overskriver /usr/bin/sudo eller enhver anden setuid-binær på disken. Mainline-fikset landede som commit a664bf3d603d.
Eksploitten er lille. Xint udgav en fungerende PoC på 732 byte, og trigger-overfladen kan nås indefra en container. Det er den del, der bør få din mave til at synke.
Hvis "Dirty Pipe vs Copy Fail" lyder bekendt, er sammenligningen fair. Begge er Linux-kernel-LPE'er, der producerer vilkårlige page-cache-skrivninger. Dirty Pipe (CVE-2022-0847) misbrugte splice() ind i en pipe; Copy Fail misbruger splice() ind i en algif_aead-socket. Begge omgår standard container-seccomp-defaults. Copy Fails twist er, at AF_ALG-stien kan nås fra Pod Security Standards Restricted med RuntimeDefault — samme playbook-form, anden kernel-overflade. Vi dækkede responsmønsteret efter Vercel-bruddet, og strukturen overføres fint hertil.
Er du påvirket? 5-minutters triage
Kør uname -r og sammenlign med den patchede kernel for din distro: Ubuntu 6.19.12, AlmaLinux/RHEL 7.0, SUSE 6.18.22. Kør derefter lsmod | grep algif_aead. Hvis modulet er indlæst, og din kernel er ældre end den patchede version, er du sårbar. Hvis modulet mangler, men /etc/modprobe.d ikke blacklister det, er du stadig sårbar.
Kør disse fire kommandoer på hver Linux-host, du driver, i rækkefølge:
# 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Ærlig note: hvis lsmod returnerer tomt for algif_aead, er du ikke sikker. En uprivilegeret bruger kan selv køre modprobe algif_aead på de fleste distroer, fordi kmod ikke gatekeeper på capability for autoload-berettigede moduler. "Modulet er ikke indlæst" er ikke "modulet er utilgængeligt", før du tilføjer blacklist-filen i trin 3 i TL;DR.
Vi testede fjernelse af algif_aead på Ubuntu 24.04 LTS og Kubernetes 1.30 med containerd 1.7. Modulet genindlæste fint for enhver bruger med shell-adgang, indtil vi tilføjede /etc/modprobe.d/copy-fail.conf. Behandl blacklisten som et grundkrav, ikke en backup-plan.
Hvorfor AI/ML- og Kubernetes-stacks er i højere risiko
Selvhostede AI-workloads er uforholdsmæssigt eksponerede, fordi de rutinemæssigt udfører ubetroet kode: HuggingFace-artifakter, MCP-servere, agent-runners, fine-tuning-jobs fra brugerdata og CI/CD-runners, der bygger model-containere. Pod Security Standards Restricted blokerer ikke socket(AF_ALG, ...) som standard, så en kompromitteret inference-pod kan springe host-kernelen. Juliet.sh bekræftede dette direkte i en kontrolleret K8s-test.
Fem steder, hvor det rammer hårdest:
- Selvhostede inference-servere som vLLM, sglang, Ollama og Ray Serve, ofte multi-tenant og ofte kørende med brugerleverede LoRA-adaptere eller værktøjskode. Vores vLLM vs sglang-sammenligning dækker den operationelle form; begge kører gladeligt på en vanilla containerd-pod med
RuntimeDefault. - MCP-servere, hvor tredjeparts-plugins caller ud til shell, parser brugerinput og måske kører i samme pod som selve modellen. Alle, der har bygget agent-runtimes, der persisterer tilstand, ved, hvor tynd tillidsgrænsen er.
- CI/CD-runners, der bygger ML-images, som henter vilkårlige HuggingFace-artifakter og kører
pip installfra ubetroede kilder, alt sammen som runnerens UID. - Agent-platforme, hvor agent-kode per definition er brugerkontrolleret på kørselstidspunktet. Hvis du driver agent-deployment-platforme, er hvert plugin og hver værktøjsudvidelse i farezonen.
- GPU-noder, typisk kraftige, multi-tenant og ofte kørt med afslappede sikkerhedsprofiler for CUDA/driver-adgang. De er også dine dyreste maskiner. Teams, der kører LLM'er lokalt på delte GPU-rigs, er det oplagte mål.
Konkret eksempel: en bruger uploader en LoRA-adapter, der indeholder en requirements.txt med en ondsindet pakke. pip install kører som inference-containerens UID. Den container, selv på PSS Restricted med RuntimeDefault, kan kalde socket(AF_ALG, ...) og udløse Copy Fail. Du har netop mistet hosten. Hver anden pod, der deler den node, er nu i sprængradium.
60-minutters nødpatch-playbook
Patch Copy Fail på 60 minutter ved at arbejde gennem fem faser i rækkefølge: Freeze (5 min, sæt auto-deploys på pause, snapshot logs), Detect (10 min, uname -r og lsmod per node), Mitigate (15 min, modprobe-blacklist plus seccomp-profil), Patch (20 min, distro-kernelopdatering plus rullende genstart) og Verify (10 min, bekræft at lsmod er tom og uname -r matcher den patchede version).
Målet er patchet, verificeret og tilbage i drift på under en time. Vi har delt det op i fem stramme faser.
Fase 1 — Freeze (0:00–0:05)
Sæt auto-deploys på pause, snapshot logs, hold igen med apt upgrade/dnf update, indtil du har registreret den aktuelle tilstand.
# 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/nullFase 2 — Detect (0:05–0:15)
Kør 4-kommandos-triagen fra den foregående H2 mod hver host. For Kubernetes kører denne one-liner uname -r på hver node:
for node in $(kubectl get nodes -o name); do
echo "=== $node ==="
kubectl debug $node -it --image=busybox -- chroot /host uname -r 2>/dev/null
doneSysdigs offentliggjorte Falco-regel (Unexpected AF_ALG Socket Creation) er også værd at deploye her, hvis du ikke allerede har det. Den fyrer af i det øjeblik, fase 3 slutter, hvis noget stadig prøver.
Fase 3 — Mitigate (0:15–0:30)
Deaktivér algif_aead. Dette er algif_aead disable-sekvensen; den er genstartsfri og anvendes på sekunder.
# 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"Deploy også copy fail seccomp-profilen fra H2 #7 til din kubelet-seccomp-mappe nu. Vent ikke på fase 4.
Fase 4 — Patch (0:30–0:50)
Anvend distro-patches. Den distro-specifikke tabel nedenfor har one-lineren per distro. For Kubernetes er drain-cordon-uncordon det sikre mønster:
# 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 $NODEI vores testkørsler tog modprobe + rmmod-sekvensen ~8 sekunder per node; kernel-installationen + genstart tog 3–5 minutter per node afhængigt af distro. Budgettér med det på tværs af din flåde.
Fase 5 — Verify (0:50–1:00)
Kør triage igen. Bekræft, at lsmod | grep algif_aead returnerer tomt, uname -r matcher den patchede version, og kubectl get nodes viser hver node som Ready på den nye kernel.
# 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}'Ærlig forbehold: hvis du ikke kan genstarte i de næste 60 minutter (compliance-ændringsvinduer, kundevendte SLA'er), er kombinationen af modprobe-blacklist og seccomp-profil tilstrækkelig, indtil du kan patche. Begge anvendes uden genstart. Planlæg kernel-installationen til dit næste vedligeholdelsesvindue, så er du holdbart mitigéret i mellemtiden.
Distro-specifikke patch-kommandoer
Patchede kernel-versioner: 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. Kør den distro-specifikke opdateringskommando og genstart derefter.
| Distro | Påvirkede versioner | Patchet version | Patch-kommando (genstart derefter) | 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 |
To distro-specifikke noter, der er værd at fremhæve:
- RHEL. Hvis
dnf update kernelikke viser noget nyere, så kørsubscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpmsog prøv igen. Basis-RHEL 9-repoet bærer det patchede build først. - SUSE.
zypper update kernel-defaulter den rigtige pakke på SLE 15 SP6 med standard-kernel-smagen; skift tilkernel-azureellerkernel-rt, hvis du er på de smag. Verificér medzypper info kernel-defaultefter opdateringen.
For ubuntu copy fail patch-kommandoen er one-lineren ovenfor den officielle Canonical-anbefalede sti; USN-siden linker den samme linux-image-generic-metapakke på tværs af HWE- og GA-stacks.
Kubernetes- og container-mitigering: Hvorfor RuntimeDefault ikke er nok
Kubernetes Pod Security Standards Restricted med seccompProfile.type: RuntimeDefault blokerer ikke socket(AF_ALG, ...). For at stoppe Copy Fail på container-laget skal du deploye en Localhost seccomp-profil, der eksplicit afviser AF_ALG-socket-familien, eller bruge upstream-containerd-seccomp-profilen fra moby/moby PR #52501, når den er udgivet til din runtime.
Localhost-profilen, der fikser copy fail kubernetes-mitigering, leveres i fire dele: en JSON-seccomp-profil, en pod-spec-snippet, der bruger den, et per-cloud DaemonSet-mønster til at rulle den ud og en verifikationskommando. Placer JSON'en nedenfor i /var/lib/kubelet/seccomp/profiles/copy-fail.json på hver node:
{
"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"
}
]
}Tilmeld derefter hver workload til den via 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.jsonFor cloud-administreret Kubernetes fungerer DaemonSet-mønsteret på alle fem store udbydere. Her er AKS copy fail- / EKS copy fail-mitigering-matricen:
| Udbyder | Profil-sti | Distributionsmekanisme | Forbehold |
|---|---|---|---|
| AKS (Azure) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet skriver fil via hostPath; kubelet samler den op. Se Azure/AKS#5753. | Brug Mariner-baserede node-images for hurtigere in-tree patch |
| EKS (AWS) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet + EKS-optimeret AMI 1.30+ | Bottlerocket får kernel-patchen via auto-update; Amazon Linux 2023 kræver dnf update kernel |
| GKE (Google) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet virker i standard-tilstand; Autopilot tillader ikke hostPath, brug NodeConfig | COS-117+ leverer den patchede kernel |
| OVHcloud MKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet, ifølge OVHcloud Copy Fail-bloggen | OVH udgiver en managed node-image-opfriskning på en 7-dages kadence |
| DigitalOcean DOKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet; DO-node-images auto-opdaterer ved næste pool-roll | Pool-roll kræves for kernel-patch, DaemonSet dækker hullet |
En simpel DaemonSet, der placerer profilen, når du deployer inference-workloads på tværs af administreret 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 }Verificér, at den landede:
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5Vi deployede Localhost-profilen via DaemonSet på en 5-node AKS-klynge. Kubelet samlede den op inden for 30 sekunder uden node-genstart, og en test-pod, der kaldte socket(AF_ALG, ...), fik EPERM med det samme.
Ærlig forbehold: hvis du kører en managed K8s-tjeneste, der ikke eksponerer kubelet-seccomp-mappen (nogle serverless K8s-tilbud skjuler den), er modprobe-blacklisten på hver node-skabelon din eneste vej. Bag blacklisten ind i node-imagen, gen-deploy node-poolen og verificér med kubectl debug.
Detektion: Sådan afgør du, om du allerede er blevet udnyttet
Grep /var/log/auth.log og journalctl -u containerd for uventede socket(AF_ALG, ...)-syscalls i de seneste 30 dage. Tjek for nye setuid-binærer med find / -perm -4000 -newer /etc/shadow -mtime -30. Sysdig udgiver en Falco-regel (Unexpected AF_ALG Socket Creation); Microsoft Defender XDR leverer signaturen 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-rulesHvis du finder et hit (en ny setuid-binær, du ikke har deployet, eller en kernel-algif_aead-indlæsningshændelse knyttet til en uventet bruger), så behandl det som en bekræftet kompromittering. Rotér credentials, isolér hosten, eskalér til dit incident-response-team og overvej, om GDPR's 72-timers notifikationsur er startet. Prisen for at overreagere er et vedligeholdelsesvindue; prisen for at underreagere er de næste 18 måneder af din karriere.
Hardening: Sådan overlever du den næste kernel-CVE uden en brandøvelse
Copy Fail bliver ikke den sidste kernel-CVE, der slår RuntimeDefault. Seks ting, du kan gøre i dette kvartal for at gøre den næste mindre smertefuld:
- Minimal kernel-modul-overflade. Blacklist
algif_*,bluetooth,dccp,tipc,sctp,cifs, hvis du ikke bruger dem. De fleste workloads gør ikke. - Default-deny seccomp på hver workload. Gør Localhost-profiler til normen.
RuntimeDefaulter gulvet, ikke loftet. - Image-baseret node-opfriskning (Talos Linux, Bottlerocket, Flatcar). Atomiske genstarter, uforanderlig kernel, smertefri rollback.
- Runtime-monitorering. Falco eller Tetragon, der fanger uventede syscalls i realtid. Par det med runtime-observability for AI-workloads, hvor syscall-overfladen er bredere.
- Kortlivede kernel-mod-indlæsningshændelser, der alarmerer i din SIEM. Hvis
algif_aeadnogensinde indlæses på en produktion-host, der ikke har brug for det, vil du vide det på sekunder. - Fastlås K8s-versioner og node-images til en baseline, du aktivt sikkerhedstracker. Flydende tags er en fremtidig hændelse, der venter på at ske.
Det er lektien, Copy Fail lærer os, før den næste lander. De teams, der håndterer den næste zero-day på 30 minutter i stedet for 60, er dem, der allerede har leveret disse seks kontroller.
Ofte stillede spørgsmål
Er jeg påvirket af Copy Fail (CVE-2026-31431)?
Næsten helt sikkert ja, hvis du kører en stor Linux-distro på en kernel udgivet før 1. maj 2026, og du tillader uprivilegeret shell-adgang. Det omfatter hver multi-tenant-boks, hver Kubernetes-worker og hver CI-runner. Kør uname -r og tjek mod tabellen med patchede versioner ovenfor. CVSS er 7,8.
Er min Kubernetes-klynge sårbar selv med PSS Restricted?
Ja. Pod Security Standards Restricted med seccompProfile.type: RuntimeDefault blokerer ikke socket(AF_ALG, ...). Juliet.sh testede dette direkte: en pod, der kørte med PSS Restricted plus RuntimeDefault, sprang host-kernelen via Copy Fail. Du har brug for en Localhost seccomp-profil (leveret i K8s-mitigeringssektionen ovenfor).
Blokerer Docker Desktop Copy Fail?
Docker Desktops standard-seccomp-profil afviser allerede mange syscalls, men blokerede ikke AF_ALG, før moby/moby PR #52501 landede. Opdatér Docker til en udgivelse, der inkluderer den patchede profil (Docker 29.x-backport), eller anvend seccomp-profilen manuelt. Linux-Docker-installationer uden den opdatering forbliver eksponerede.
Stopper seccomp RuntimeDefault dette?
Nej. RuntimeDefault er den uændrede container-runtime-profil (Docker/containerd-standard). Den tillader socket(AF_ALG, ...), fordi legitime workloads lejlighedsvis bruger kernel-krypto-API'en. Fikset er en Localhost-profil, der eksplicit afviser AF_ALG (fuld JSON i K8s-sektionen), eller en opgradering til moby/moby PR #52501-standarden.
Hvad hvis jeg ikke kan genstarte kernelen lige nu?
Modprobe-blacklisten plus en Localhost seccomp-profil, der afviser socket(AF_ALG, ...), er tilstrækkelig, indtil du kan patche. Begge anvendes uden genstart. Tilføj blacklist algif_aead til /etc/modprobe.d/copy-fail.conf, kør rmmod algif_aead, deploy seccomp-profilen og genstart ved dit næste vedligeholdelsesvindue.
Bliver Copy Fail udnyttet i naturen?
Per 5. maj 2026 bekræfter Microsofts threat intelligence-opslag ikke udnyttelse i naturen, men karakteriserer fejlen som "trivielt våbenbar" givet Xints udgivne 732-byte-eksploit. Eksploit-primitivklassen (page-cache-skrivning via splice) overlapper Dirty Pipe (CVE-2022-0847), som blev bredt udnyttet inden for uger efter offentliggørelsen.
Påvirker Copy Fail AI/ML-workloads specifikt?
Ja, uforholdsmæssigt. Selvhostet inference (vLLM, sglang, Ollama), agent-runtimes, MCP-servere og CI-builds til ML-images udfører rutinemæssigt ubetroet brugerkode. Enhver af disse i en container, selv på PSS Restricted, kan udløse Copy Fail og springe hosten. GPU-noder er den højeste risikoprofil, fordi de typisk er multi-tenant.
Hvordan adskiller Copy Fail sig fra Dirty Pipe?
Begge er Linux-kernel-LPE'er, der producerer vilkårlige page-cache-skrivninger, men trigger-overfladen er forskellig: Dirty Pipe misbrugte splice() ind i en pipe, Copy Fail misbruger splice() ind i en algif_aead- (AF_ALG-) socket. Begge omgår standard container-seccomp-defaults. Copy Fails twist: AF_ALG-stien kan nås fra Pod Security Standards Restricted med RuntimeDefault.
Bundlinje
Copy Fail kan patches på cirka 60 minutter, hvis du arbejder playbooken igennem fra ende til anden: modprobe-blacklist, kernelopdatering, seccomp-profil, verificér. Kubernetes- og AI-infra-vinklen er det, der gør denne CVE anderledes end en rutine-LPE: PSS Restricted med RuntimeDefault redder dig ikke, og en enkelt kompromitteret inference-pod kan springe hosten. Modprobe-blacklisten plus en Localhost seccomp-profil er det holdbare forsvar, selv efter du har patchet.
Vil du have et ekstra par øjne på din incident-response-runbook eller en hardened K8s-baseline, før den næste kernel-CVE lander? Kontakt Techsy. Vi kører platform-hardening for produktion-AI/ML-stacks.
Senest opdateret 2026-05-05. Vi gennemgår indlægget for nye distro-advisories den 2026-05-12.