
nftables ingress नियमसेट जो CVE-2026-98432 use-after-free को कम करने के लिए IP विकल्प ले जाने वाले IPv4 TCP SYN को ड्रॉप करते हैं, प्रति-स्रोत काउंटर और लॉगिंग के साथ।
CVE-2026-98432 के लिए nftables शमन: IPv4 TCP SYN को ड्रॉप करें जिनमें IP विकल्प हों, जितनी जल्दी nftables कर सके।
यह CVE IPv4 TCP request-socket पथ (ireq->ireq_opt / inet_opt, जिसे ip_options_build() में पढ़ा जाता है) में use-after-free है। उचित समाधान कर्नेल अपडेट है; यह केवल तब तक जोखिम कम करता है जब तक आपके पास एक न हो।
ireq->ireq_opt एक ही स्थान पर सेट होता है, tcp_v4_init_req() में, उस SYN के विकल्पों से जो request socket खोलता है; रेसिंग पुनःप्रेषित SYN केवल वही पढ़ता है जो वहाँ सहेजा गया था, और CVE परिदृश्य में हमलावर Record Route या Timestamp विकल्पों के साथ SYN भेजता है। इसलिए विकल्पों वाला SYN ही वह पैकेट है जो मायने रखता है। Request socket migration उसी सहेजे गए ireq_opt का पुनःउपयोग करता है। यह कर्नेल स्रोत और CVE पाठ पर आधारित है, इस बात पर नहीं कि CVE लेखकों ने कहा हो कि केवल SYN पर्याप्त है; रूढ़िवादी संस्करण के लिए नियमों से tcp flags & (syn | ack) == syn मिलान हटा दें।
IFACES को उन NICs पर सेट करें जो बाहरी ट्रैफ़िक प्राप्त करते हैं, फिर sudo nft -f simple.nft चलाएँ। रूलसेट यह है:
define IFACES = { eth0 }
table netdev cve_2026_98432 {
chain ingress {
type filter hook ingress devices = $IFACES priority -500; policy accept;
ip protocol tcp ip hdrlength > 5 tcp flags & (syn | ack) == syn limit rate 5/second burst 10 packets log prefix "CVE-2026-98432 drop: " level warn
ip protocol tcp ip hdrlength > 5 tcp flags & (syn | ack) == syn counter drop
}
}
-500 पर netdev ingress पहला netfilter हुक है, जो prerouting, conntrack और routing से पहले आता है। XDP अभी भी इससे पहले चलता है।ip hdrlength > 5 32-बिट शब्दों में IPv4 IHL है; 5 से अधिक का अर्थ है विकल्प।tcp flags & (syn | ack) == syn ACK के बिना SYN है।counter कुल है।इसे देखें: sudo nft list chain netdev cve_2026_98432 ingress और journalctl -k -g 'CVE-2026-98432'।
fancy.nftfancy.nft वही ड्रॉप है साथ में एक नामित कुल काउंटर और प्रति-पता काउंटर, जो दो गतिशील सेट में रखे जाते हैं। यह IP विकल्पों वाले हर अन्य TCP पैकेट को भी गिनता और लॉग करता है (पास किया गया, ड्रॉप नहीं), लॉग पंक्ति में विकल्प बाइट्स के साथ (flags ip options, उपसर्ग CVE-2026-98432 ip-options: ):
| काउंटर | कहाँ | क्या दिखाता है |
|---|---|---|
| total | नामित काउंटर dropped_total | IP विकल्पों वाले SYN, ड्रॉप किए गए |
| other | नामित काउंटर options_other | IP विकल्पों वाले अन्य TCP, पास किए गए |
| प्रति स्रोत IP | सेट by_src | प्रति ड्रॉप किए गए स्रोत पते के पैकेट और बाइट्स |
| प्रति स्रोत . गंतव्य | सेट by_pair | वही प्रति (स्रोत, गंतव्य) युग्म |
| विकल्पों का उपयोग करने वाला कोई भी IP | सेट options_by_src | विकल्पों वाले हर IPv4 पैकेट के लिए प्रति स्रोत पते के पैकेट और बाइट्स, किसी भी प्रोटोकॉल (TCP, UDP, ICMP...), जिसमें ड्रॉप किए गए SYN भी शामिल हैं |
sudo nft -f fancy.nft
sudo ./cve-log.sh # counters, then follow the kernel log
sudo ./cve-log.sh -c # counters only
sudo ./cve-log.sh -r # reset the total and the per-IP sets
या सीधे:
sudo nft list counter netdev cve_2026_98432 dropped_total
sudo nft list counter netdev cve_2026_98432 options_other
sudo nft list set netdev cve_2026_98432 by_src
sudo nft list set netdev cve_2026_98432 by_pair
sudo nft list set netdev cve_2026_98432 options_by_src
प्रत्येक तत्व का अपना पैकेट और बाइट काउंटर है और अपने अंतिम हिट के 1h बाद समाप्त होता है। प्रत्येक सेट अधिकतम 65535 प्रविष्टियाँ रखता है; जब कोई भर जाता है तो नए पते ट्रैक नहीं होते, लेकिन पैकेट फिर भी ड्रॉप होता है। स्रोत पते spoof किए जा सकते हैं, इसलिए प्रति-IP काउंटर दिखाते हैं कि पैकेटों ने क्या दावा किया, न कि किसने भेजा।
sudo nft delete table netdev cve_2026_98432 से किसी भी संस्करण को हटाएँ।
कोई भी संस्करण रीबूट के बाद नहीं टिकता; /etc/nftables.conf से फ़ाइल को शामिल करें।
fancy.nft टेबल जोड़ता है और केवल नियमों को फिर से बनाता है, इसलिए पुनः लोड करने पर
काउंटर बने रहते हैं; उन्हें रीसेट करने या किसी सेट को बदलने के लिए पहले
nft delete table netdev cve_2026_98432 चलाएँ। काउंटर कर्नेल मेमोरी में रहते हैं और रीबूट के बाद नहीं बचते।