
कुबरनेट्स DaemonSet जो CVE-2026-31431 (GHSA-2274-3hgr-wxv6) का पता लगाने और उसे ठीक करने के लिए है — modprobe ब्लैकलिस्ट के माध्यम से algif_aead LPE
गंभीरता: उच्च (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 लिनक्स कर्नेल के algif_aead मॉड्यूल (AF_ALG AEAD क्रिप्टो सॉकेट इंटरफ़ेस) में एक स्थानीय विशेषाधिकार वृद्धि भेद्यता है। एक कम-विशेषाधिकार वाला स्थानीय उपयोगकर्ता गलत इन-प्लेस बफर संचालन का फायदा उठाकर पूर्ण रूट एक्सेस प्राप्त कर सकता है। अपस्ट्रीम पैच से पहले लिनक्स कर्नेल चलाने वाले सभी AKS नोड पूल संभावित रूप से प्रभावित हैं।
algif_aead मॉड्यूल सामान्य Kubernetes या AKS वर्कलोड के लिए आवश्यक नहीं है। इसे ब्लैकलिस्ट करने से हमले की सतह पूरी तरह समाप्त हो जाती है।
हर लिनक्स नोड पर एक पॉड चलता है। प्रारंभ में और फिर हर 60 सेकंड में प्रत्येक पॉड:
लिखता है होस्ट पर /etc/modprobe.d/modprobe-CIS.conf:
install algif_aead /bin/false
blacklist algif_aead
यह मॉड्यूल को रीबूट पर या modprobe के माध्यम से लोड होने से रोकता है।
जाँचता है /proc/modules (लाइव होस्ट कर्नेल मॉड्यूल सूची — सभी कंटेनरों के साथ साझा) में algif_aead के लिए।
लेबल करता है Kubernetes नोड को परिणाम के साथ ताकि आप पूरे क्लस्टर में क्वेरी कर सकें:
| लेबल मान | अर्थ |
|---|---|
mitigated | मॉड्यूल लोड नहीं है; ब्लैकलिस्ट कॉन्फ़िग लागू किया गया |
module-loaded | मॉड्यूल वर्तमान में लोड है — तुरंत जाँच करें |
| फ़ाइल | उद्देश्य |
|---|---|
rbac.yaml | नेमस्पेस, ServiceAccount, ClusterRole (get/patch नोड्स), ClusterRoleBinding |
configmap.yaml | शेल रेमेडिएशन स्क्रिप्ट हर पॉड में माउंट की गई |
daemonset.yaml | DaemonSet परिभाषा — प्रति लिनक्स नोड एक पॉड |
kubectlमेनिफेस्ट को क्रम में लागू करें:
kubectl apply -f rbac.yaml
kubectl apply -f configmap.yaml
kubectl apply -f daemonset.yaml
सभी नोड्स पर रोलआउट पूरा होने की प्रतीक्षा करें:
kubectl -n security-remediation rollout status daemonset/cve-2026-31431-remediator
kubectl get nodes -L vulnerability.aks.io/CVE-2026-31431
स्वच्छ क्लस्टर पर अपेक्षित आउटपुट:
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
# पॉड्स और उनके निर्धारित नोड्स की सूची देखें
kubectl -n security-remediation get pods -o wide
# किसी विशिष्ट पॉड के लॉग देखें
kubectl -n security-remediation logs <pod-name> -f
अपेक्षित लॉग आउटपुट:
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
अपेक्षित सामग्री:
# 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
यदि कोई नोड module-loaded दिखाता है, तो कर्नेल मॉड्यूल वर्तमान में सक्रिय है और नोड पहले से समझौता हो सकता है। फोरेंसिक विश्लेषण के लिए नोड को तुरंत कॉर्डन और ड्रेन करें:
# प्रभावित नोड्स खोजें
kubectl get nodes -l vulnerability.aks.io/CVE-2026-31431=module-loaded
# जाँच के लिए कॉर्डन और ड्रेन करें
kubectl cordon <node-name>
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
नोट: DaemonSet को हटाने से होस्ट नोड्स से
/etc/modprobe.d/modprobe-CIS.confफ़ाइल नहीं हटती है। यह फ़ाइल जानबूझकर एक स्थायी कर्नेल हार्डनिंग उपाय के रूप में छोड़ी जाती है।
kubectl delete -f daemonset.yaml
kubectl delete -f configmap.yaml
kubectl delete -f rbac.yaml
यह DaemonSet, उसके सभी पॉड्स, ConfigMap, ServiceAccount, ClusterRole, ClusterRoleBinding और नेमस्पेस को हटा देता है।
kubectl label nodes --all vulnerability.aks.io/CVE-2026-31431-
यह केवल तभी करें जब आपके पास वैकल्पिक शमन (पैच किया हुआ कर्नेल) हो। प्रत्येक नोड पर या विशेषाधिकार प्राप्त पॉड के माध्यम से चलाएँ:
rm -f /etc/modprobe.d/modprobe-CIS.conf
runAsUser: 0) — होस्ट पर /etc/modprobe.d/ में लिखने के लिए आवश्यक।capabilities.drop: ["ALL"])। कोई कर्नेल क्षमता आवश्यक नहीं है।readOnlyRootFilesystem: true के साथ चलता है। केवल माउंट किए गए hostPath और emptyDir वॉल्यूम लिखने योग्य हैं।/etc/modprobe.d/ बाइंड-माउंट किया गया है — /etc, /proc, या कोई व्यापक पथ नहीं।curl बाइनरी और इसकी साझा लाइब्रेरीज़ init कंटेनर द्वारा एक emptyDir (/tools) में स्टेज की जाती हैं ताकि मुख्य कंटेनर rootfs पर लिखने की पहुँच के बिना Kubernetes API को कॉल कर सके।nodes पर get और patch।