
CVE-2026-98432 / RHSB-2026-016 के लिए eBPF (XDP/tc) शमन - प्रारूप
CVE-2026-98432 ([RHSB-2026-016]) के लिए प्रकाशित नेटवर्क शमन का एक eBPF कार्यान्वयन: Linux कर्नेल की IPv4 TCP कनेक्शन-अनुरोध हैंडलिंग में दूरस्थ रूप से ट्रिगर होने वाला use-after-free। Red Hat इसे Critical श्रेणी में रखता है।
[!WARNING] प्रारंभिक रिलीज़: CI-परीक्षित, अभी तक फ़ील्ड-परीक्षित नहीं। प्रत्येक पुश Ubuntu 24.04 पर, AlmaLinux 8.10, 9.8 और 10.2 VMs (RHEL-संगत कर्नेल 4.18, 5.14 और 6.12) में, और Cilium चलाने वाले 2-नोड Kubernetes (kind) क्लस्टर पर, सभी वर्चुअल इंटरफ़ेस के साथ, एंड-टू-एंड परीक्षण चलाता है। इसे अभी तक फ़िज़िकल NICs, bonds या VLANs पर, OpenShift पर, या वास्तविक RHEL पर परीक्षण नहीं किया गया है (देखें परीक्षित प्लेटफ़ॉर्म)। पहले इसे किसी गैर-प्रोडक्शन होस्ट पर आज़माएँ। परिणामों की रिपोर्ट, अच्छी हों या बुरी, बहुत स्वागत योग्य हैं।
यह प्रोग्राम IP विकल्प वाले इनबाउंड IPv4 TCP पैकेट (IP हेडर लंबाई > 5 शब्द) को ड्रॉप करता है। यह विक्रेता के nftables नियम के समान ही फ़िल्टर है:
ip protocol tcp ip hdrlength > 5 counter drop
यह VXLAN (UDP 4789, 8472) और Geneve (UDP 6081) ओवरले के आंतरिक पैकेट पर भी वही जाँच लागू करता है। इस तरह, नोड्स के बीच का Kubernetes pod-to-pod ट्रैफ़िक भौतिक इंटरफ़ेस पर ही गिरा दिया जाता है, इससे पहले कि Cilium जैसा कोई CNI प्लगइन उसे किसी pod तक पहुँचा सके। यह XDP के रूप में चलता है जहाँ ड्राइवर इसका समर्थन करता है, और बाकी सभी जगह tc ingress के रूप में।
इसे चलाने के दो तरीके हैं, दोनों में वही फ़िल्टर और वही सेटिंग्स हैं:
cve-2026-98432-ebpf), जो ip और tc का उपयोग करता है और एक systemd सेवा और टाइमर द्वारा संचालित होता है। इसे ऑडिट करना सबसे आसान है।cve-2026-98432-ebpfd), एक एकल स्टैटिक बाइनरी। यह नए इंटरफ़ेस को तुरंत कवर करता है, tc पर CNI प्रोग्रामों से पहले चलता है, और क्रैश होने पर भी फ़िल्टर को अटैच रखता है। देखें शेल लोडर या Go डेमॉन?[!IMPORTANT] यह एक अस्थायी उपाय है जो जोखिम को कम करता है, यह बग को ठीक नहीं करता। एकमात्र पूर्ण उपचार एक फ़िक्स्ड कर्नेल है। जब हर होस्ट पर एक फ़िक्स्ड कर्नेल चलने लगे तो इस शमन को हटा दें (देखें हटाना)।
यह एक स्वतंत्र सामुदायिक परियोजना है। इसका Red Hat या किसी भी Linux वितरक से कोई संबंध नहीं है और न ही उनके द्वारा इसका समर्थन किया जाता है। वर्तमान मार्गदर्शन के लिए [बुलेटिन][RHSB-2026-016] देखें।
nftables नियम काम करता है, और अगर यह आपके वातावरण के अनुकूल है, तो इसका उपयोग करें। यह परियोजना उन वातावरणों के लिए है जहाँ यह उपयुक्त नहीं है:
| nftables नियम | यह परियोजना | |
|---|---|---|
| पैकेट कहाँ गिराए जाते हैं | netfilter input हुक (skb आवंटन, IP डीफ़्रैग और रूटिंग के बाद) | XDP: ड्राइवर में, skb बनने से पहले। tc: netfilter से पहले |
| कवरेज | केवल स्थानीय रूप से संबोधित ट्रैफ़िक | रूट किया गया और फ़ॉरवर्ड किया गया ट्रैफ़िक भी, जैसे Kubernetes pods को जाने वाले पैकेट, VXLAN/Geneve ओवरले के अंदर वाले पैकेट सहित |
| फ़ायरवॉल प्रबंधकों के साथ अंतःक्रिया | एक अलग टेबल जिसे स्थायी रूप से सहेजना होता है और जिसे नियमसेट को फिर से लिखने वाले टूल्स से बचाए रखना होता है | netfilter को बिल्कुल नहीं छूता |
| आवश्यकता | nftables | libbpf के साथ बना iproute2 |
| प्रति-इंटरफ़ेस | नहीं (वैश्विक) | हाँ, और लोडर इसे संभालता है (नीचे देखें) |
नवीनतम रिलीज़ में ये शामिल हैं:
-daemon RPM (Go डेमॉन) और सोर्स RPMcve-2026-98432-ebpf-<version>.tar.gzSHA256SUMSRPM लोडर, BPF ऑब्जेक्ट, कॉन्फ़िग फ़ाइल और systemd यूनिट्स को इंस्टॉल करता है, और iproute-tc को साथ लाता है। सेवा स्वचालित रूप से सक्षम नहीं होती है। अपने प्रमुख संस्करण (el8, el9 या el10) से मेल खाने वाला RPM चुनें:
sha256sum -c SHA256SUMS --ignore-missing # verify what you downloaded
sudo dnf install ./cve-2026-98432-ebpf-0.1.1-1.el9.x86_64.rpm
sudo systemctl enable --now cve-2026-98432-ebpf.service cve-2026-98432-ebpf-reconcile.timer
sudo cve-2026-98432-ebpf status
या, Go डेमन के लिए (एक या दूसरा उपयोग करें, दोनों नहीं; उनकी इकाइयाँ परस्पर विरोधी हैं):
sudo dnf install ./cve-2026-98432-ebpf-daemon-0.1.1-1.el9.x86_64.rpm
sudo systemctl enable --now cve-2026-98432-ebpfd.service
sudo cve-2026-98432-ebpfd status
Debian और Ubuntu पर, .debs का उपयोग करें (अगला अनुभाग)। अन्य वितरणों पर, स्रोत tarball से बिल्ड और इंस्टॉल करें (देखें Quick start)।
अपग्रेड करना नए RPM का dnf install है। सेवा पुनः आरंभ होती है ताकि नए
BPF ऑब्जेक्ट्स अटैच हो जाएं, और /etc/cve-2026-98432-ebpf.conf में आपके द्वारा किए गए संपादन
सुरक्षित रहते हैं।
RPM स्वयं बिल्ड करने के लिए, देखें packaging/rpm/build-rpm.sh के शीर्ष पर दिया गया टिप्पणी। प्रत्येक push पर, CI AlmaLinux कंटेनरों में RPMs बिल्ड करता है, प्रत्येक को AlmaLinux VM में इंस्टॉल करता है और उसका परीक्षण करता है, जिसमें systemd यूनिट्स भी शामिल हैं।
रिलीज़ में दो amd64 .debs भी हैं, जो प्रत्येक समर्थित रिलीज़ पर काम करते हैं: BPF ऑब्जेक्ट्स में कोई होस्ट कोड नहीं होता और डेमॉन एक स्टैटिक बाइनरी है। इनमें वही फ़ाइलें होती हैं जो RPMs में होती हैं, और ये भी सेवा को सक्षम नहीं करते:
sha256sum -c SHA256SUMS --ignore-missing
sudo apt install ./cve-2026-98432-ebpf_0.1.1-1_amd64.deb
sudo systemctl enable --now cve-2026-98432-ebpf.service cve-2026-98432-ebpf-reconcile.timer
sudo cve-2026-98432-ebpf status
या Go डेमॉन, ./cve-2026-98432-ebpf-daemon_0.1.1-1_amd64.deb, को RPM अनुभाग की तरह सक्षम किया गया है। Debian और Ubuntu tc को iproute2 में ही शामिल करते हैं, जो libbpf के साथ बनाया गया है।
इन्हें स्वयं बनाने के लिए,
packaging/deb/build-deb.sh चलाएँ। प्रत्येक push पर, CI
.deb फ़ाइलें बनाता है, उन्हें Ubuntu 24.04 पर इंस्टॉल करता है और इंस्टॉल की गई फ़ाइलों के विरुद्ध end-to-end और
systemd परीक्षण चलाता है। यह उन्हें Debian
12 और 13 तथा Ubuntu 22.04 और 24.04 पर भी इंस्टॉल करता है और वहाँ check चलाता है।
किसी git checkout या GitHub release से स्रोत tarball का उपयोग करें।
बनाने के लिए, आपको clang, llvm, libbpf-devel / libbpf-dev और
kernel UAPI हेडर की आवश्यकता होगी:
make
sudo make install
sudo cve-2026-98432-ebpf check # verify prerequisites
sudo systemctl enable --now cve-2026-98432-ebpf.service cve-2026-98432-ebpf-reconcile.timer
sudo cve-2026-98432-ebpf status
status प्रत्येक संरक्षित इंटरफ़ेस और उसे कैसे जोड़ा गया है, सूचीबद्ध करता है, साथ ही
गिराए गए पैकेटों की संख्या (काउंटर के लिए bpftool आवश्यक है):
eth0 XDP
wg0 tc
packets dropped: 3
systemd के बिना, सीधे sudo cve-2026-98432-ebpf apply और remove चलाएँ।
स्रोत से Go डेमन बनाने के लिए, आपको Go ≥ 1.22, clang और libbpf हेडर की आवश्यकता होगी:
cd go && go generate ./... && CGO_ENABLED=0 go build -o cve-2026-98432-ebpfd .
sudo ./cve-2026-98432-ebpfd run --mode auto # SIGTERM detaches
ip -V में libbpf का उल्लेख होना चाहिए। check
इसकी जाँच करता है। CI में AlmaLinux 8.10, 9.8 और 10.2 (iproute2 6.2
से 6.17) तथा Ubuntu 24.04 पर सत्यापित।tc: RHEL, AlmaLinux, Rocky और Fedora पर यह अलग से आता है,
iproute-tc पैकेज में (dnf install iproute-tc)।CAP_NET_ADMIN + CAP_BPF/CAP_SYS_ADMIN)।