
# CVE-2026-31431 के लिए विश्लेषण और शमन मार्गदर्शिका यह Linux कर्नेल के crypto algif_aead सबसिस्टम में एक स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) है, जिसमें RHEL और OpenShift के लिए प्रभाव आकलन शामिल है, साथ ही seccomp और SCC हार्डनिंग भी शामिल है।
Linux कर्नेल क्रिप्टो algif_aead सबसिस्टम में लोकल प्रिविलेज एस्केलेशन।
CVE-2026-31431, जिसे "कॉपी फेल" नाम दिया गया है, Linux कर्नेल के authencesn क्रिप्टोग्राफिक टेम्पलेट (algif_aead) में एक लॉजिक बग है। यह एक अनप्रिविलेज्ड लोकल यूज़र को किसी भी पठनीय फ़ाइल के पेज कैश में नियंत्रित 4-बाइट राइट करने की अनुमति देता है, जिसका उपयोग setuid बाइनरी को संशोधित करके रूट प्राप्त करने के लिए किया जा सकता है।
a664bf3d603d| तिथि | घटना |
|---|---|
| 2026-03-23 | Linux कर्नेल सुरक्षा टीम को रिपोर्ट किया गया |
| 2026-04-01 | पैच मेनलाइन में कमिट किया गया |
| 2026-04-22 | CVE असाइन किया गया |
| 2026-04-29 | सार्वजनिक खुलासा |
एक्सप्लॉइट के लिए दो चीज़ों की आवश्यकता होती है: एक AF_ALG सॉकेट (सभी seccomp प्रोफाइल में डिफ़ॉल्ट रूप से अनुमत) और एक setuid बाइनरी (जैसे /usr/bin/su)। मुख्य शमन allowPrivilegeEscalation: false है — यह Linux कर्नेल का no_new_privs फ्लैग prctl(PR_SET_NO_NEW_PRIVS, 1) के माध्यम से सेट करता है, जिससे कर्नेल execve() पर setuid/setgid बिट्स को अनदेखा कर देता है। चूंकि एक्सप्लॉइट संशोधित setuid बाइनरी को निष्पादित करने पर निर्भर करता है, यह अंतिम एस्केलेशन चरण को अवरुद्ध करता है।
यह OpenShift-विशिष्ट सुविधा नहीं है — यह वैनिला Kubernetes (Pod Security Standards Restricted), Docker (--security-opt no-new-privileges), और Podman पर समान रूप से काम करता है। OpenShift बस इसे restricted-v2 SCC के माध्यम से डिफ़ॉल्ट रूप से लागू करता है, जबकि अन्य प्लेटफ़ॉर्म को स्पष्ट कॉन्फ़िगरेशन की आवश्यकता होती है।
RHEL 8 और RHEL 9 ऐसे कर्नेल शिप करते हैं जिनमें कमजोर कोड होता है। शेल एक्सेस वाला एक अनप्रिविलेज्ड लोकल यूज़र इसका उपयोग करके रूट प्राप्त कर सकता है। तुरंत पैच करें।
yum updateinfo list cves CVE-2026-31431
yum update kernel
OpenShift RHCOS पर चलता है, जो कमजोर कर्नेल शिप करता है। व्यावहारिक प्रभाव वर्कलोड के Security Context Constraints (SCC) पर निर्भर करता है।
डिफ़ॉल्ट restricted-v2 SCC का उपयोग करने वाले मानक वर्कलोड एक्सप्लॉइटेबल नहीं हैं क्योंकि allowPrivilegeEscalation: false लागू किया जाता है।
उन्नत SCC (anyuid, privileged, या allowPrivilegeEscalation: true की अनुमति देने वाले कस्टम SCC) के साथ चलने वाले पॉड कमजोर हैं। इसमें आमतौर पर शामिल हैं:
anyuid की आवश्यकता वाले लीगेसी एप्लिकेशनसीधे नोड एक्सेस (जैसे oc debug node/ के माध्यम से) हमेशा कमजोर होता है — मानक लोकल प्रिविलेज एस्केलेशन, कोई कंटेनर आइसोलेशन शामिल नहीं।
यह जांचने के लिए एक टेस्ट पॉड प्रदान किया गया है कि आपके क्लस्टर में एक्सप्लॉइट पूर्वापेक्षाएँ पूरी होती हैं या नहीं। यह कमजोरी का एक्सप्लॉइट करने का प्रयास नहीं करता — यह केवल जांचता है:
AF_ALG सॉकेट बनाया जा सकता है? (कर्नेल अटैक सतह पहुंच योग्य)no_new_privs सेट है? (setuid एस्केलेशन को ब्लॉक करता है)oc apply -f test-pod.yaml
oc logs cve-2026-31431-check
oc delete -f test-pod.yaml
कई नोड्स पर परीक्षण के लिए डिप्लॉयमेंट वेरिएंट का उपयोग करें, रेप्लिका स्केल करके या पॉड एंटी-एफिनिटी का उपयोग करके:
oc apply -f test-deployment.yaml
oc logs -l app=cve-2026-31431-check
oc delete -f test-deployment.yaml
| कोड | अर्थ |
|---|---|
0 | एक्सप्लॉइटेबल नहीं — AF_ALG सॉकेट seccomp द्वारा ब्लॉक किया गया |
1 | आंशिक रूप से एक्सपोज़्ड — AF_ALG पहुंच योग्य लेकिन setuid no_new_privs द्वारा ब्लॉक किया गया |
2 | कमजोर — सभी एक्सप्लॉइट पूर्वापेक्षाएँ पूरी होती हैं |
restricted-v2 SCC वाले मानक OpenShift क्लस्टर पर, आपको एग्ज़िट कोड 1 (आंशिक रूप से एक्सपोज़्ड) देखना चाहिए: AF_ALG सॉकेट बनाया जा सकता है (RuntimeDefault seccomp इसे ब्लॉक नहीं करता), लेकिन no_new_privs setuid एस्केलेशन चरण को रोकता है। प्रकाशित PoC काम नहीं करेगा, लेकिन कर्नेल-स्तरीय कमजोरी अभी भी पहुंच योग्य है — पैचिंग की अनुशंसा की जाती है।
यह एकमात्र पूर्ण फिक्स है। सभी नोड्स पर कर्नेल अपडेट करें और रीबूट करें।
OpenShift के लिए, फिक्स शामिल करने वाले RHCOS संस्करण में अपडेट करें और रोलिंग नोड रीबूट करें।
यदि algif_aead लोडेबल मॉड्यूल (CONFIG_CRYPTO_USER_API_AEAD=m) के रूप में कंपाइल किया गया है:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
यह तब काम नहीं करता जब algif_aead बिल्ट-इन (=y) हो, जो RHCOS पर मामला है। इससे जांचें:
modinfo algif_aead 2>&1 | grep builtin
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
यदि कर्नेल मॉड्यूल बिल्ट-इन है, तो कंटेनरों के लिए एकमात्र प्री-पैच शमन कस्टम seccomp प्रोफाइल के माध्यम से socket(AF_ALG, ...) syscall को ब्लॉक करना है।
सभी नोड्स पर प्रोफाइल रखने के लिए MachineConfig बनाएं (कंट्रोल प्लेन नोड्स के लिए role: master के साथ दोहराएं):
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: worker
name: 99-worker-seccomp-deny-af-alg
spec:
config:
ignition:
version: 3.2.0
storage:
files:
- path: /var/lib/kubelet/seccomp/deny-af-alg.json
mode: 0644
contents:
source: data:application/json;charset=utf-8;base64,ewogICJkZWZhdWx0QWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKICAic3lzY2FsbHMiOiBbCiAgICB7CiAgICAgICJuYW1lcyI6IFsic29ja2V0Il0sCiAgICAgICJhY3Rpb24iOiAiU0NNUF9BQ1RfRVJSTk8iLAogICAgICAiYXJncyI6IFsKICAgICAgICB7CiAgICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICAgInZhbHVlIjogMzgsCiAgICAgICAgICAib3AiOiAiU0NNUF9DTVBfRVEiCiAgICAgICAgfQogICAgICBdCiAgICB9CiAgXQp9
बेस64 सामग्री इस प्रकार डिकोड होती है:
{
"defaultAction": "SCMP_ACT_ALLOW",
"syscalls": [
{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"args": [
{
"index": 0,
"value": 38,
"op": "SCMP_CMP_EQ"
}
]
}
]
}
नोट: MachineConfig लागू करने से रोलिंग नोड रीबूट ट्रिगर होता है।
securityContext:
seccompProfile:
type: Localhost
localhostProfile: deny-af-alg.json
पॉड स्पेक्स को संशोधित किए बिना सभी कंटेनरों की सुरक्षा के लिए, मौजूदा प्रोफाइल में AF_ALG फ़िल्टर नियम जोड़कर MachineConfig के माध्यम से CRI-O डिफ़ॉल्ट seccomp प्रोफाइल (/etc/crio/seccomp.json) को ओवरराइड करें।
उन्नत विशेषाधिकारों के साथ चलने वाले पॉड की पहचान करें:
# restricted-v2 का उपयोग नहीं करने वाले पॉड खोजें
oc get pods -A -o json | jq -r '
.items[] |
select(.metadata.annotations["openshift.io/scc"] != "restricted-v2") |
"\(.metadata.namespace)/\(.metadata.name) → \(.metadata.annotations["openshift.io/scc"])"
'
ये वे पॉड हैं जहां पूरी एक्सप्लॉइट चेन काम करती है। इन वर्कलोड को चलाने वाले नोड्स के लिए पैचिंग या seccomp शमन को प्राथमिकता दें।
AF_ALG सॉकेट को ब्लॉक करने का अधिकांश वर्कलोड पर नगण्य प्रभाव होता है। निम्नलिखित प्रभावित नहीं हैं:
केवल वे एप्लिकेशन प्रभावित होंगे जो स्पष्ट रूप से OpenSSL afalg इंजन का उपयोग करने के लिए कॉन्फ़िगर किए गए हैं।
| वातावरण | allowPrivilegeEscalation | कंटेनर रूट | होस्ट रूट | जोखिम |
|---|
| RHEL 8 / RHEL 9 (लोकल यूज़र) | n/a | n/a | हाँ | गंभीर |
OpenShift नोड (शेल एक्सेस, जैसे oc debug node/) | n/a | n/a | हाँ | गंभीर |
OpenShift पॉड — restricted-v2 SCC (डिफ़ॉल्ट) | false | नहीं | नहीं | कम |
OpenShift पॉड — anyuid SCC | true | हाँ | नहीं (नेमस्पेस आइसोलेशन) | उच्च |
OpenShift पॉड — privileged SCC | true | हाँ | हाँ (कोई आइसोलेशन नहीं) | गंभीर |
| OpenShift पॉड — कस्टम SCC | निर्भर करता है | निर्भर करता है | निर्भर करता है | ऑडिट |
| Kubernetes पॉड — PSS Restricted | false | नहीं | नहीं | कम |
| Kubernetes पॉड — PSS Baseline / कोई नीति नहीं | true (डिफ़ॉल्ट) | हाँ | नहीं | उच्च |
Docker / Podman — --security-opt no-new-privileges | false | नहीं | नहीं | कम |
| Docker / Podman — डिफ़ॉल्ट | true | हाँ | नहीं | उच्च |