
CVE-2026-98432 के लिए Rust डिटेक्टर और स्थानीय लैब, जो inet_opt/ireq_opt में Linux IPv4 TCP use-after-free है: स्टैटिक ELF विश्लेषण, kprobe पहुँच-क्षमता जाँच, और एक रेस ट्रिगर।
inet_opt / ireq_opt)एक सादे IPv4 TCP लिसनर से पहुँचने योग्य Linux kernel use-after-free के लिए शोध PoC और स्थानीय लैब। यह एक बग डिटेक्टर/ट्रिगर है, एक्सप्लॉइट नहीं।
7.0.0-38-generic) पर कोड पथ असुरक्षित है:
inet_sock_destruct() और tcp_v4_reqsk_destructor() विकल्पों को
kfree_rcu() के बजाय kfree() से मुक्त करते हैं।kfree पथ रनटाइम पर पहुँचने योग्य है (kprobes)।free -> use घटनाएँ (via=reqsk) देखीं, और उन्हें विश्वसनीय रूप से
पुनरुत्पादित नहीं कर सके।tcp2kaslr संदर्भ रेपो भी बग ट्रिगर पर ही रुकता है; बाद के चरण
प्रकाशित नहीं हैं।CONFIG_KASAN बंद है और KFENCE सैंपलिंग अक्षम है।tcp2kaslr से)MPTCP की आवश्यकता नहीं है। सिद्ध पथ सादा IPv4 TCP है:
ireq_opt) पर सहेजता है।accept() करता है, SO_LINGER(0) सेट करता है और उसे बंद करता है।
inet_sock_destruct() विकल्पों को kfree() से मुक्त करता है।हमारा पहले का ट्रिगर दो तरह से गलत था: विक्टिम ने कभी चाइल्ड को accept/close नहीं किया
(free_sock=0), और हमने सर्वर क्लोज़ पर निर्भर रहने के बजाय एक RST भेजा।
वर्तमान कोड सही टुकड़े जोड़ता है:
listen --accept-close — accept + SO_LINGER(0) + close।--sync — ACK + डुप्लिकेट SYN समवर्ती रूप से, कोई RST नहीं, Record Route विकल्प।अपस्ट्रीम में फिक्स ठीक यही है:
- kfree(rcu_dereference_protected(inet->inet_opt, 1));
+ kfree_rcu(rcu_dereference_protected(inet->inet_opt, 1), rcu);
और tcp_v4_reqsk_destructor() में वही परिवर्तन।
| पथ | क्या |
|---|---|
rust-poc/ | नेटिव Rust PoC: स्टैटिक ELF विश्लेषण, kprobes, ट्रिगर मोड |
lab/ | पुराने स्थानीय परीक्षणों के लिए Alpine + PHP लूपबैक विक्टिम |
scripts/ | स्थानीय रीप्रो सहायक, अधिकृत ऑडिट सहायक |
docs/FINDINGS.md | क्या परीक्षण किया गया, क्या पुष्टि हुई, क्या नहीं |
docs/EXPLOITATION-NOTES.md | दायरा: केवल बग ट्रिगर, कोई RCE नहीं |
docs/evidence/ | सैनिटाइज़ किए गए नमूना साक्ष्य |
cd rust-poc
cargo build --release
# static analysis (no root)
./target/release/cve-2026-98432 static
# runtime reachability (root, tracefs)
sudo ./target/release/cve-2026-98432 runtime
# correct local vector: accept+close server + --sync trigger
cd ..
PASSES=1 ./scripts/repro-sync.sh 8083
repro-sync.sh 127.0.0.1:8083 पर --accept-close विक्टिम को शुरू करता है, sudo के साथ सिंक ट्रिगर चलाता है, और free_sock, use_build तथा UAF निर्णय प्रिंट करता है। एक साफ़ रन सुरक्षा का प्रमाण नहीं है: दर प्रति प्रयास लगभग 1e-7 है और घटनाएँ समूहों में आती हैं।
यदि artifacts/ अनुपस्थित है, तो static/runtime /boot पर वापस चले जाते हैं; लेगेसी scripts/cve-2026-98432.sh --static कर्नेल आर्टिफ़ैक्ट्स उत्पन्न कर सकता है।
KASAN के साथ, कर्नेल inet_csk_route_req / ip_options_build में एक slab-use-after-free की रिपोर्ट करता है, जिसमें फ्री स्टैक inet_sock_destruct / inet_release में होता है। tcp2kaslr हार्नेस KASAN के साथ लगभग 134k प्रयासों में उस तक पहुँचता है; एक सामान्य कर्नेल पर वही रेस ~48M प्रयासों में केवल दो बार देखी गई।
केवल उन्हीं कर्नेल और होस्ट का परीक्षण करें जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है। ट्रिगर एक कर्नेल रेस है और होस्ट को क्रैश कर सकता है। स्नैपशॉट वाले एक डिस्पोज़ेबल VM का उपयोग करें।
offline-ant/tcp2kaslr — बग ट्रिगर, KASAN साक्ष्य, विश्लेषण:
https://github.com/offline-ant/tcp2kaslripv4: free inet_opt and ireq_opt after an RCU grace period
(Eric Dumazet), net/ipv4/af_inet.c और
net/ipv4/tcp_ipv4.c में kfree → kfree_rcu।MIT। देखें LICENSE।