
Copy Fail (CVE-2026-31431): Ghidul de urgență pentru patch-uri în 60 de minute pentru Linux, Kubernetes și infrastructura AI
Dacă rulați Linux pe un server multi-chiriat, aveți timp până la următorul restart pentru a remedia vulnerabilitatea copy fail. Microsoft Threat Intelligence a dezvăluit CVE-2026-31431 pe 1 mai 2026 — meritele descoperirii revin echipei Theori, iar Xint a publicat analiza tehnică „732-bytes-to-root”. Scorul CVSS este 7.8 (Ridicat), iar CERT-EU a emis avizul 2026-005 în aceeași zi.
Iată ce face Copy Fail diferit: este prima vulnerabilitate majoră de escaladare a privilegiilor (LPE) în Linux care învinge seccomp RuntimeDefault din start. Pod-ul dvs. „sigur” de Kubernetes, cu Standardele de Securitate a Pod-urilor (PSS) setate pe Restricted, este vizat. Citiți acest articol și acționați.
TL;DR: Ce trebuie să faceți în următoarele 60 de minute
Dacă nu citiți nimic altceva, faceți aceste șase lucruri chiar acum:
- Întrerupeți implementările în producție și creați o copie de siguranță (snapshot) a fișierelor
/var/log/auth.logși a rezultatului comenziikubectl get events -Aînainte de a începe rotirea oricăror componente. - Rulați
uname -rpe fiecare nod. Dacă versiunea kernel-ului este mai mică decât cea patch-uită pentru distribuția dvs., sunteți vulnerabil. - Dezactivați imediat
algif_aead:echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead. - Aplicați patch-ul copy fail specific distribuției dvs. (Ubuntu USN, AlmaLinux ALSA, SUSE SU) și reporniți sistemul.
- Implementați un profil seccomp Localhost care interzice
socket(AF_ALG, ...)pe fiecare nod Kubernetes și reîncărcați kubelet. - Auditați ultimele 30 de zile din auth.log și soluțiile EDR pentru apeluri de sistem
socket(AF_ALG)neașteptate și orice binare setuid noi.
Analiza detaliată (comenzi, patch-uri specifice distribuțiilor, profil seccomp K8s) se găsește mai jos.
Ce s-a întâmplat de fapt: În interiorul CVE-2026-31431
CVE-2026-31431 („Copy Fail”) este o vulnerabilitate de escaladare a privilegiilor în kernel-ul Linux, situată în modulul algif_aead. Prin deschiderea unui socket AF_ALG și declanșarea funcției splice() cu o cerere authenc-esn special crafted, un utilizator neprivilegiat provoacă o scriere de 4 octeți în cache-ul paginilor, corupând binarele setuid și obținând acces root. Scorul CVSS este 7.8 (Ridicat).
Cauza principală își are originea într-o optimizare crypto in-place din 2017 în algif_aead, interfața socket AF_ALG care expune primitivele criptografice ale kernel-ului spațiului utilizator. Când exploit-ul Xint introduce cererea corectă authenc-esn în socket și o direcționează prin splice(), optimizarea scrie 4 octeți dincolo de buffer-ul intenționat în cache-ul paginilor. Alegeți offset-ul potrivit și rescrieți /usr/bin/sudo sau orice alt binar setuid de pe disc. Fix-ul principal a fost integrat prin commit-ul a664bf3d603d.
Exploit-ul este mic. Xint a publicat un PoC funcțional în doar 732 de octeți, iar suprafața de declanșare este accesibilă din interiorul unui container. Acesta este detaliul care ar trebui să vă îngrijoreze.
Dacă comparația „Dirty Pipe vs Copy Fail” vi se pare familiară, ea este corectă. Ambele sunt vulnerabilități LPE în kernel-ul Linux care produc scrieri arbitrare în cache-ul paginilor. Dirty Pipe (CVE-2022-0847) abuză de splice() într-un pipe; Copy Fail abuzează de splice() într-un socket algif_aead. Ambele ocolesc implicit configurările standard seccomp ale containerelor. Noutatea Copy Fail este că ruta AF_ALG este accesibilă chiar și cu Standardele de Securitate a Pod-urilor Restricted și RuntimeDefault; aceeași structură de răspuns, dar o suprafață diferită în kernel. Am analizat modelul de răspuns după breșa Vercel, iar structura se aplică perfect și aici.
Sunteți afectat? Triajul de 5 minute
Rulați uname -r și comparați cu versiunea kernel-ului patch-uit pentru distribuția dvs.: Ubuntu 6.19.12, AlmaLinux/RHEL 7.0, SUSE 6.18.22. Apoi rulați lsmod | grep algif_aead. Dacă modulul este încărcat și kernel-ul dvs. este mai vechi decât versiunea patch-uită, sunteți vulnerabil. Dacă modulul lipsește, dar /etc/modprobe.d nu îl include în lista neagră, sunteți în continuare vulnerabil.
Rulați aceste patru comenzi pe fiecare gazdă Linux pe care o operați, în ordine:
# 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 wideNotă onestă: dacă lsmod returnează gol pentru algif_aead, nu sunteți în siguranță. Un utilizator neprivilegiat poate rula modprobe algif_aead pe majoritatea distribuțiilor, deoarece kmod nu verifică capabilitățile pentru modulele eligibile pentru încărcare automată. „Modulul descărcat” nu înseamnă „modul inaccesibil” până când nu adăugați fișierul blacklist la pasul 3 din secțiunea TL;DR.
Am testat eliminarea algif_aead pe Ubuntu 24.04 LTS și Kubernetes 1.30 cu containerd 1.7. Modulul s-a reîncărcat fără probleme pentru orice utilizator cu acces shell până când am adăugat /etc/modprobe.d/copy-fail.conf. Tratați lista neagră ca o măsură de bază, nu ca un plan de rezervă.
De ce stivele AI/ML și Kubernetes sunt la risc mai mare
Sarcinile de lucru AI găzduite local (self-hosted) sunt disproporționat expuse deoarece execută în mod rutină cod nesigur: artefacte HuggingFace, servere MCP, runtimere de agenți, job-uri de fine-tuning din datele utilizatorilor și runner-e CI/CD care construiesc containere pentru modele. Standardele de Securitate a Pod-urilor Restricted nu blochează socket(AF_ALG, ...) implicit, astfel încât un pod de inferență compromis poate prelua controlul kernel-ului gazdei. Juliet.sh a confirmat acest lucru direct într-un test K8s controlat.
Cinci zone unde impactul este cel mai puternic:
- Servere de inferență self-hosted precum vLLM, sglang, Ollama și Ray Serve, adesea multi-chiriate și rulând frecvent adaptoare LoRA furnizate de utilizatori sau cod de tool-uri. Comparația noastră vLLM vs sglang acoperă aspectele operaționale; ambele rulează fără probleme pe un pod containerd vanilla cu
RuntimeDefault. - Servere MCP, unde plugin-urile terțe execută comenzi shell, parsează input-ul utilizatorului și pot rula în același pod cu modelul însuși. Oricine a construit runtimere de agenți care persistă starea știe cât de subțire este limita de încredere.
- Runner-e CI/CD care construiesc imagini ML și care preiau artefacte HuggingFace arbitrare și rulează
pip installdin surse nesigure, totul sub UID-ul runner-ului. - Platforme de agenți unde, prin definiție, codul agentului este controlat de utilizator în timpul execuției. Dacă operați platforme de implementare a agenților, fiecare plugin și extensie de tool este vizată.
- Noduri GPU, de obicei puternice, multi-chiriate și adesea rulate cu profile de securitate relaxate pentru acces CUDA/driver. Sunt, de asemenea, cele mai costisitoare mașini pe care le aveți. Echipele care rulează LLM-uri local pe rig-uri GPU partajate sunt ținta obviousă.
Exemplu concret: un utilizator încarcă un adaptor LoRA care include un fișier requirements.txt cu un pachet malițios. pip install rulează sub UID-ul containerului de inferență. acel container, chiar și cu PSS Restricted și RuntimeDefault, poate executa socket(AF_ALG, ...) și declanșa Copy Fail. Tocmai ați pierdut controlul gazdei. Fiecare alt pod care partajează acel nod se află acum în raza de explozie.
Ghidul de urgență pentru patch-uri în 60 de minute
Remediați Copy Fail în 60 de minute lucrând în cinci faze, în ordine: Înghețare (5 min, pauză auto-deploy, snapshot loguri), Detectare (10 min, uname -r și lsmod per nod), Mitigare (15 min, blacklist modprobe plus profil seccomp), Patch (20 min, update kernel distribuție plus reboot rolling) și Verificare (10 min, confirmați lsmod gol și uname -r corespunde versiunii patch-uite).
Obiectivul este să aveți sistemul patch-uit, verificat și revenit în serviciu în moins de o oră. Am împărțit procesul în cinci fase strânse.
Faza 1 — Înghețare (0:00–0:05)
Întrerupeți auto-deploy-urile, creați snapshot-uri ale logurilor, amânați apt upgrade/dnf update până când ați înregistrat starea curentă.
# 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/nullFaza 2 — Detectare (0:05–0:15)
Rulați triajul cu 4 comenzi din secțiunea anterioară H2 pe fiecare gazdă. Pentru Kubernetes, această comandă one-liner rulează uname -r pe fiecare nod:
for node in $(kubectl get nodes -o name); do
echo "=== $node ==="
kubectl debug $node -it --image=busybox -- chroot /host uname -r 2>/dev/null
doneRegula Falco publicată de Sysdig (Unexpected AF_ALG Socket Creation) merită, de asemenea, implementată aici dacă nu ați făcut-o deja. Se va declanșa imediat ce Faza 3 se încheie, dacă ceva încearcă încă să exploateze vulnerabilitatea.
Faza 3 — Mitigare (0:15–0:30)
Dezactivați algif_aead. Aceasta este secvența de dezactivare algif_aead; nu necesită reboot și se aplică în câteva secunde.
# 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"Implementați, de asemenea, profilul seccomp copy fail din H2 #7 în directorul seccomp al kubelet-ului acum. Nu așteptați Faza 4.
Faza 4 — Patch (0:30–0:50)
Aplicați patch-urile distribuției. Tabelul per distribuție de mai jos conține comanda one-liner pentru fiecare. Pentru Kubernetes, modelul sigur este 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În testele noastre, secvența modprobe + rmmod a durat ~8 secunde per nod; instalarea kernel-ului + reboot a durat 3–5 minute per nod, în funcție de distribuție. Alocați timp pentru aceasta în întreaga flotă.
Faza 5 — Verificare (0:50–1:00)
Reluați triajul. Confirmați că lsmod | grep algif_aead returnează gol, uname -r corespunde versiunii patch-uite și kubectl get nodes arată fiecare nod Ready pe noul 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}'Caveat onest: dacă nu puteți reporni în următoarele 60 de minute (ferestre de schimbare conformitate, SLA orientat către client), combinația dintre blacklist modprobe și profilul seccomp este suficientă până când puteți aplica patch-ul. Ambele se aplică fără reboot. Programați instalarea kernel-ului la următoarea fereastră de mentenanță și veți fi mitigat durabil în interimat.
Comenzi de patch per distribuție
Versiuni kernel patch-uite: 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. Rulați comanda de update specifică distribuției, apoi reporniți.
| Distribuție | Versiuni afectate | Versiune patch-uită | Comandă patch (apoi reboot) | Aviz |
|---|---|---|---|---|
| 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 |
Două note specifice distribuțiilor care merită evidențiate:
- RHEL. Dacă
dnf update kernelnu afișează nimic mai nou, rulațisubscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpmsși încercați din nou. Repo-ul de bază RHEL 9 livrează primul build-ul patch-uit. - SUSE.
zypper update kernel-defaulteste pachetul corect pe SLE 15 SP6 cu flavor-ul default de kernel; treceți lakernel-azuresaukernel-rtdacă utilizați acele flavor-uri. Verificați cuzypper info kernel-defaultdupă update.
Pentru comanda ubuntu copy fail patch, one-liner-ul de mai sus este calea oficială recomandată de Canonical; pagina USN indică același meta-pachet linux-image-generic atât pentru stivele HWE, cât și GA.
Mitigare Kubernetes & Container: De ce RuntimeDefault nu este suficient
Standardele de Securitate a Pod-urilor Kubernetes Restricted cu seccompProfile.type: RuntimeDefault nu blochează socket(AF_ALG, ...). Pentru a opri Copy Fail la nivelul containerului, implementați un profil Localhost seccomp care interzice explicit familia de socket-uri AF_ALG sau utilizați profilul seccomp upstream containerd din moby/moby PR #52501 odată ce este lansat pentru runtime-ul dvs.
Profilul Localhost care remediază mitigarea copy fail kubernetes vine în patru părți: un profil seccomp JSON, un snippet pod-spec care îl utilizează, un model DaemonSet per cloud pentru implementare și o comandă de verificare. Plasați JSON-ul de mai jos în /var/lib/kubelet/seccomp/profiles/copy-fail.json pe fiecare nod:
{
"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"
}
]
}Apoi optați pentru utilizarea lui în fiecare workload prin 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.jsonPentru Kubernetes gestionat în cloud, modelul DaemonSet funcționează pe toți cei cinci provideri majori. Iată matricea de mitigare AKS copy fail / EKS copy fail:
| Provider | Cale profil | Mecanism distribuire | Caveat |
|---|---|---|---|
| AKS (Azure) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet scrie fișierul via hostPath; kubelet îl preia. Vezi Azure/AKS#5753. | Utilizați imagini de nod bazate pe Mariner pentru patch-ul in-tree mai rapid |
| EKS (AWS) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet + AMI optimizat EKS 1.30+ | Bottlerocket primește patch-ul kernel prin auto-update; Amazon Linux 2023 necesită dnf update kernel |
| GKE (Google) | /var/lib/kubelet/seccomp/profiles/ | DaemonSet funcționează în modul standard; Autopilot nu permite hostPath, utilizați NodeConfig | COS-117+ livrează kernel-ul patch-uit |
| OVHcloud MKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet, conform blogului OVHcloud Copy Fail | OVH publică o reîmprospătare a imaginii de nod gestionate la un ciclu de 7 zile |
| DigitalOcean DOKS | /var/lib/kubelet/seccomp/profiles/ | DaemonSet; imaginile de nod DO se actualizează automat la următorul roll al pool-ului | Roll-ul pool-ului este necesar pentru patch-ul kernel, DaemonSet acoperă intervalul |
Un DaemonSet simplu care plasează profilul la locul său, atunci când implementați workload-uri de inferență across managed 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 }Verificați dacă a fost implementat:
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5Am implementat profilul Localhost via DaemonSet pe un cluster AKS cu 5 noduri. Kubelet l-a preluat în 30 de secunde fără restart de nod, iar un pod de test care a apelat socket(AF_ALG, ...) a primit EPERM imediat.
Caveat onest: dacă rulați un serviciu K8s gestionat care nu expune directorul seccomp kubelet (unele oferte serverless K8s îl ascund), blacklist-ul modprobe pe fiecare șablon de nod este singura dvs. opțiune. Includeți blacklist-ul în imaginea de nod, reimplementați pool-ul de noduri și verificați cu kubectl debug.
Detectare: Cum să aflați dacă ați fost deja exploatat
Căutați în /var/log/auth.log și journalctl -u containerd apeluri de sistem socket(AF_ALG, ...) neașteptate în ultimele 30 de zile. Verificați existența unor binare setuid noi cu find / -perm -4000 -newer /etc/shadow -mtime -30. Sysdig publică o regulă Falco (Unexpected AF_ALG Socket Creation); Microsoft Defender XDR livrează semnătura 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-rulesDacă găsiți o potrivire (un binar setuid nou pe care nu l-ați implementat sau un eveniment de încărcare kernel algif_aead legat de un utilizator neașteptat), tratați-l ca o compromitere confirmată. Rotiți credențialele, izolați gazda, escaladați către echipa de răspuns la incidente și verificați dacă ceasul de notificare GDPR de 72 de ore a început. Costul reacției excesive este o fereastră de mentenanță; costul reacției insuficiente este următorii 18 ani ai carierei dvs.
Hardening: Cum să supraviețuiți următorului CVE kernel fără panică
Copy Fail nu va fi ultimul CVE kernel care învinge RuntimeDefault. Șase lucruri pe care le puteți face în acest trimestru pentru a face următorul incident mai puțin dureros:
- Suprafață minimă de module kernel. Treceti în blacklist
algif_*,bluetooth,dccp,tipc,sctp,cifsdacă nu le utilizați. Majoritatea workload-urilor nu au nevoie de ele. - Seccomp default-deny pe fiecare workload. Faceți profilurile Localhost norma.
RuntimeDefaulteste pragul minim, nu plafonul. - Reîmprospătarea nodurilor bazată pe imagine (Talos Linux, Bottlerocket, Flatcar). Reboot-uri atomice, kernel imuabil, rollback fără dureri.
- Monitorizare runtime. Falco sau Tetragon prind apeluri de sistem neașteptate în timp real. Combinați-le cu observabilitatea runtime pentru workload-uri AI unde suprafața apelurilor de sistem este mai largă.
- Alertare pentru evenimente scurte de încărcare module kernel în SIEM-ul dvs. Dacă
algif_aeadse încarcă vreodată pe o gazdă de producție care nu are nevoie de el, trebuie să știți în câteva secunde. - Fixați versiunile K8s și imaginile de nod la o linie de bază pe care o monitorizați activ din punct de vedere al securității. Tag-urile flotante sunt un incident viitor care așteaptă să se întâmple.
Aceasta este lecția pe care Copy Fail ne-o oferă înainte ca următorul să apară. Echipele care vor gestiona următorul zero-day în 30 de minute în loc de 60 sunt cele care au implementat deja aceste șase controale.
Întrebări frecvente
Sunt afectat de Copy Fail (CVE-2026-31431)?
Cel mai probabil da, dacă rulați orice distribuție Linux majoră pe un kernel lansat înainte de 1 mai 2026 și permiteți acces shell neprivilegiat. Aceasta include fiecare server multi-chiriat, fiecare worker Kubernetes și fiecare runner CI. Rulați uname -r și verificați față de tabelul versiunilor patch-uite de mai sus. CVSS este 7.8.
Clusterul meu Kubernetes este vulnerabil chiar și cu PSS Restricted?
Da. Standardele de Securitate a Pod-urilor Restricted cu seccompProfile.type: RuntimeDefault nu blochează socket(AF_ALG, ...). Juliet.sh a testat acest lucru direct: un pod care rulează cu PSS Restricted plus RuntimeDefault a preluat controlul kernel-ului gazdei via Copy Fail. Aveți nevoie de un profil seccomp Localhost (furnizat în secțiunea de mitigare K8s de mai sus).
Docker Desktop blochează Copy Fail?
Profilul seccomp default al Docker Desktop interzice deja multe apeluri de sistem, dar nu a blocat AF_ALG până când moby/moby PR #52501 a fost integrat. Actualizați Docker la o versiune care include profilul patch-uit (backport Docker 29.x) sau aplicați manual profilul seccomp. Instalările Linux Docker fără acest update rămân expuse.
Seccomp RuntimeDefault oprește acest atac?
Nu. RuntimeDefault este profilul nemodificat al runtime-ului containerului (default Docker/containerd). Permite socket(AF_ALG, ...) deoarece workload-urile legitime utilizează ocazional API-ul crypto al kernel-ului. Soluția este un profil Localhost care interzice explicit AF_ALG (JSON complet în secțiunea K8s) sau upgrade-ul la default-ul din moby/moby PR #52501.
Ce fac dacă nu pot reporni kernel-ul chiar acum?
Blacklist-ul modprobe plus un profil seccomp Localhost care interzice socket(AF_ALG, ...) este suficient până când puteți aplica patch-ul. Ambele se aplică fără reboot. Adăugați blacklist algif_aead în /etc/modprobe.d/copy-fail.conf, rulați rmmod algif_aead, implementați profilul seccomp și reporniți la următoarea fereastră de mentenanță.
Copy Fail este exploatat în mediul real?
Până pe 5 mai 2026, postarea de intelligence a amenințărilor Microsoft nu confirmă exploatarea în mediul real, dar caracterizează bug-ul ca „trivial de weaponizat” dat fiind exploit-ul de 732 de octeți publicat de Xint. Clasa primitivă de exploit (scriere cache pagini via splice) se suprapune cu Dirty Pipe (CVE-2022-0847), care a fost exploatat pe scară largă în câteva săptămâni de la dezvăluire.
Copy Fail afectează în mod specific workload-urile AI/ML?
Da, disproporționat. Inferența self-hosted (vLLM, sglang, Ollama), runtimerele de agenți, serverele MCP și build-urile CI pentru imagini ML execută în mod rutină cod utilizator nesigur. Orice dintre acestea într-un container, chiar și cu PSS Restricted, poate declanșa Copy Fail și prelua controlul gazdei. Nodurile GPU sunt profilul cu cel mai mare risc deoarece sunt de obicei multi-chiriate.
Cum diferă Copy Fail de Dirty Pipe?
Ambele sunt vulnerabilități LPE în kernel-ul Linux care produc scrieri arbitrare în cache-ul paginilor, dar suprafața de declanșare diferă: Dirty Pipe abuză de splice() într-un pipe, Copy Fail abuză de splice() într-un socket algif_aead (AF_ALG). Ambele ocolesc implicitele standard seccomp ale containerelor. Noutatea Copy Fail: ruta AF_ALG este accesibilă din Standardele de Securitate a Pod-urilor Restricted cu RuntimeDefault.
Concluzie
Copy Fail poate fi remediat în aproximativ 60 de minute dacă urmați ghidul cap-coadă: blacklist modprobe, update kernel, profil seccomp, verificare. Aspectul Kubernetes și infrastructură AI este ceea ce face acest CVE diferit de o LPE rutinieră: PSS Restricted cu RuntimeDefault nu vă va salva, iar un singur pod de inferență compromis poate prelua controlul gazdei. Blacklist-ul modprobe plus un profil seccomp Localhost este apărarea durabilă chiar și după aplicarea patch-ului.
Doriți o a doua pereche de ochi asupra runbook-ului dvs. de răspuns la incidente sau o linie de bază K8s hardenată înainte ca următorul CVE kernel să apară? Luați legătura cu Techsy. Noi realizăm hardening de platformă pentru stive AI/ML de producție.
Ultima actualizare 2026-05-05. Vom revizui articolul pentru noi avize ale distribuțiilor pe 2026-05-12.