Copy Fail – CVE-2026-31431
(copy.fail)- 2017 के बाद से सभी Linux distributions में root privileges हासिल किए जा सकने वाला container escape privilege escalation vulnerability
- यह Linux kernel के cryptographic module (
authencesn) में मौजूद एक साधारण logic flaw का फायदा उठाता है, और जटिल timing coordination (race condition) या kernel version के हिसाब से tuning के बिना सिर्फ 732-byte की एक Python script से चलाया जा सकता है - इसका मुख्य सिद्धांत Linux द्वारा फ़ाइल चलाते समय संदर्भित किए जाने वाले memory cache (page cache) को बदलना है, जिसमें
AF_ALG(kernel cryptographic socket) औरsplice()(data copy system call) को जोड़कर setuid binary की cached copy में 4 bytes overwrite किए जाते हैं- वास्तविक disk पर मौजूद फ़ाइल नहीं बदलती, इसलिए यह stealth attack है जिसका निशान forensic disk image में नहीं बचता
- reboot होने या memory मुक्त होने पर cache फिर मूल रूप में लौट आता है, इसलिए पारंपरिक file integrity checks से बाद में पता लगाना मुश्किल होता है
- क्योंकि page cache पूरे host में shared होता है, Kubernetes environment में अगर एक pod इस vulnerability का उपयोग करे तो host node पर कब्ज़ा करके दूसरे tenants के containers तक पहुँचने वाला container escape संभव है
- इसे Ubuntu 24.04, Amazon Linux 2023, RHEL 10.1, SUSE 16 पर सीधे verify किया गया, और केवल unprivileged local user account होने पर network access या kernel debugging features के बिना यह तुरंत काम करता है
- मौजूदा Linux privilege escalation (LPE) vulnerabilities आम तौर पर प्रति प्रयास 30~80% success rate रखती हैं और केवल कुछ खास kernel ranges में काम करती हैं, लेकिन Copy Fail एक ही प्रयास में 100% success rate के साथ 9 साल (2017~2026) तक सभी distributions को प्रभावित करता है
- इसी page cache manipulation family की Dirty Pipe (pipe buffer flags का दुरुपयोग) और Dirty Cow (timing race की आवश्यकता) के विपरीत, इसमें न race condition है, न distribution-specific offsets, न recompilation की ज़रूरत, इसलिए यह कहीं अधिक सरल और शक्तिशाली है
- सबसे तात्कालिक जोखिम वाले लक्ष्य: multi-tenant Linux hosts, Kubernetes/container clusters, CI runners (GitHub Actions self-hosting, GitLab runners आदि), user code चलाने वाले cloud SaaS — यानी हर वह environment जहाँ untrusted code shared kernel पर चलता है
- सबसे पहली प्राथमिकता kernel patch (
a664bf3d603dmainline commit) है — 2017 में जोड़ी गई cryptographic module की in-place optimization को वापस लेकर यह सुनिश्चित किया गया है कि page cache pages cryptographic operations के write target में शामिल न हों - patch से पहले अस्थायी उपाय के तौर पर
algif_aeadmodule को disable किया जा सकता है, और dm-crypt/LUKS·kTLS·IPsec·SSH जैसी सामान्य encryption features पर कोई असर नहीं पड़ता - container, sandbox, CI runner जैसे untrusted workload environments में patch की स्थिति से अलग seccomp के ज़रिए
AF_ALGsocket creation को block करने की सिफारिश की जाती है - Xint के Taeyang Lee ने यह शुरुआती insight निकाली कि "
splice()जिस तरह page cache pages को encryption subsystem तक पहुँचाता है, वह एक अनछुई bug class है", और Xint Code ने kernel केcrypto/subsystem को लगभग 1 घंटे में अपने-आप scan करके इसे खोज निकाला — यह AI-assisted vulnerability detection का एक उदाहरण है
5 टिप्पणियां
लगता है Rocky Linux के लिए अभी तक पैच नहीं आया है
RHEL
Almalinux
Rocky Linux
मैं Rock Linux इस्तेमाल कर रहा हूँ, और अगर आप reboot नहीं कर सकते हैं तो https://github.com/wgnet/wg.copyfail.patch का bpftool से block करना प्रभावी है.
https://kb.ciq.com/article/rocky-linux/rl-cve-2026-31431-mitigation
पैच मौजूद है, लेकिन... यह सिर्फ subscription service repository में ही दिया जा रहा है। CE version पर पैच लागू नहीं है। (9.7, 10.1 की पुष्टि)
2026-05-05 को patch आ गया था.
2026-05-10 को एक नया security option है.
https://forums.rockylinux.org/t/…
sudo dnf --enablerepo=security update
लगता है कि security repository जोड़ने पर, RHEL source reflection से अलग भी security measures लागू किए जा सकते हैं.
जो लोग Ubuntu इस्तेमाल कर रहे हैं, उनके लिए कार्रवाई के तरीके की गाइड जारी हो गई है, इसलिए उसे देखकर संदर्भ लिया जा सकता है.
https://discourse.ubuntu.com/t/…
Hacker News की राय
Linux kernel crypto code के साथ काम करने के नज़रिए से, बार-बार सामने आने वाले AF_ALG exploit वाकई बेहद निराशाजनक हैं
AF_ALG बहुत पहले kernel में बिना पर्याप्त review के आ गया था, इसकी संरचना बहुत जटिल है, और यह non-privileged userspace programs के लिए बहुत बड़ा attack surface खोल देता है
ऊपर से इसकी ज़रूरत भी लगभग नहीं है। userspace में पहले से अपने crypto code मौजूद हैं, और kernel crypto code मूल रूप से dm-crypt जैसे kernel-internal use cases के लिए था
इस exploit में इस्तेमाल हुआ authencesn भी असल में IPsec का एक internal implementation detail है, इसलिए इसे general-purpose userspace encryption/decryption API के रूप में expose करना शुरू से ही गलत फैसला लगता है
अगर आप Linux kernel configuration मैनेज करते हैं, तो सभी CONFIG_CRYPTO_USER_API_* options बंद करने की मैं ज़ोरदार सिफारिश करता हूँ
सिर्फ ऐसा कर देने से ही इस bug के अलावा AF_ALG के कई पुराने और भविष्य के bugs का exploitation असंभव हो जाता
अगर इससे कोई userspace program टूटता है, तो बेहतर है उसे userspace crypto code पर migrate करने में मदद की जाए, और वास्तव में कुछ चीज़ें पहले ही इस दिशा में बदली जा चुकी हैं
शुरू से ही AF_ALG का इस्तेमाल exploit के अलावा बहुत ज़्यादा नहीं था
पहले ऐसे userspace APIs किसी तरह स्वीकार्य रहे होंगे, लेकिन अब syzbot और LLM-assisted bug finding के दौर में इन्हें बचाए रखना मुश्किल है
तर्क यह था कि kernel mode में ही उपलब्ध hardware accelerators को userspace से इस्तेमाल किया जा सकता है, keys को application memory में लंबे समय तक रखे बिना kernel को सौंपा जा सकता है, और embedded जैसी memory-constrained environments में userspace crypto libraries की तुलना में footprint घटाया जा सकता है
यह पर्याप्त रूप से मजबूत justification है या नहीं, यह मैं नहीं कह सकता, लेकिन कम से कम कोई वजह तो है
Linus को आम तौर पर इस बात पर काफ़ी सख़्त माना जाता है कि kernel में क्या जाना चाहिए, इसलिए ऐसी API अंदर आने की पृष्ठभूमि दिलचस्प होगी
इससे hashing और encryption को सामान्य
read(2)/write(2)calls के माध्यम से संभाला जा सकता हैऐसा लगता है कि disclosure process में कुछ गड़बड़ी हुई थी
vendors इस vulnerability को गंभीरता से नहीं ले रहे थे, और इसी वजह से कई distributions में यह अब तक unpatched बनी हुई थी
https://access.redhat.com/security/cve/cve-2026-31431 पर "Moderate severity", "Fix deferred" लिखा था, और Debian, Ubuntu, SUSE tracking pages पर भी कुछ ऐसा ही दिख रहा था
लेकिन upstream ने इसे स्पष्ट रूप से vulnerability के रूप में communicate नहीं किया, और Linus तथा Greg kernel में इस तरह की classification को सिद्धांततः बहुत महत्व नहीं देते
फिर भी अगर local से root privilege escalation संभव है, तो सामान्यतः इसे high priority माना जाना चाहिए
https://ubuntu.com/security/cves/about#priority
यह अफ़सोस की बात है कि कौन से kernel versions vulnerable हैं और किन versions में patch आया, यह मुख्य लेख में तुरंत नहीं लिखा गया
खासकर इसलिए क्योंकि यह built-in module है, जिसे
rmmodसे आसानी से हटाया भी नहीं जा सकताFedora 44 के kernel 6.19.14 के vulnerable होने की पुष्टि करने के लिए खोजते हुए मुझे linux-cve-announce mailing list की यह पोस्ट मिली: https://lore.kernel.org/linux-cve-announce/2026042214-CVE-2026-31431-3d65@gregkh/T/#u
वहाँ लिखा था कि इसे 6.18.22, 6.19.12, और 7.0 में संबंधित commits से ठीक किया गया, इसलिए वह संदर्भ उपयोगी रहा
अगर आप यह देखना चाहते हैं कि सुझाए गए mitigation के मुताबिक kernel module
algif_aeadको modprobe settings से block किया गया है या नहीं, तो obfuscated shell code पूरा चलाने की ज़रूरत नहीं हैनीचे दिए गए कुछ Python lines से साफ़-साफ़ देखा जा सकता है कि module वास्तव में load हो रहा है या नहीं
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("algif_aead probably successfully loaded, mitigation not effective; remove again with: rmmod algif_aead")'अगर mitigation सही से लागू हुई है, तो
modprobe algif_aeadभी error के साथ fail होना चाहिएप्रभावित operating systems पर पूरी तरह autonomous AI agents को सामान्य user privileges के साथ चलाने वाला शायद कोई नहीं होगा
लेकिन अगर इसे zero-day prompt injection के साथ जोड़ा जाए, तो यह काफ़ी विनाशकारी हो सकता है
curl | shसे install करना उद्योग का standard नहीं बना दियाLPE का मतलब local privilege escalation है
security वाले short forms बहुत ज़्यादा होते हैं, और संदर्भ से समझा जा सकता था, लेकिन फिर भी शुरुआत में इसे पूरा लिखना बेहतर होता
फिर भी अगर लेख व्यापक पाठक-वर्ग के लिए लिखा गया हो, तो इसे स्पष्ट रूप से define करना बेहतर है, इस बात से मैं सहमत हूँ
ऊपर से पूरा लेख कुछ हद तक AI-generated भी लगता है
यह थोड़ा मज़ेदार है
पेज पर लिखा है कि यह RHEL 14.3 पर काम करता है, जबकि ऐसा कोई version मौजूद ही नहीं है
अभी RHEL 10.x पर है, इसलिए मुझे लगा मानो किसी ने TARDIS पकड़ ली हो
कभी-कभी यह
gcc (GCC) 14.3.1 20250617 (Red Hat 14.3.1-2)की तरह दिखता है, और नीचे दिए उदाहरणों में भी ऐसा ही कुछ नज़र आता हैhttps://github.com/anthropics/claude-code/issues/40741
https://docs.oracle.com/en/database/oracle/tuxedo/22/otxig/software-requirements-red-hat-enterprise-linux-10-64-bit.html
6.12.0-124.45.1.el10_1भी लिखा है, जो साफ़ तौर पर RHEL 10 kernel हैइस तरह की typo इंसान अक्सर करते हैं
लंबे copy-paste किए हुए नंबर सही रहते हैं, लेकिन आसान नंबर हाथ से टाइप करते हुए ग़लत हो जाते हैं
issue समझाने के लिए जानकारी जल्दी-जल्दी इकट्ठी की गई थी, और हाँ, इसमें marketing का पहलू भी था
इसलिए कुछ छोटी गलतियाँ आ गईं, और उन्हें पकड़ने के लिए धन्यवाद
https://access.redhat.com/articles/red-hat-enterprise-linux-release-dates
और जब पेज के नीचे "Talk to our security experts" भी दिखा, तो मन में आया कि कहीं उस security expert का नाम Claude तो नहीं
RHEL 9/10 में algif_aead module नहीं बल्कि built-in था, इसलिए उसे unload नहीं किया जा सकता था
इसलिए मैंने दूसरे विकल्प के रूप में systemd के ज़रिए AF_ALG को block करने का तरीका खोजा, और हर exposed service के लिए drop-in चाहिए
आम तौर पर अहम
sshdऔरuser@को संभालने वाला एक Ansible playbook भी हैhttps://gist.github.com/m3nu/c19269ef4fd6fa53b03eb388f77464da
initcall_blacklist=algif_aead_initको kernel boot option में जोड़कर reboot करने का तरीका भी काम करता थाऐसा करने के बाद exploit अब नहीं चला
cronjob,slurmjobजैसे दूसरे execution paths का क्या होगा, यह चिंता रहती है, और काश individual services के बजाय systemd स्तर पर ऐसा कोई तरीका हो जिससे सभी processes इसे inherit करेंयह exploit शायद SUID binary को बदलकर उसे PID 0 के रूप में चलाने वाली तकनीक का इस्तेमाल करता है
लेकिन साइट यह भी दावा करती है कि इससे Kubernetes / container clusters, CI runners & build farms से escape किया जा सकता है, जबकि वास्तव में containers या खासकर user namespace escape के समर्थन में कोई ठोस विवरण नहीं दिखता
rootless Podman में चलाकर देखा तो उम्मीद के मुताबिक container से बाहर नहीं निकला
साथ ही "2017 के बाद जारी हुई सभी Linux distributions पर root बन जाता है" जैसा दावा भी किया गया, जबकि असली tests सिर्फ चार पर हुए थे, और Alpine पर तो यह चला ही नहीं
"Next: "From Pod to Host," how Copy Fail escapes every major cloud Kubernetes platform."ऐसा teaser भी दिया गया हैhttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72548b093ee3
हालांकि वास्तविक exploitability इस बात पर निर्भर करेगी कि target नवीनतम major release है या किसी पुराने branch का maintained kernel
फिर भी जब मैंने PoC को 24.04 instance पर सीधे चलाकर देखा, तो vulnerability खुद असली लगी और काफ़ी बड़ा मुद्दा भी
लेकिन प्रभावित distributions की संख्या दावे से काफ़ी कम लगती है, और 2017 के बाद की सभी distributions जैसी बात अतिशयोक्ति लगती है
उदाहरण के लिए, अगर मेरी समझ सही है, तो Ubuntu 16.04 EOL भी थोड़ा प्रभावित है, लेकिन मुख्य असर हाल में deploy होने लगे vendor kernels जैसे
linux-gcp,linux-oracle-6.7जैसी 6.17 series पर ज़्यादा दिखता हैबस उसके लिए अतिरिक्त steps चाहिए होंगे, और Alpine में भी मूल vulnerability मौजूद हो सकती है, बस script adjustments की ज़रूरत हो
आखिरकार यह कोई polished universal exploit नहीं, बल्कि एक PoC है
पेज खुद थोड़ा vibecoded और promotional लगता है, लेकिन vulnerability असली है और risk भी ऊँचा लगता है
आज बड़ा security update क्यों आया, यह अब समझ में आता है, इसलिए updates की priority बढ़ानी चाहिए
वे असली bugs ढूँढकर और patches दिलवाकर OSS ecosystem में meaningful contribution भी कर रहे हैं, और साथ में अपने security tools भी बेच रहे हैं
लेकिन आजकल web pages हाथ से कौन बनाता है, और खासकर अगर सामने वाले kernel developers हों, तो यह और भी स्वाभाविक लगता है