
Ansible प्लेबुक जो Debian/Ubuntu/RHEL फ्लीट्स में CVE-2026-31431 (Copy Fail) के लिए कर्नेल cmdline मिटिगेशन का पता लगाने और लागू करने हेतु है, जिसमें केवल-पठनीय डिटेक्शन और idempotent apply शामिल है।
CVE-2026-31431 ("कॉपी फेल") के लिए कर्नेल-कमांडलाइन शमन का पता लगाएं और लागू करें, जो Ansible का उपयोग करके Debian / Ubuntu / RHEL-परिवार के फ्लीट में होता है।
यह CVE Linux कर्नेल के algif_aead AF_ALG इंटरफ़ेस में एक स्थानीय विशेषाधिकार-वृद्धि दोष है। कोई भी अन-प्रिविलेज्ड स्थानीय उपयोगकर्ता — जिसमें www-data, mysql जैसे सेवा खाते, या RCE-प्रभावित वेब ऐप के अंदर चल रहे प्रोसेस शामिल हैं — इसे कुछ ही syscalls में रूट तक चेन कर सकता है। यह बग 2017 से शिप किए गए हर प्रमुख डिस्ट्रो को प्रभावित करता है।
initcall_blacklist=algif_aead_init जोड़ें — जब -e apply_mitigation=true के साथ आह्वान किया जाए।कर्नेल कमांडलाइन ब्लैकलिस्ट दोनों बिल्ट-इन (RHEL परिवार) और मॉड्यूलर (Debian/Ubuntu) कॉन्फ़िगरेशन पर काम करती है, जो अक्सर उद्धृत modprobe blacklist algif_aead वर्कअराउंड नहीं करता।
algif_aead_init() वह कर्नेल फ़ंक्शन है जो बूट पर क्रिप्टो सॉकेट सबसिस्टम के साथ aead AF_ALG एल्गोरिदम को पंजीकृत करता है। कमांडलाइन पैरामीटर initcall_blacklist=algif_aead_init कर्नेल को उस initcall को छोड़ने का निर्देश देता है। कमजोर कोड अभी भी कर्नेल बाइनरी में है, लेकिन socket(AF_ALG, ..., "aead") ENOENT लौटाता है, इसलिए एक्सप्लॉइट का पहला syscall विफल हो जाता है। कोई पहुंच योग्य सतह नहीं, कोई विशेषाधिकार वृद्धि नहीं।
एक बार विक्रेता पैच किए गए कर्नेल शिप कर देते हैं और आप उनमें रीबूट कर लेते हैं, तो शमन की आवश्यकता नहीं रहती और इसे हटाया जा सकता है।
# 1. पता लगाएं (केवल-पठनीय) — प्रति-होस्ट स्थिति रिपोर्ट उत्पन्न करता है
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. पहले एक ही होस्ट पर शमन को स्टेज करें (कोई ऑटो-रीबूट नहीं)
ansible-playbook -i inventory --limit <ip-or-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. उस होस्ट को अपने सामान्य तंत्र से रीबूट करें
# 4. फिर से पता लगाएं; "Mitigation active: yes" की पुष्टि करें
# 5. बाकी फ्लीट में बैचों में रोल आउट करें
कमजोर होस्ट की रिपोर्ट इस तरह दिखती है:
═══════════════════════════════════════════
Host: 192.168.1.42
Distro: Ubuntu 24.04
Kernel: 6.8.0-60-generic
Mitigation active: no
Mitigation staged: no
═══════════════════════════════════════════
⚠️ 192.168.1.42: CVE-2026-31431 mitigation is NOT active.
इस रेसिपी के दायरे से बाहर। मैनुअल वन-लाइनर्स:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# RHEL परिवार
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
डिटेक्ट पथ सख्ती से केवल-पठनीय है (uname, /proc/cmdline पढ़ना, /etc/default/grub पढ़ना, grubby --info=ALL)। प्रोब failed_when: false का उपयोग करते हैं ताकि अप्रत्याशित आउटपुट कभी भी प्ले को रोक न सके। ignore_unreachable: true का मतलब है कि जिन होस्ट तक आप नहीं पहुंच सकते, उन्हें रन को विफल करने के बजाय स्पष्ट "UNREACHABLE — treat as VULNERABLE" चेतावनी मिलती है।
एप्लाई पथ block/rescue में लपेटा गया है ताकि एक खराब होस्ट कभी भी बाकी को न रोके। ग्रब संपादन idempotent है और mitigation_staged पर गेटेड है ताकि पुनः-रन no-ops हों।
bash tests/run-checks.sh all
स्टेज: lint (yamllint + ansible-lint) → syntax (ansible-playbook --syntax-check) → dry-run (प्लेबुक को --check मोड में localhost पर -c local के साथ निष्पादित करता है, दोनों डिटेक्ट और एप्लाई पथ)। यही स्क्रिप्ट GitHub Actions मैट्रिक्स द्वारा debian:12, ubuntu:22.04, ubuntu:24.04, और almalinux:9 कंटेनरों में हर पुश और पुल रिक्वेस्ट पर आह्वान की जाती है।
ड्राई-रन क्या सत्यापित नहीं करता:
update-grub नहीं चलाता, या रीबूट ट्रिगर नहीं करता।/proc/cmdline रनर होस्ट की कमांडलाइन दिखाता है, कंटेनर की नहीं, इसलिए CI आउटपुट में mitigation_active अर्थहीन है। CI साबित करता है कि प्लेबुक स्वच्छ रूप से चलती है; यह साबित नहीं करता कि होस्ट शमित है।अधिक के लिए tests/README.md देखें।
कमजोरी की खोज Taeyang Lee (Theori) द्वारा की गई और Xint Code Research Team द्वारा एक पूर्ण एक्सप्लॉइट चेन में हथियारबद्ध की गई, जो सुरक्षा समुदाय का ध्यान आकर्षित करने का श्रेय पाते हैं। यह रेसिपी केवल उनके द्वारा अनुशंसित शमन को स्वचालित करती है।
Beerware। LICENSE देखें। TL;DR: इसके साथ जो चाहें करें; अगर हम कभी मिलें, मुझे एक बीयर खरीद दें।
AESTECHNO — Hugues Orgitello — इलेक्ट्रॉनिक्स डिज़ाइन हाउस, मोंटपेलियर, फ्रांस।