
nftables रूलसेट और systemd यूनिट जो CVE-2026-98432 Linux कर्नेल use-after-free को कम करने के लिए IP विकल्प ले जाने वाले IPv4 TCP पैकेट्स को ड्रॉप करते हैं, जब तक कि पैच किया गया कर्नेल उपलब्ध न हो जाए।
Ubuntu 24.04 (noble) पर CVE-2026-98432 के लिए एक अस्थायी फ़ायरवॉल शमन, उन होस्ट्स के लिए जो सार्वजनिक TCP लिसनर उजागर करते हैं (जैसे पोर्ट 30303 पर एक Geth नोड) जबकि कोई ठीक किया गया कर्नेल अभी उपलब्ध नहीं है।
CVE-2026-98432 Linux कर्नेल के IPv4 TCP हैंडशेक कोड में एक use-after-free है। जब एक आने वाला SYN IPv4 IP विकल्प ले जाता है, तो वे विकल्प कॉपी किए बिना नए चाइल्ड सॉकेट को सौंप दिए जाते हैं; किसी अन्य CPU पर समवर्ती रूप से संसाधित एक पुनःप्रेषित SYN तब उन्हें मुक्त होने के बाद पढ़ सकता है। एक दूसरा ट्रिगर request-socket माइग्रेशन (net.ipv4.tcp_migrate_req=1 या एक BPF_SK_REUSEPORT_SELECT_OR_MIGRATE प्रोग्राम) के माध्यम से मौजूद है।
Ubuntu इसे उच्च प्राथमिकता (CVSS 3: 9.8) का दर्जा देता है। लेखन के समय, noble linux कर्नेल का फ़िक्स अभी भी प्रगति पर है।
MPTCP लिसनर एक अलग मामला नहीं हैं। Go 1.24+ बाइनरीज़ (हाल के Geth सहित) डिफ़ॉल्ट रूप से लिसनर को MPTCP के रूप में खोलती हैं, इसलिए ss उन्हें mptcp के रूप में दिखाता है। MPTCP सबफ़्लो उसी IPv4 TCP SYN पथ से गुज़रते हैं, इसलिए वे ठीक उतने ही उजागर हैं जितने सादे TCP। MPTCP को अक्षम करना (GODEBUG=multipathtcp=0) इसका शमन नहीं करता है।
अपनी स्वयं की तालिका में एक एकल nftables नियम, किसी भी IPv4 TCP पैकेट को छोड़ देता है जिसकी हेडर लंबाई 5 नहीं है (अर्थात् IP विकल्प ले जाने वाला कोई भी पैकेट) इससे पहले कि कर्नेल का TCP स्टैक उसे देखे:
ip protocol tcp ip hdrlength != 5 counter drop
ip hdrlength != 5) IGMP सदस्यता क्वेरीज़ को भी ड्रॉप कर देता था, जो Router Alert विकल्प लेकर आती हैं, और चुपचाप LAN मल्टीकास्ट (mDNS/Avahi, कास्टिंग) को तोड़ सकता है।inet cvefix) में रहता है, इसलिए यह ufw के साथ सह-अस्तित्व में रहता है और ufw रीलोड्स से अछूता रहता है।| फ़ाइल | इंस्टॉल करें | उद्देश्य |
|---|---|---|
nftables-cve-2026-98432.nft | /etc/nftables-cve-2026-98432.nft | रूलसेट (idempotent; दोबारा चलाना सुरक्षित है) |
cve-2026-98432.service | /etc/systemd/system/cve-2026-98432.service | वनशॉट यूनिट जो बूट पर रूलसेट लोड करती है |
इस नियम को
/etc/nftables.confमें न डालें। वह फ़ाइलflush rulesetसे शुरू होती है, जोnftables.serviceचलने पर ufw के नियमों को मिटा देगी।
git clone <this-repo> && cd <this-repo>
sudo install -m 0644 nftables-cve-2026-98432.nft /etc/nftables-cve-2026-98432.nft
sudo install -m 0644 cve-2026-98432.service /etc/systemd/system/cve-2026-98432.service
sudo systemctl daemon-reload
sudo systemctl enable --now cve-2026-98432.service
sudo nft list table inet cvefix
यह भी पुष्टि करें कि माइग्रेशन ट्रिगर बंद है (डिफ़ॉल्ट):
sysctl net.ipv4.tcp_migrate_req # expect: 0
nping इंस्टॉल करें। Ubuntu में यह nmap पैकेज के साथ आता है; कोई अलग nping पैकेज नहीं है:
sudo apt install nmap
पहले काउंटर को 0 पर रीसेट करने के लिए रूलसेट को फिर से लोड करें, फिर लूपबैक पर एक सामान्य SYN (बिना IP विकल्पों के) भेजें:
sudo nft -f /etc/nftables-cve-2026-98432.nft # reload; resets the counter to 0
sudo nping --tcp -p 30303 --flags syn -c 3 127.0.0.1
sudo nft list table inet cvefix
अपेक्षित: SA (SYN-ACK) उत्तर, जो दर्शाता है कि लिसनर अभी भी पहुँच योग्य है, और काउंटर packets 0 bytes 0 पर बना रहता है। यदि आपको कोई उत्तर नहीं मिलता है, तो nping लूपबैक पर कैप्चर करने में विफल हो सकता है; उस स्थिति में, इस परीक्षण और अगले परीक्षण को 127.0.0.1 के बजाय होस्ट के LAN IP के विरुद्ध चलाएँ।
वही SYN भेजें, इस बार एक IP विकल्प (Record Route) लेकर। लूपबैक ट्रैफ़िक prerouting हुक से गुज़रता है, इसलिए यह बीच में कुछ भी रखे बिना नियम का परीक्षण करता है:
sudo nping --tcp -p 30303 --flags syn --ip-options R -c 3 127.0.0.1
sudo nft list table inet cvefix
अपेक्षित: nping को कोई उत्तर नहीं मिलता (Lost: 3 (100.00%)), और काउंटर ठीक यह दर्शाता है:
ip protocol tcp ip hdrlength != 5 counter packets 3 bytes 240 drop
(3 प्रोब × 80 बाइट्स।)
रिमोट परीक्षण किसी नियम का परीक्षण केवल तभी करते हैं जब प्रोब वास्तव में होस्ट तक पहुँचता है। उसी LAN पर किसी अन्य मशीन से, होस्ट के LAN पते को लक्षित करें:
sudo nping --tcp -p 30303 --flags syn --ip-options R -c 3 <host-lan-ip>
फिर सुरक्षित होस्ट पर काउंटर जाँचें:
sudo nft list table inet cvefix
अपेक्षित: कोई उत्तर नहीं, और काउंटर 3 से बढ़ जाता है (यदि आपने पहले चरण 2 चलाया था तो packets 6 bytes 480 तक)।
बाहर से सार्वजनिक IP की जाँच करना आमतौर पर अनिर्णायक होता है। कई राउटर और ISP डिवाइस स्वयं IP-options पैकेट अस्वीकार कर देते हैं। एक विशिष्ट संकेत RA (reset) उत्तर है जिसमें उच्च TTL जैसे ttl=250 होता है, जो Linux होस्ट (प्रारंभिक TTL 64) के बजाय 255 के प्रारंभिक TTL वाले डिवाइस की ओर इंगित करता है। प्रोब कभी होस्ट तक नहीं पहुँचता, इसलिए काउंटर नहीं बढ़ता। चरण 4 दिखाता है कि कैसे पता लगाया जाए।
इन्हें संरक्षित होस्ट पर चलाएँ।
पुष्टि करें कि रिमोट प्रोब आते हैं। इसे शुरू करें, फिर दूसरी मशीन से चरण 3 का प्रोब दोहराएँ:
sudo tcpdump -ni any 'tcp port 30303 and (ip[0] & 0x0f) > 5'
| होस्ट पर tcpdump | nft काउंटर | nping उत्तर | अर्थ |
|---|---|---|---|
| पैकेट दिखाता है | बढ़ता है | कोई नहीं | शमन कार्य कर रहा है |
| पैकेट दिखाता है | अपरिवर्तित | SA | नियम सक्रिय नहीं है; nft list table inet cvefix जाँचें |
| कुछ नहीं | अपरिवर्तित | कोई नहीं या RA | प्रोब अपस्ट्रीम रुका हुआ है; LAN या loopback से परीक्षण करें |
पुष्टि करें कि और कुछ नहीं पकड़ा जा रहा है। काउंटर को कई मिनट तक अकेला छोड़ दें; इसे आपकी परीक्षण संख्या पर ही रहना चाहिए। गैर-TCP विकल्प-वाहक ट्रैफ़िक को आते हुए देखने के लिए (जिसे यह नियम जानबूझकर गुज़रने देता है):
sudo tcpdump -ni any '(ip[0] & 0x0f) > 5 and not tcp'
LAN राउटर से आने वाली IGMP क्वेरीज़ (जैसे igmp query v3 से 224.0.0.1 तक) सामान्य हैं और इनसे काउंटर नहीं बढ़ना चाहिए।
systemctl is-enabled cve-2026-98432.service # expect: enabled
sudo nft list table inet cvefix # table present
sysctl net.ipv4.tcp_migrate_req # expect: 0
यह एक अस्थायी उपाय है। पैच किए गए कर्नेल के लिए समय-समय पर जाँच करें:
uname -r
sudo pro fix CVE-2026-98432
जब कोई फ़िक्स उपलब्ध हो:
sudo apt update && sudo apt full-upgrade
sudo reboot
Livepatch (एक निःशुल्क व्यक्तिगत Ubuntu Pro सदस्यता के माध्यम से; pro status, canonical-livepatch status) रीबूट से बच सकता है, लेकिन इस CVE के लिए livepatch जारी होने की कोई गारंटी नहीं है।
एक बार ठीक किया गया कर्नेल चलाने के बाद (इसे रखना भी हानिरहित है):
sudo systemctl disable --now cve-2026-98432.service
sudo nft delete table inet cvefix
sudo rm /etc/systemd/system/cve-2026-98432.service /etc/nftables-cve-2026-98432.nft
sudo systemctl daemon-reload
पैच होने तक अतिरिक्त सुरक्षा के लिए, इनबाउंड 30303 को पूरी तरह से बंद किया जा सकता है (Geth आउटबाउंड पीयर्स के माध्यम से सिंक करना जारी रखता है, कम पीयर्स के साथ):
sudo ufw deny 30303/tcp
# later:
sudo ufw delete deny 30303/tcp