
OPNsense 26.7.6 - उच्च - रिमोट - नेटवर्क-एक्सेस बायपास - कैप्टिव लास्टसीन रोम
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-captive-lastseen-roam
Class: नेटवर्क-एक्सेस बायपास Reach: रिमोट
OPNsense कोर 26.7.6 (a842fe48) - opnsense.org
कैप्टिव-पोर्टल रोमिंग अभी भी एक MAC पर सबसे नए hostwatch IPv4, साथ ही हर IPv6 के लिए एक सत्र विरासत में लेती है। GHSA-864r (26.7.3) ने "हर IPv4 जोड़ो" को रोक दिया। बचा हुआ IPv4 list_hosts.py ORDER BY last_seen DESC है। फिर प्राइमरी IP बिना फ़िल्टर किए गए current_ips[0] से असाइन की जाती है। Gratuitous ARP attacker_IP is-at victim_MAC last_seen को अपडेट करता है। 26.7.3 के बाद वह IPv4 कई में से एक नहीं है; यह वह IPv4 है जिसे फ़िल्टर रखता है यदि यह पीड़ित के अपने ARP से नया है। IPv6 NDP कभी सीमित नहीं किया गया। रोमिंग और hostwatch डिफ़ॉल्ट रूप से चालू।
यह GitHub पैक समन्वित डिस्क्लोज़र तक निजी रहता है।
| ID | अभी तक कोई CVE नहीं |
| Class | नेटवर्क-एक्सेस बायपास |
| Reach | रिमोट (L2-निकटवर्ती, कैप्टिव-पोर्टल ज़ोन) |
| CWE | CWE-345 / CWE-863 |
| CVSS | High: 7.4 CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N |
| Product | OPNsense core |
| Affected | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) कैप्टिव पोर्टल रोमिंग |
| Auth | कैप्टिव-पोर्टल ज़ोन पर अनऑथ L2-निकटवर्ती होस्ट; रोमिंग चालू |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
मैंने टैग 26.7.6 पिन किया, पील a842fe48। लैब पिन किए गए _filter_addresses / list_hosts.py / arp.py लाइनों का एक Python गैजेट है, 127.0.0.1:18820 पर लूपबैक प्रतीक्षा।
| Method | Sink | Privilege |
|---|---|---|
| roaming=1 वाले MAC के लिए सबसे नया hostwatch IPv4 | _filter_addresses / list_hosts.py ORDER BY last_seen DESC पिन करें; बिना फ़िल्टर किए गए current_ips[0] से प्राइमरी | Integrity (लैब-प्रमाणित): हमलावर 192.0.2.99 रखा गया, पीड़ित 192.0.2.10 हटाया गया, primary=192.0.2.99। लैब: attacker-ipv4-kept=192.0.2.99 victim-ipv4-dropped=yes roaming=1। |
| वही MAC, roaming=0 | _filter_addresses [addresses[0]] लौटाता है | Negative (लैब-प्रमाणित): पहला IPv4 192.0.2.10 रखा गया। |
| उसी MAC पर IPv6, roaming=1 | _filter_addresses हर गैर-v4 रखता है | Integrity (लैब-प्रमाणित): सभी IPv6 रखे गए (2001:db8::10 और 2001:db8::99)। |
| नकली GARP / NDP जिसे hostwatch पीड़ित MAC के अंतर्गत संग्रहीत करता है | __captiveportal_zone_N पर लाइव PF.add_to_table / IPFW.add_accounting | Integrity (अनुमानित): हमलावर स्रोत IP पोर्टल पास टेबल से मेल खाता है। सत्र उपयोगकर्ता नाम और कोटा पीड़ित के ही रहते हैं। वायर पर लाइव GARP और लाइव ज़ोन-टेबल पास इस गैजेट में नहीं चलाए जाते। |
| वही टेबल जोड़ | प्रति सत्र ipfw अकाउंटिंग नियम संख्या | Integrity (अनुमानित): हमलावर बाइट्स पीड़ित सत्र पर गिने जाते हैं। |
| पीड़ित IPv4 अब पहला नहीं | _remove_client / list_session_ips में न होने वाले पतों का pf डिलीट | Availability (अनुमानित): पीड़ित IPv4 ज़ोन टेबल से हट सकता है जबकि हमलावर IPv4 बना रहता है। |
लैब-प्रमाणित बनाम अनुमानित: last_seen IPv4 रखना/हटाना, roaming=0 पहला-IP, और IPv6-सभी लैब SUCCESS हैं। वायर पर नकली GARP, लाइव pf/ipfw पास, और अकाउंटिंग स्मीयर अनुमानित हैं। गैजेट, पूर्ण OPNsense FreeBSD VM नहीं।
आवश्यक: कैप्टिव-पोर्टल ज़ोन पर L2-निकटवर्ती अनऑथ होस्ट। रोमिंग चालू (डिफ़ॉल्ट)। Hostwatch चालू (डिफ़ॉल्ट)। उस ज़ोन पर एक पहले से अधिकृत सत्र।
| Surface | Lab |
|---|---|
| GHSA-864r add-every-IPv4 | 26.7.3 पर बंद; यह बचा हुआ last_seen IPv4 प्लस सभी IPv6 है |
| roaming=0 | पहला IPv4 रखा गया; हमलावर IPv4 चयनित नहीं |
भिन्न लॉगऑन IP का XFF / X-Real-Ip स्पूफ | ज़ोन प्रॉक्सी जोड़ता है; साफ़ pf CIDR नहीं |
कॉलर IP का अनऑथ logon | getClientIp() का प्रलेखित पोर्टल लॉगिन |
| डिफ़ॉल्ट 8+10 CSPRNG पर वाउचर ब्रूट | यह बचा हुआ नहीं |
| टेम्पलेट ज़िप-स्लिप | realpath प्लस एडमिन अपलोड |
| WebGUI ओरिजिन तक पोर्टल स्प्लैश XSS | भिन्न पोर्ट / chroot |
| WAN-अनऑथ | ज़ोन पर L2-निकटवर्ती |
| WebGUI / root / वाउचर मिंट | बंद रहता है |
कोई अनऑथ WebGUI नहीं। कोई root नहीं। पोर्टल का कोई WAN स्किप नहीं।
cd lab
./run.sh
लूपबैक प्रतीक्षा 127.0.0.1:18820। Compose प्रोजेक्ट opnsense-captive-lastseen-roam। उस compose से इमेज टैग। विटनेस OPNSENSE-CAPTIVE-LASTSEEN-ROAM-WITNESS। अंतिम पंक्ति:
SUCCESS opnsense-captive-lastseen-roam attacker-ipv4-kept=192.0.2.99 victim-ipv4-dropped=yes roaming=1 OPNSENSE-CAPTIVE-LASTSEEN-ROAM-WITNESS
रूट लॉन्चर: python3 opnsense-captive-lastseen-roam-Abraxas-Labs.py.
वह IPv4 चुनें जिसे सत्र पहले ही अधिकृत कर चुका है, उस MAC के लिए सबसे नई hostwatch पंक्ति नहीं। IPv6 को भी उसी तरह सीमित करें, या ऐसा NDP आवश्यक करें जिसे कर्नेल अभी भी रखता है। जब फ़िल्टर पहले ही भिन्न पता चुन चुका हो तो बिना फ़िल्टर किए गए current_ips[0] से प्राइमरी असाइन न करें। केवल last_seen अपडेट करने वाले GARP को अविश्वसनीय अवलोकन मानें, जो GHSA-864r इनवेरिएंट है।
a842fe48c21288d11a422cb944678e8eb308becfcp-background-process.py _filter_addresses और प्राइमरी-IP रीराइटlist_hosts.py ORDER BY last_seen DESClib/arp.py get_all_addresses_by_mac