
OPNsense 26.7.6 – Hoch – Remote – Konfigurationszeilen-Injektion – Tunables-Loader
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
Klasse: Config-Zeilen-Injection Reichweite: Remote
OPNsense-Kern 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables interpoliert weiterhin Name/Wert in /boot/loader.conf. Zurückgebliebener Verwandter von GHSA-fq94. Tunables.xml tunable / value sind reine TextField (Zeilenumbrüche aktiviert). system_login_configure() schreibt {$param}="{$value}". Tunables-Reconfigure startet außerdem login neu. Live-sysctl(8) läuft über shell_safe plus einen OID-Filter, dieser Sprung ist also keine Shell-Injection. Der Überrest sind zusätzliche Loader-Direktiven beim nächsten Boot. Die Berechtigung ist page-system-advanced-sysctl, nicht page-all.
Dieses GitHub-Paket bleibt privat bis zur koordinierten Offenlegung.
| ID | noch keine CVE |
| Klasse | Config-Zeilen-Injection |
| Reichweite | Remote (authentifizierte WebGUI / API) |
| CWE | CWE-93 |
| CVSS | Hoch: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Produkt | OPNsense core |
| Betroffen | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| Auth | WebGUI-Sitzung oder API-Schlüssel mit page-system-advanced-sysctl |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | compose exec gadget (Hunt-Slot 18850) |
Ich habe den Tag 26.7.6 gepinnt, Peel a842fe48. Das Lab ist ein PHP-Gadget der gepinnten system_login_configure()-Interpolation. Compose-Projekt opnsense-tunables-loader. Hunt-Slot 18850 in der Gadget-Familie 18800-18860; diese Compose-Datei verwendet docker compose exec php, keinen veröffentlichten HTTP-Bind.
| Methode | Sink | Berechtigung |
|---|---|---|
Tunables-Wert CR/LF (hw.usb.no_boot_wait plus "\n# witness) | Pin system_login_configure() zusätzliche Zeile in /boot/loader.conf | Integrität (lab-belegt): zusätzliches # OPNSENSE-TUNABLES-LOADER-WITNESS in eigener Zeile nach einer geschlossenen Zuweisung. Lab: newline-extra-line=yes. |
Sauberer Wert 1 | derselbe Writer | Negativ (lab-belegt): einzelne Zuweisungszeile, kein Witness. Lab: clean-value-single-line=yes. |
| Dieselben zusätzlichen Loader-Zeilen beim nächsten Boot | Loader init_path / module_path / *_load / vfs.root.mountfrom / Konsole | Integrität (abgeleitet): der Loader beim nächsten Boot beachtet Angreifer-Schlüssel. In diesem Gadget nicht neu gestartet. |
Müll-Loader-Zeilen / falsches vfs.root.mountfrom | /boot/loader.conf | Verfügbarkeit (abgeleitet): Boot-Fehler oder falsches Root. |
POST /api/core/tunables/searchItem | Tunables-API | Recon (abgeleitet): Tunables auflisten, einschließlich aktuell/Standard/Typ. Für diese ACL vorgesehen. |
Live-sysctl -w einer gültigen OID | set_sysctl + OID-Filter | Vorgesehene Seitenaufgabe. Zusätzliche Loader-Zeilen sind der Überrest. |
Lab-belegt vs. abgeleitet: zusätzliche Loader-Zeile per Newline und Einzelzeile bei sauberem Wert sind Lab-ERFOLG. Loader-Anwendung beim nächsten Boot ist abgeleitet. Gadget, keine vollständige OPNsense-FreeBSD-VM.
Erfordert: angemeldeter Benutzer oder dessen Local-API-Schlüssel mit page-system-advanced-sysctl und ohne page-all. POST /api/core/tunables/*. CSRF bei Sitzungs-POST. Reconfigure startet login neu; rc.reload_all und Boot rufen ebenfalls system_login_configure auf.
| Oberfläche | Lab |
|---|---|
| Live-sysctl-Shell-Injection | shell_safe plus OID-Filter |
| Sauberer Wert | einzelne Zuweisungszeile |
| Unauth | 401 |
Benutzer ohne page-system-advanced-sysctl | 403 |
user-config-readonly | save() wirft |
page-all-Tunables-Admin setzt eine echte OID | vorgesehen |
| GHSA-fq94 gepatchte GUI-Textfelder | andere Sinks; dieses Feld wurde nicht genannt |
Kein Unauth. Keine Live-sysctl-Shell. Kein Diagnostics: Command.
cd lab
./run.sh
Compose-Projekt opnsense-tunables-loader. Witness OPNSENSE-TUNABLES-LOADER-WITNESS. Letzte Zeile:
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.
CR/LF und " aus Tunables-Name und -Wert entfernen, gleiche Klasse wie GHSA-fq94. Den Namen als OID-Maske typisieren, nicht als reines TextField. Mit einem Helper quoten, der die Zuweisung nicht schließen kann. Ein Tunable nicht in /boot/loader.conf schreiben, es sei denn, es ist ein bekannter Loader-Schlüssel.
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc system_login_configure loader.conf-InterpolationTunables.xml reines TextField Name/Wert