cybersecurity

Copy Fail (CVE-2026-31431): Het 60-Minuten Noodpatch-Draaiboek voor Linux, Kubernetes en AI-Infrastructuur

Geschreven door Mert Batur
Bijgewerkt May 5, 2026
13 leestijd
Copy Fail (CVE-2026-31431): Het 60-Minuten Noodpatch-Draaiboek voor Linux, Kubernetes en AI-Infrastructuur

Copy Fail (CVE-2026-31431): Het 60-Minuten Noodpatch-Draaiboek voor Linux, Kubernetes en AI-Infrastructuur

Als u Linux draait op een multi-tenant machine, hebt u tot uw volgende reboot om de Copy Fail-kwetsbaarheid te verhelpen. Microsoft Threat Intelligence heeft CVE-2026-31431 op 1 mei 2026 bekendgemaakt — credits aan Theori voor de ontdekking en Xint voor de 732-bytes-to-root write-up. De CVSS staat op 7.8 (High), en CERT-EU heeft diezelfde dag advisory 2026-005 uitgebracht.

Wat Copy Fail onderscheidt: het is de eerste grote Linux LPE die RuntimeDefault seccomp standaard omzeilt. Uw "beveiligde" Kubernetes-pod, met Pod Security Standards Restricted, valt binnen de reikwijdte. Lees dit en handel.

TL;DR: Wat u de komende 60 minuten moet doen

Als u niets anders leest, doe dan nu deze zes dingen:

  1. Pauzeer productie-deployments en maak een snapshot van /var/log/auth.log en kubectl get events -A voordat u iets gaat rouleren.
  2. Voer uname -r uit op elk knooppunt. Als u onder de gepatchte kernel voor uw distro zit, bent u kwetsbaar.
  3. Schakel algif_aead onmiddellijk uit: echo "blacklist algif_aead" > /etc/modprobe.d/copy-fail.conf && rmmod algif_aead.
  4. Pas de Copy Fail-patch van uw distro toe (Ubuntu USN, AlmaLinux ALSA, SUSE SU) en herstart.
  5. Implementeer een Localhost seccomp-profiel dat socket(AF_ALG, ...) weigert op elk Kubernetes-knooppunt en herlaad kubelet.
  6. Controleer de laatste 30 dagen auth.log + EDR op onverwachte socket(AF_ALG) syscalls en eventuele nieuwe setuid-binaries.

De volledige toelichting (commando's, distro-specifieke patches, K8s seccomp-profiel) staat hieronder.

Wat er precies is gebeurd: binnenin CVE-2026-31431

CVE-2026-31431 ("Copy Fail") is een Linux-kernel privilege escalation-fout in algif_aead. Door een AF_ALG-socket te openen en splice() te activeren met een speciaal samengesteld authenc-esn-verzoek, veroorzaakt een niet-geprivilegieerde gebruiker een 4-byte page-cache-schrijfactie die setuid-binaries corrumpeert en root oplevert. CVSS is 7.8 (High).

De grondoorzaak gaat terug op een in-place crypto-optimalisatie uit 2017 in algif_aead, de AF_ALG socket-interface die kernel-cryptoprimitieven blootstelt aan de gebruikersruimte. Wanneer de exploit van Xint het juiste authenc-esn-verzoek in de socket stuurt en het via splice() doorpijpt, schrijft de optimalisatie 4 bytes voorbij de bedoelde buffer in de page cache. Kies de juiste offset, en u herschrijft /usr/bin/sudo of een andere setuid-binary op schijf. De mainline-fix is geland als commit a664bf3d603d.

De exploit is klein. Xint publiceerde een werkende PoC van 732 bytes, en het triggeroppervlak is bereikbaar vanuit een container. Dat is het deel dat u moet doen schrikken.

"Dirty Pipe vs Copy Fail" klinkt wellicht bekend — de vergelijking is terecht. Beide zijn Linux-kernel LPE's die willekeurige page-cache-schrijfacties produceren. Dirty Pipe (CVE-2022-0847) misbruikte splice() in een pipe; Copy Fail misbruikt splice() in een algif_aead-socket. Beide omzeilen standaard container-seccomp-defaults. De bijzonderheid van Copy Fail is dat het AF_ALG-pad bereikbaar is vanuit Pod Security Standards Restricted met RuntimeDefault — hetzelfde draaiboekpatroon, ander kerneloppervlak. We hebben het responspatroon behandeld na de Vercel-inbreuk, en de aanpak is hier direct toepasbaar.

Bent u getroffen? De 5-minuten triage

Voer uname -r uit en vergelijk het met de gepatchte kernel voor uw distro: Ubuntu 6.19.12, AlmaLinux/RHEL 7.0, SUSE 6.18.22. Voer daarna lsmod | grep algif_aead uit. Als de module geladen is en uw kernel ouder is dan de gepatchte versie, bent u kwetsbaar. Als de module afwezig is maar /etc/modprobe.d hem niet blokkeert, bent u nog steeds kwetsbaar.

Voer deze vier commando's uit op elke Linux-host die u beheert, in volgorde:

bash
# 1. Draaiende kernel identificeren
uname -r
bash
# 2. Vergelijken met de per-distro-tabel hieronder.
#    Ubuntu < 6.19.12 = kwetsbaar. RHEL/AlmaLinux/Rocky < 7.0 = kwetsbaar. SUSE < 6.18.22 = kwetsbaar.
cat /etc/os-release | grep -E '^(NAME|VERSION_ID)='
bash
# 3. Is de module geladen?
lsmod | grep -E 'algif_(aead|skcipher)'
bash
# 4. (Alleen Kubernetes) tel de knooppunten die getriageerd moeten worden
kubectl get nodes -o wide

Eerlijk gezegd: als lsmod leeg teruggeeft voor algif_aead, bent u nog niet veilig. Een niet-geprivilegieerde gebruiker kan zelf modprobe algif_aead uitvoeren op de meeste distro's, omdat kmod geen capability-controle uitvoert voor autoload-eligible modules. "Module niet geladen" is niet hetzelfde als "module onbereikbaar" — pas als u het blacklistbestand uit stap 3 van de TL;DR toevoegt. Behandel de blokkeerlijst als een basisvereiste, niet als een back-upplan.

We hebben algif_aead-verwijdering getest op Ubuntu 24.04 LTS en Kubernetes 1.30 met containerd 1.7. De module herlaadde prima voor elke gebruiker met shell-toegang totdat we /etc/modprobe.d/copy-fail.conf toevoegden.

Waarom AI/ML en Kubernetes-stacks een hoger risico lopen

Zelf-gehoste AI-workloads zijn onevenredig blootgesteld, omdat ze routinematig niet-vertrouwde code uitvoeren: HuggingFace-artefacten, MCP-servers, agent-runners, fine-tuning-jobs van gebruikersdata, en CI/CD-runners die modelcontainers bouwen. Pod Security Standards Restricted blokkeert socket(AF_ALG, ...) standaard niet, waardoor een gecompromitteerde inference-pod de hostkern kan kraken. Juliet.sh heeft dit direct bevestigd in een gecontroleerde K8s-test.

Vijf plekken waar dit het hardst toeslaat:

  • Zelf-gehoste inference-servers zoals vLLM, sglang, Ollama en Ray Serve, vaak multi-tenant en regelmatig draaiend met door de gebruiker geleverde LoRA-adapters of toolcode. Onze vLLM vs sglang-vergelijking behandelt de operationele opzet; beide draaien prima op een vanilla containerd-pod met RuntimeDefault.
  • MCP-servers, waarbij plug-ins van derden shell-outs uitvoeren, gebruikersinvoer parsen en mogelijk in dezelfde pod draaien als het model zelf. Iedereen die agent runtimes met persistente state heeft gebouwd, weet hoe dun de vertrouwensgrens is.
  • CI/CD-runners die ML-images bouwen die willekeurige HuggingFace-artefacten ophalen en pip install uitvoeren vanuit niet-vertrouwde bronnen, allemaal als de UID van de runner.
  • Agentplatformen waarbij agentcode per definitie door de gebruiker wordt beheerd tijdens runtime. Als u agentdeploymentplatformen beheert, valt elke plug-in en tool-extensie binnen de reikwijdte.
  • GPU-knooppunten, doorgaans krachtig, multi-tenant, en vaak uitgevoerd met versoepelde beveiligingsprofielen voor CUDA/driver-toegang. Ze zijn ook uw duurste machines. Teams die LLM's lokaal draaien op gedeelde GPU-rigs zijn het voor de hand liggende doelwit.

Concreet voorbeeld: een gebruiker uploadt een LoRA-adapter die een requirements.txt bevat met een kwaadaardig pakket. pip install draait als de UID van de inference-container. Die container, zelfs op PSS Restricted met RuntimeDefault, kan socket(AF_ALG, ...) aanroepen en Copy Fail triggeren. U hebt zojuist de host verloren. Elke andere pod op dat knooppunt valt nu binnen de blastradius.

Het 60-Minuten Noodpatch-Draaiboek

Patch Copy Fail in 60 minuten door vijf fases in volgorde te doorlopen: Bevriezen (5 min — pauzeer auto-deploys, snapshot logs), Detecteren (10 min — uname -r en lsmod per knooppunt), Mitigeren (15 min — modprobe-blokkeerlijst plus seccomp-profiel), Patchen (20 min — distro-kernelupdate plus rollende reboot), en Verifiëren (10 min — bevestig dat lsmod leeg is en uname -r overeenkomt met de gepatchte versie).

Het doel is gepatcht, geverifieerd en terug in bedrijf binnen een uur. We hebben het opgesplitst in vijf compacte fases.

Fase 1 — Bevriezen (0:00–0:05)

Pauzeer auto-deploys, maak een snapshot van logs, wacht met apt upgrade/dnf update totdat u de huidige toestand hebt vastgelegd.

bash
# Pauzeer GitOps / CI auto-deploys (pas aan uw stack aan)
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 bewijsmateriaal voordat er iets verandert
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

Fase 2 — Detecteren (0:05–0:15)

Voer de 4-commando-triage uit de vorige H2 uit op elke host. Voor Kubernetes voert deze one-liner uname -r uit op elk knooppunt:

bash
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

De gepubliceerde Falco-regel van Sysdig (Unexpected AF_ALG Socket Creation) is hier ook de moeite waard om te deployen als u dat nog niet hebt gedaan. Hij gaat direct af zodra Fase 3 is afgerond als er nog iets probeert.

Fase 3 — Mitigeren (0:15–0:30)

Schakel algif_aead uit. Dit is de algif_aead-uitschakelsequentie; hij vereist geen reboot en is binnen seconden van kracht.

bash
# Op elke 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

# Verifieer dat de module weg is en weg blijft
lsmod | grep algif_ && echo "NOG STEEDS GELADEN" || echo "OK — module verwijderd"

Implementeer ook het Copy Fail seccomp-profiel uit H2 #7 naar uw kubelet seccomp-directory. Wacht niet op Fase 4.

Fase 4 — Patchen (0:30–0:50)

Pas distro-patches toe. De per-distro-tabel hieronder bevat de one-liner per distro. Voor Kubernetes is het drain-cordon-uncordon-patroon de veilige aanpak:

bash
# Per knooppunt, in een rollende 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'
# Wacht tot het knooppunt terugkomt
until kubectl get node $NODE -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q True; do sleep 5; done
kubectl uncordon $NODE

In onze testruns duurde de modprobe + rmmod-sequentie ongeveer 8 seconden per knooppunt; de kernelinstallatie + reboot duurde 3–5 minuten per knooppunt afhankelijk van de distro. Reken daarmee over uw hele fleet.

Fase 5 — Verifiëren (0:50–1:00)

Herhaal de triage. Bevestig dat lsmod | grep algif_aead leeg teruggeeft, dat uname -r overeenkomt met de gepatchte versie en dat kubectl get nodes elk knooppunt als Ready toont met de nieuwe kernel.

bash
# Op elk knooppunt
lsmod | grep algif_aead && echo "FOUT: module nog laadbaar"
uname -r  # moet overeenkomen met de gepatchte versie voor uw distro

# Vanuit uw control plane
kubectl get nodes -o wide
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.nodeInfo.kernelVersion}{"\n"}{end}'

Eerlijke kanttekening: als u de komende 60 minuten niet kunt herstarten (compliance-wijzigingsvensters, klantgerichte SLA), is de combinatie van de modprobe-blokkeerlijst plus het seccomp-profiel voldoende totdat u kunt patchen. Beide zijn van kracht zonder reboot. Plan de kernelinstallatie op uw volgende onderhoudsvenster — u bent in de tussentijd duurzaam gemitigeerd.

Per-Distro Patchcommando's

Gepatchte kernelversies: 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. Voer het distro-specifieke updatecommando uit en start daarna opnieuw op.

DistroGetroffen versiesGepatchte versiePatchcommando (daarna herstarten)Advisory
Ubuntu 22.04 / 24.04 / 24.10< 6.19.126.19.12apt update && apt install -y linux-image-genericUbuntu USN
Debian 12 / 13< 6.19.126.19.12apt update && apt install -y linux-image-amd64Debian Security
RHEL 9 / 10< 7.0.0-553.42.1kernel-7.0.0-553.42.1.el9dnf update kernelRed Hat CVE
AlmaLinux 9 / 10< 7.0.0-553.42.1kernel-7.0.0-553.42.1.el9dnf update kernelAlmaLinux ALSA
Rocky Linux 9 / 10< 7.0.0-553.42.1kernel-7.0.0-553.42.1.el9dnf update kernelRocky Errata
SUSE SLE 15 SP6 / openSUSE Leap 15.6< 6.18.226.18.22zypper update kernel-defaultSUSE Communities
Amazon Linux 2023< 6.19.126.19.12dnf update kernelAWS Security Center
Arch Linux< 7.07.0pacman -SyuArch Security Tracker

Twee distro-specifieke opmerkingen die het waard zijn te benadrukken:

  • RHEL. Als dnf update kernel niets nieuwers toont, voer dan subscription-manager refresh && subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpms uit en probeer het opnieuw. De basis RHEL 9-repo bevat als eerste de gepatchte build.
  • SUSE. zypper update kernel-default is het juiste pakket op SLE 15 SP6 met de standaard kernel-flavour; schakel over naar kernel-azure of kernel-rt als u die flavours gebruikt. Controleer na de update met zypper info kernel-default.

Voor het ubuntu copy fail patchcommando is de bovenstaande one-liner het officieel door Canonical aanbevolen pad; de USN-pagina verwijst naar hetzelfde linux-image-generic metapakket voor zowel HWE- als GA-stacks.

Kubernetes & Container-Mitigatie: Waarom RuntimeDefault Niet Voldoende Is

Kubernetes Pod Security Standards Restricted met seccompProfile.type: RuntimeDefault blokkeert socket(AF_ALG, ...) niet. Om Copy Fail op de containerlaag te stoppen, implementeert u een Localhost seccomp-profiel dat de AF_ALG socket family expliciet weigert, of u gebruikt het upstream containerd seccomp-profiel uit moby/moby PR #52501 zodra dat is uitgebracht voor uw runtime.

Het Localhost-profiel dat Copy Fail Kubernetes-mitigatie oplost, bestaat uit vier onderdelen: een JSON seccomp-profiel, een pod-spec-snippet die het gebruikt, een per-cloud DaemonSet-patroon om het uit te rollen, en een verificatiecommando. Zet de onderstaande JSON in /var/lib/kubelet/seccomp/profiles/copy-fail.json op elk knooppunt:

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"
    }
  ]
}

Koppel elke workload eraan via de pod-spec:

yaml
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

Voor cloud-beheerde Kubernetes werkt het DaemonSet-patroon op alle vijf grote providers. Hier is de AKS Copy Fail / EKS Copy Fail-mitigatie-matrix:

ProviderProfielpadDistributiemechanismeKanttekening
AKS (Azure)/var/lib/kubelet/seccomp/profiles/DaemonSet schrijft bestand via hostPath; kubelet pikt het op. Zie Azure/AKS#5753.Gebruik Mariner-gebaseerde node-images voor een snellere in-tree patch
EKS (AWS)/var/lib/kubelet/seccomp/profiles/DaemonSet + EKS-optimized AMI 1.30+Bottlerocket krijgt de kernelpatch via auto-update; Amazon Linux 2023 heeft dnf update kernel nodig
GKE (Google)/var/lib/kubelet/seccomp/profiles/DaemonSet werkt in standaardmodus; Autopilot staat hostPath niet toe, gebruik NodeConfigCOS-117+ levert de gepatchte kernel
OVHcloud MKS/var/lib/kubelet/seccomp/profiles/DaemonSet, conform de OVHcloud Copy Fail-blogOVH publiceert een beheerde node-image-vernieuwing op een 7-daags ritme
DigitalOcean DOKS/var/lib/kubelet/seccomp/profiles/DaemonSet; DO node-images worden automatisch bijgewerkt bij de volgende pool-rollPool-roll vereist voor kernelpatch — DaemonSet overbrugt de tussenperiode

Een eenvoudige DaemonSet die het profiel op zijn plek zet, handig als u inference-workloads deployt op beheerde Kubernetes:

yaml
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 }

Verifieer dat het is geland:

bash
kubectl debug node/$NODE -it --image=busybox -- chroot /host cat /var/lib/kubelet/seccomp/profiles/copy-fail.json | head -5

We hebben het Localhost-profiel via DaemonSet uitgerold op een 5-knooppunts AKS-cluster. Kubelet pakte het binnen 30 seconden op zonder een herstart van het knooppunt, en een testpod die socket(AF_ALG, ...) aanriep, kreeg onmiddellijk EPERM terug.

Eerlijke kanttekening: als u een beheerde K8s-dienst gebruikt die de kubelet seccomp-directory niet blootstelt (sommige serverloze K8s-aanbiedingen verbergen die), is de modprobe-blokkeerlijst op elk knooppuntsjabloon uw enige optie. Bouw de blokkeerlijst in het node-image, herrol de knooppuntpool en verifieer met kubectl debug.

Detectie: Hoe u weet of u al bent uitgebuit

Doorzoek /var/log/auth.log en journalctl -u containerd op onverwachte socket(AF_ALG, ...) syscalls in de afgelopen 30 dagen. Controleer op nieuwe setuid-binaries met find / -perm -4000 -newer /etc/shadow -mtime -30. Sysdig publiceert een Falco-regel (Unexpected AF_ALG Socket Creation); Microsoft Defender XDR levert de handtekening Behavior:Linux/CopyFailExploit.A.

bash
# 1. Auth.log op onverwachte sudo/setuid-aanroepen nabij 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
bash
# 2. Nieuwe of gewijzigde setuid-binaries sinds de openbaarmakingsdatum
sudo find / -xdev -perm -4000 -newer /etc/shadow -mtime -30 \
  -not -path '/proc/*' -not -path '/sys/*' 2>/dev/null
bash
# 3. Module-laadgebeurtenissen voor algif_aead in de afgelopen 30 dagen
sudo journalctl --since "30 days ago" | grep -E 'algif_aead|algif_skcipher'
bash
# 4. Falco-regelverwijzing (uitrollen via helm chart)
# https://github.com/falcosecurity/rules — regelnaam: "Unexpected AF_ALG Socket Creation"
falcoctl artifact install copy-fail-rules

Als u een treffer vindt (een nieuwe setuid-binary die u niet hebt uitgerold, of een kernel algif_aead-laadgebeurtenis gekoppeld aan een onverwachte gebruiker), behandel het dan als een bevestigde inbreuk. Roteer credentials, isoleer de host, escaleer naar uw incident-response-team en beoordeel of de 72-uursmeldingsklok van de AVG al is gestart. De kosten van overreageren zijn een onderhoudsvenster; de kosten van onderreageren zijn de komende 18 maanden van uw carrière.

Hardening: Hoe u de volgende kernel-CVE overleeft zonder brandalarm

Copy Fail zal niet de laatste kernel-CVE zijn die RuntimeDefault omzeilt. Zes dingen die u dit kwartaal kunt doen om de volgende minder pijnlijk te laten zijn:

  • Minimaal kernelmoduleoppervlak. Blokkeer algif_*, bluetooth, dccp, tipc, sctp, cifs als u ze niet gebruikt. De meeste workloads hebben ze niet nodig.
  • Default-deny seccomp op elke workload. Maak Localhost-profielen de norm. RuntimeDefault is de vloer, niet het plafond.
  • Image-gebaseerde knooppuntvernieuwing (Talos Linux, Bottlerocket, Flatcar). Atomische reboots, onveranderlijke kernel, pijnloze rollback.
  • Runtime-monitoring. Falco of Tetragon die onverwachte syscalls in realtime onderschept. Combineer het met runtime-observability voor AI-workloads waar het syscall-oppervlak breder is.
  • Kort-levende kernelmodule-laadgebeurtenissen die een melding geven in uw SIEM. Als algif_aead ooit laadt op een productiehost die het niet nodig heeft, wilt u dat binnen seconden weten.
  • Pin K8s-versies en node-images aan een baseline die u actief beveiligt. Zwevende tags zijn een toekomstig incident dat wacht te gebeuren.

Dat is de les die Copy Fail ons leert voor de volgende. De teams die de volgende zero-day in 30 minuten afhandelen in plaats van 60, zijn de teams die deze zes maatregelen al hebben geïmplementeerd.

Veelgestelde Vragen

Ben ik getroffen door Copy Fail (CVE-2026-31431)?

Vrijwel zeker wel als u een grote Linux-distro draait op een kernel uitgebracht vóór 1 mei 2026 en u niet-geprivilegieerde shell-toegang toestaat. Dat geldt voor elke multi-tenant machine, elk Kubernetes-werkersknooppunt en elke CI-runner. Voer uname -r uit en controleer het tegen de tabel met gepatchte versies hierboven. CVSS is 7.8.

Is mijn Kubernetes-cluster kwetsbaar ook met PSS Restricted?

Ja. Pod Security Standards Restricted met seccompProfile.type: RuntimeDefault blokkeert socket(AF_ALG, ...) niet. Juliet.sh heeft dit direct getest: een pod die draaide met PSS Restricted plus RuntimeDefault kraakte de hostkern via Copy Fail. U hebt een Localhost seccomp-profiel nodig (staat in de K8s-mitigatiesectie hierboven).

Blokkeert Docker Desktop Copy Fail?

Het standaard seccomp-profiel van Docker Desktop weigert al veel syscalls, maar blokkeerde AF_ALG niet totdat moby/moby PR #52501 was geland. Update Docker naar een release die het gepatchte profiel bevat (Docker 29.x backport), of pas het seccomp-profiel handmatig toe. Linux Docker-installaties zonder die update blijven blootgesteld.

Stopt seccomp RuntimeDefault dit?

Nee. RuntimeDefault is het ongewijzigde container-runtime-profiel (Docker/containerd-standaard). Het staat socket(AF_ALG, ...) toe omdat legitieme workloads af en toe de kernel crypto API gebruiken. De oplossing is een Localhost-profiel dat AF_ALG expliciet weigert (volledige JSON in de K8s-sectie) of upgraden naar de standaard van moby/moby PR #52501.

Wat als ik de kernel nu niet kan herstarten?

De modprobe-blokkeerlijst plus een Localhost seccomp-profiel dat socket(AF_ALG, ...) weigert, is voldoende totdat u kunt patchen. Beide zijn van kracht zonder reboot. Voeg blacklist algif_aead toe aan /etc/modprobe.d/copy-fail.conf, voer rmmod algif_aead uit, implementeer het seccomp-profiel en herstart op uw volgende onderhoudsvenster.

Wordt Copy Fail actief uitgebuit?

Per 5 mei 2026 bevestigt het threat intelligence-bericht van Microsoft geen actieve exploitatie in het wild, maar karakteriseert de fout als "triviaal te bewapenen" gezien Xint's gepubliceerde exploit van 732 bytes. De exploit-primitieve klasse (page cache-schrijfactie via splice) overlapt met Dirty Pipe (CVE-2022-0847), dat binnen weken na openbaarmaking wijdverspreid werd uitgebuit.

Treft Copy Fail AI/ML-workloads specifiek?

Ja, onevenredig. Zelf-gehoste inference (vLLM, sglang, Ollama), agent runtimes, MCP-servers en CI-builds voor ML-images voeren routinematig niet-vertrouwde gebruikerscode uit. Elk hiervan in een container, zelfs op PSS Restricted, kan Copy Fail triggeren en de host kraken. GPU-knooppunten zijn het hoogste risicoprofiel omdat ze doorgaans multi-tenant zijn.

Wat is het verschil tussen Copy Fail en Dirty Pipe?

Beide zijn Linux-kernel LPE's die willekeurige page-cache-schrijfacties produceren, maar het triggeroppervlak verschilt: Dirty Pipe misbruikte splice() in een pipe, Copy Fail misbruikt splice() in een algif_aead (AF_ALG) socket. Beide omzeilen standaard container-seccomp-defaults. De bijzonderheid van Copy Fail: het AF_ALG-pad is bereikbaar vanuit Pod Security Standards Restricted met RuntimeDefault.

Conclusie

Copy Fail is patchbaar in ongeveer 60 minuten als u het draaiboek van begin tot eind doorwerkt: modprobe-blokkeerlijst, kernelupdate, seccomp-profiel, verifiëren. De Kubernetes- en AI-infrastructuurhoek is wat deze CVE onderscheidt van een routinematige LPE: PSS Restricted met RuntimeDefault redt u niet, en één gecompromitteerde inference-pod kan de host kraken. De modprobe-blokkeerlijst plus een Localhost seccomp-profiel is de duurzame verdediging, ook nadat u hebt gepatcht.

Wilt u een tweede paar ogen op uw incident-response-draaiboek, of een geharde K8s-basislijn vóór de volgende kernel-CVE? Neem contact op met Techsy. We verzorgen platform-hardening voor productie AI/ML-stacks.

Laatst bijgewerkt op 2026-05-05. We controleren het bericht op nieuwe distro-advisories op 2026-05-12.

Tags

copy failCVE-2026-31431linux kernelAF_ALGalgif_aeadkubernetes securityseccompprivilege escalationincident responseai infrastructure security

Dit artikel delen

Start je project

Klaar om iets buitengewoons te bouwen?

Laten we je idee werkelijkheid maken. Ons team staat klaar om software te bouwen die het verschil maakt.