
OPNsense 26.7.6 - उच्च - रिमोट - कॉन्फ़िग लाइन इंजेक्शन - ट्यूनएबल्स लोडर
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
राइट-अप: https://abraxaslabs.tech/research/opnsense-tunables-loader
वर्ग: कॉन्फ़िग लाइन इंजेक्शन पहुँच: रिमोट
OPNsense कोर 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables अभी भी name/value को /boot/loader.conf में इंटरपोलेट करता है। GHSA-fq94 का बचा हुआ सहोदर। Tunables.xml के tunable / value सादे TextField हैं (newlines चालू)। system_login_configure() {$param}="{$value}" लिखता है। Tunables reconfigure login को भी पुनः आरंभ करता है। लाइव sysctl(8) shell_safe और एक OID फ़िल्टर से होकर जाता है, इसलिए वह हॉप शेल इंजेक्शन नहीं है। बचा हुआ हिस्सा अगले बूट पर अतिरिक्त loader निर्देश हैं। विशेषाधिकार page-system-advanced-sysctl है, page-all नहीं।
यह GitHub पैक समन्वित प्रकटीकरण तक निजी रहता है।
| ID | अभी कोई CVE नहीं |
| वर्ग | कॉन्फ़िग लाइन इंजेक्शन |
| पहुँच | रिमोट (प्रमाणित WebGUI / API) |
| CWE | CWE-93 |
| CVSS | उच्च: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | OPNsense core |
| प्रभावित | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| प्रमाणीकरण | page-system-advanced-sysctl वाला WebGUI सत्र या API कुंजी |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | compose exec gadget (hunt slot 18850) |
मैंने टैग 26.7.6 peel a842fe48 पिन किया। लैब पिन किए गए system_login_configure() इंटरपोलेशन का एक PHP गैजेट है। Compose प्रोजेक्ट opnsense-tunables-loader। 18800-18860 गैजेट परिवार में hunt slot 18850; यह compose फ़ाइल docker compose exec php का उपयोग करती है, किसी प्रकाशित HTTP बाइंड का नहीं।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
Tunables मान में CR/LF (hw.usb.no_boot_wait के साथ "\n# witness) | /boot/loader.conf में system_login_configure() की अतिरिक्त लाइन पिन करें | अखंडता (लैब-प्रमाणित): बंद असाइनमेंट के बाद अपनी अलग लाइन पर अतिरिक्त # OPNSENSE-TUNABLES-LOADER-WITNESS। लैब: newline-extra-line=yes। |
स्वच्छ मान 1 | वही राइटर | नकारात्मक (लैब-प्रमाणित): एकल असाइनमेंट लाइन, कोई witness नहीं। लैब: clean-value-single-line=yes। |
| अगले बूट पर वही अतिरिक्त loader लाइनें | loader init_path / module_path / *_load / vfs.root.mountfrom / console | अखंडता (अनुमानित): अगले बूट का loader हमलावर की कुंजियों का पालन करता है। इस गैजेट में रीबूट नहीं किया गया। |
कचरा loader लाइनें / गलत vfs.root.mountfrom | /boot/loader.conf | उपलब्धता (अनुमानित): बूट विफल या गलत रूट। |
POST /api/core/tunables/searchItem | tunables API | रीकॉन (अनुमानित): tunables की सूची, जिसमें current/default/type शामिल हैं। इस ACL के लिए इरादित। |
वैध OID का लाइव sysctl -w | set_sysctl + OID फ़िल्टर | पेज का इरादित कार्य। अतिरिक्त loader लाइनें ही बचा हुआ हिस्सा हैं। |
लैब-प्रमाणित बनाम अनुमानित: newline अतिरिक्त loader लाइन और स्वच्छ-मान एकल-लाइन लैब में SUCCESS हैं। अगले बूट पर loader लागू होना अनुमानित है। यह गैजेट है, पूर्ण OPNsense FreeBSD VM नहीं।
आवश्यक: साइन-इन किया हुआ उपयोगकर्ता या उस उपयोगकर्ता की Local API कुंजी जिसके पास page-system-advanced-sysctl है और page-all नहीं। POST /api/core/tunables/*। सत्र POST पर CSRF। Reconfigure login को पुनः आरंभ करता है; rc.reload_all और बूट भी system_login_configure को कॉल करते हैं।
| सतह | लैब |
|---|---|
| लाइव sysctl शेल इंजेक्शन | shell_safe और OID फ़िल्टर |
| साफ़ मान | एकल असाइनमेंट पंक्ति |
| अनधिकृत | 401 |
page-system-advanced-sysctl के बिना उपयोगकर्ता | 403 |
user-config-readonly | save() अपवाद फेंकता है |
page-all ट्यूनेबल्स एडमिन द्वारा वास्तविक OID सेट करना | इच्छित |
| GHSA-fq94 पैच किए गए GUI टेक्स्ट फ़ील्ड | भिन्न सिंक; इस फ़ील्ड का नाम नहीं लिया गया |
कोई अनधिकृत नहीं। कोई लाइव sysctl शेल नहीं। कोई Diagnostics: Command नहीं।
cd lab
./run.sh
Compose प्रोजेक्ट opnsense-tunables-loader। साक्षी OPNSENSE-TUNABLES-LOADER-WITNESS। अंतिम पंक्ति:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
Root launcher: python3 opnsense-tunables-loader-Abraxas-Labs.py.
tunables नाम और मान से CR/LF और " हटा दें, GHSA-fq94 के समान श्रेणी। नाम को OID मास्क के रूप में टाइप करें, न कि सादे TextField के रूप में। ऐसे helper से quote करें जो assignment को बंद न कर सके। किसी tunable को /boot/loader.conf में तब तक न लिखें जब तक वह ज्ञात loader key न हो।
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc system_login_configure loader.conf interpolationTunables.xml सादा TextField नाम/मान