
Kubernetes-DaemonSet zur Erkennung und Behebung von CVE-2026-31431 (GHSA-2274-3hgr-wxv6) — algif_aead LPE über die Modprobe-Blacklist
Schweregrad: Hoch (CVSS 7.8 — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
CVE-2026-31431 ist eine lokale Privilegieneskalations-Schwachstelle im algif_aead-Modul des Linux-Kernels (AF_ALG-AEAD-Krypto-Socket-Schnittstelle). Ein lokaler Benutzer mit niedrigen Privilegien kann fehlerhafte In-Place-Pufferoperationen ausnutzen, um vollständigen Root-Zugriff zu erlangen. Alle AKS-Node-Pools, die Linux-Kernel vor dem Upstream-Patch ausführen, sind potenziell betroffen.
Das algif_aead-Modul wird für normale Kubernetes- oder AKS-Workloads nicht benötigt. Das Blacklisten eliminiert die Angriffsfläche vollständig.
Ein Pod läuft auf jedem Linux-Node. Beim Start und dann alle 60 Sekunden führt jeder Pod Folgendes aus:
Schreibt /etc/modprobe.d/modprobe-CIS.conf auf dem Host mit:
install algif_aead /bin/false
blacklist algif_aead
Dies verhindert das Laden des Moduls beim Neustart oder über modprobe.
Prüft /proc/modules (die Live-Host-Kernelmodulliste — mit allen Containern geteilt) auf algif_aead.
Beschriftet den Kubernetes-Node mit dem Ergebnis, sodass Sie clusterweit abfragen können:
| Label-Wert | Bedeutung |
|---|---|
mitigated | Modul nicht geladen; Blacklist-Konfiguration angewendet |
module-loaded | Modul ist derzeit geladen — sofort untersuchen |
| Datei | Zweck |
|---|---|
rbac.yaml | Namespace, ServiceAccount, ClusterRole (get/patch nodes), ClusterRoleBinding |
configmap.yaml | Shell-Remediationsskript, das in jeden Pod gemountet wird |
daemonset.yaml | DaemonSet-Definition — ein Pod pro Linux-Node |
kubectl, konfiguriert gegen den Ziel-AKS-ClusterWenden Sie die Manifeste in der richtigen Reihenfolge an:
kubectl apply -f rbac.yaml
kubectl apply -f configmap.yaml
kubectl apply -f daemonset.yaml
Warten Sie, bis der Rollout auf allen Nodes abgeschlossen ist:
kubectl -n security-remediation rollout status daemonset/cve-2026-31431-remediator
kubectl get nodes -L vulnerability.aks.io/CVE-2026-31431
Erwartete Ausgabe in einem sauberen Cluster:
NAME STATUS ROLES AGE VERSION CVE-2026-31431
aks-nodepool1-xxxxx-vmss000000 Ready <none> 4d v1.33.7 mitigated
aks-nodepool1-xxxxx-vmss000001 Ready <none> 4d v1.33.7 mitigated
# Pods und ihre zugewiesenen Nodes auflisten
kubectl -n security-remediation get pods -o wide
# Protokolle eines bestimmten Pods verfolgen
kubectl -n security-remediation logs <pod-name> -f
Erwartete Protokollausgabe:
2026-05-01T01:33:36Z [INFO ] CVE-2026-31431 remediator starting on node: aks-nodepool1-...
2026-05-01T01:33:36Z [INFO ] Blacklist config written → /host/etc/modprobe.d/modprobe-CIS.conf
2026-05-01T01:33:36Z [INFO ] Node aks-nodepool1-...: 'algif_aead' is NOT loaded — blacklist config applied, node is mitigated.
2026-05-01T01:33:36Z [INFO ] Labeled node aks-nodepool1-...: vulnerability.aks.io/CVE-2026-31431=mitigated
2026-05-01T01:33:36Z [INFO ] Entering monitoring loop (interval: 60s)
kubectl -n security-remediation exec <pod-name> -- cat /host/etc/modprobe.d/modprobe-CIS.conf
Erwarteter Inhalt:
# CIS hardening – mitigate CVE-2026-31431 (GHSA-2274-3hgr-wxv6)
# Prevents algif_aead (AF_ALG AEAD) LPE from being loaded or exploited.
install algif_aead /bin/false
blacklist algif_aead
Wenn ein Node module-loaded anzeigt, ist das Kernelmodul derzeit aktiv und der Node ist möglicherweise bereits kompromittiert. Cordon und Drain des Nodes sofort für forensische Analysen durchführen:
# Betroffene Nodes finden
kubectl get nodes -l vulnerability.aks.io/CVE-2026-31431=module-loaded
# Cordon und Drain für Untersuchung
kubectl cordon <node-name>
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
Hinweis: Das Entfernen des DaemonSets entfernt nicht die Datei
/etc/modprobe.d/modprobe-CIS.confvon den Host-Nodes. Diese Datei wird absichtlich als dauerhafte Kernel-Härtungsmaßnahme belassen.
kubectl delete -f daemonset.yaml
kubectl delete -f configmap.yaml
kubectl delete -f rbac.yaml
Dies löscht das DaemonSet, alle seine Pods, die ConfigMap, den ServiceAccount, die ClusterRole, die ClusterRoleBinding und den Namespace.
kubectl label nodes --all vulnerability.aks.io/CVE-2026-31431-
Führen Sie dies nur aus, wenn Sie eine alternative Absicherung (gepatchter Kernel) haben. Führen Sie auf jedem Node oder über einen privilegierten Pod aus:
rm -f /etc/modprobe.d/modprobe-CIS.conf
runAsUser: 0) — erforderlich, um in /etc/modprobe.d/ auf dem Host zu schreiben.capabilities.drop: ["ALL"]). Es werden keine Kernel-Capabilities benötigt.readOnlyRootFilesystem: true. Nur die gemounteten hostPath- und emptyDir-Volumes sind beschreibbar./etc/modprobe.d/ wird vom Host bind-gemountet — nicht /etc, /proc oder ein breiterer Pfad.curl-Binärdatei und ihre Shared Libraries werden vom Init-Container in ein emptyDir (/tools) gestellt, sodass der Hauptcontainer die Kubernetes-API aufrufen kann, ohne Schreibzugriff auf das Root-Dateisystem zu benötigen.get und patch auf nodes.