
PoC: CVE-2026-31431 पेज-कैश भ्रष्टाचार + साझा इमेज लेयर्स के माध्यम से Kubernetes पर पूरी तरह से अनप्रिविलेज्ड कंटेनर एस्केप से नोड-स्तरीय कोड निष्पादन। Alibaba Cloud ACK, Amazon EKS और Google GKE पर मान्य किया गया।
एक प्रूफ-ऑफ-कॉन्सेप्ट जो दर्शाता है कि कैसे एक पूरी तरह से अविशेषाधिकारित कंटेनर साझा कंटेनर इमेज लेयर्स के माध्यम से CVE-2026-31431 Linux कर्नेल पेज-कैश भ्रष्टाचार बग का शोषण करके Kubernetes पर नोड-स्तरीय कोड निष्पादन प्राप्त कर सकता है।
मुख्य हमला प्रिमिटिव यह है: कोई भी विशेषाधिकारित DaemonSet जो हमलावर-नियंत्रित कंटेनर के साथ इमेज लेयर्स साझा करता है, उसे कंटेनर एस्केप के लिए हथियार बनाया जा सकता है। यह PoC kube-proxy को एक ठोस उदाहरण के रूप में उपयोग करता है, लेकिन यह तकनीक क्लस्टर पर किसी भी विशेषाधिकारित वर्कलोड के लिए सामान्यीकृत होती है।
Alibaba Cloud ACK, Amazon EKS और Google GKE पर मान्य किया गया — एक अविशेषाधिकारित pod विशेषाधिकारित kube-proxy DaemonSet के माध्यम से होस्ट फाइलसिस्टम पर [*] success लिखता है:
| Alibaba Cloud ACK (kernel 6.6.88) | Amazon EKS (kernel 6.12.79) | Google GKE (kernel 6.12.68) |
|---|---|---|
![]() | ![]() | ![]() |
अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए प्रकाशित की गई है। इसका उपयोग केवल उन सिस्टम पर करें जिनके आप स्वामी हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण है।
CVE-2026-31431 ("Copy Fail") Linux कर्नेल में पेज-कैश कॉपी-ऑन-राइट (CoW) पथ में एक भेद्यता है। एक AF_ALG splice रेस एक अविशेषाधिकारित प्रक्रिया को केवल-पढ़ने योग्य फ़ाइल के पेज-कैश पृष्ठों को दूषित करने की अनुमति देता है। यह भ्रष्टाचार कर्नेल पेज कैश में बना रहता है और उस फ़ाइल को बाद में पढ़ने या निष्पादित करने वाली हर प्रक्रिया को दिखाई देता है — जिसमें अन्य कंटेनरों या होस्ट की प्रक्रियाएँ शामिल हैं।
मूल भेद्यता के पूर्ण विवरण के लिए, देखें copy.fail.
यह हमला तीन गुणों का शोषण करता है जो सामान्यतः Kubernetes क्लस्टरों में सह-अस्तित्व में होते हैं:
privileged: true, hostNetwork: true, व्यापक क्षमताएँ, आदि) वाले DaemonSets चलाते हैं जो समय-समय पर अपनी इमेज से बाइनरी निष्पादित करते हैं।जब ये स्थितियाँ संरेखित होती हैं, तो एक अविशेषाधिकारित pod एक साझा इमेज लेयर में बाइनरी को दूषित कर सकता है, और उसी नोड पर एक विशेषाधिकारित DaemonSet अनजाने में दूषित बाइनरी को अपने उन्नत विशेषाधिकारों के साथ निष्पादित करेगा — पूर्ण नोड-स्तरीय कोड निष्पादन प्राप्त करना।
भेद्यता लक्ष्य kube-proxy तक सीमित नहीं है। कोई भी विशेषाधिकारित DaemonSet (मॉनिटरिंग एजेंट, CNI प्लगइन, लॉग कलेक्टर, सुरक्षा एजेंट, आदि) जिसकी कंटेनर इमेज हमलावर-नियंत्रित इमेज के साथ लेयर्स साझा करती है, एक व्यवहार्य लक्ष्य है।
हमले की श्रृंखला में तीन चरण हैं: पेज-कैश भ्रष्टाचार, क्रॉस-कंटेनर प्रसार, और विशेषाधिकारित निष्पादन।
कर्नेल का AF_ALG (क्रिप्टो) उपसिस्टम उपयोगकर्ता-स्थान क्रिप्टोग्राफिक संचालन के लिए एक सॉकेट-आधारित इंटरफ़ेस प्रदान करता है। शोषण एक रेस कंडीशन का दुरुपयोग करता है कि कर्नेल किसी फ़ाइल से AF_ALG सॉकेट में splice() को कैसे संभालता है:
authencesn(hmac(sha256),cbc(aes)) से बंधा एक AF_ALG AEAD सॉकेट बनाएँ।MSG_MORE के साथ AF_ALG सॉकेट के माध्यम से एक छोटा पेलोड खंड भेजें, कर्नेल को बताएं कि अधिक डेटा की अपेक्षा करें।splice() करें।शोषण प्रत्येक 4-बाइट विंडो के लिए इसे दोहराता है जब तक कि पूरी लक्ष्य बाइनरी के कैश्ड पृष्ठ एक कस्टम पेलोड के साथ अधिलेखित नहीं हो जाते।
फ़ाइल में लिखने की अनुमति की आवश्यकता नहीं है। डिस्क पर फ़ाइल अपरिवर्तित रहती है — केवल मेमोरी में पेज कैश दूषित होता है।
कंटेनर रनटाइम ओवरले फाइलसिस्टम का उपयोग करते हैं। जब दो कंटेनर एक ही इमेज लेयर साझा करते हैं, तो कर्नेल उनकी फ़ाइल पढ़ने को समान पेज-कैश पृष्ठों से प्रस्तुत करता है।
हमलावर अपनी PoC इमेज को लक्ष्य विशेषाधिकारित DaemonSet के समान आधार इमेज से FROM बनाता है। क्योंकि दोनों कंटेनर एक ही ओवरले लोअर-डीर साझा करते हैं, साझा लेयर में बाइनरी समान पेज-कैश पृष्ठों पर मैप होती हैं।
जब अविशेषाधिकारित PoC कंटेनर एक बाइनरी के पेज कैश को दूषित करता है, तो भ्रष्टाचार उसी नोड पर विशेषाधिकारित कंटेनर को तुरंत दिखाई देता है — बिना किसी क्रॉस-कंटेनर संचार के।
जब विशेषाधिकारित DaemonSet अगली बार किसी दूषित बाइनरी को निष्पादित करता है (अपने सामान्य संचालन चक्र के माध्यम से), तो कर्नेल दूषित पेज-कैश पृष्ठों को लोड करता है। हमलावर का पेलोड DaemonSet के पूर्ण विशेषाधिकारों के साथ चलता है — जिसमें संभावित रूप से शामिल हैं:
इस PoC में पेलोड (payload/payload.c) बस होस्ट रूट फाइलसिस्टम को माउंट करता है और नोड-स्तरीय कोड निष्पादन के प्रमाण के रूप में /root/res में एक मार्कर फ़ाइल लिखता है।
┌──────────────────────────┐ ┌──────────────────────────┐
│ PoC Container │ │ Privileged DaemonSet │
│ (unprivileged) │ │ (e.g. kube-proxy, │
│ │ │ monitoring agent, etc.)│
│ 1. Open target binary │ │ │
│ (read-only) │ │ │
│ │ │ │
│ 2. AF_ALG splice race │ │ │
│ corrupts page cache │ │ │
│ │ │ │ │
└──────────┼───────────────┘ └──────────────────────────┘
│ │
▼ │
┌─────────────────────┐ │
│ Kernel Page Cache │ │
│ │◄────────────────────┘
│ Shared-layer binary │ 3. DaemonSet executes the
│ (CORRUPTED) │ corrupted binary
│ contains attacker's │ → loads corrupted pages
│ payload bytes │ → payload runs with
└─────────────────────┘ DaemonSet's privileges
PoC को निम्नलिखित प्रबंधित Kubernetes प्लेटफ़ॉर्मों पर सफलतापूर्वक मान्य किया गया है:
| गुण | मान |
|---|---|
| प्लेटफ़ॉर्म | Alibaba Cloud Container Service for Kubernetes (ACK) |
| Kubernetes | v1.35.2 |
| नोड कर्नेल | 6.6.88-4.2.alnx4.x86_64 |
| kube-proxy | registry-cn-*.ack.aliyuncs.com/acs/kube-proxy:v1.35.2-aliyun.1 |
| आधार इमेज | registry.k8s.io/kube-proxy:v1.35.2 (upstream) |
| रूट डिवाइस | /dev/vda3 (ext4) |

| गुण | मान |
|---|---|
| प्लेटफ़ॉर्म | Amazon Elastic Kubernetes Service (EKS) |
| Kubernetes | v1.35.4 |
| नोड कर्नेल | 6.12.79-101.147.amzn2023.x86_64 |
| kube-proxy | ***.dkr.ecr.***.amazonaws.com.cn/eks/kube-proxy:v1.35.3-eksbuild.2 |
| आधार इमेज | public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-iptables:2026-03-11-1773190710.2023 |
| रूट डिवाइस | /dev/nvme0n1p1 (xfs) |