
OPNsense 26.7.6 - Alto - Remoto - Iniezione di riga di configurazione - loader dei tunables
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
Classe: Iniezione di riga di configurazione Portata: Remota
OPNsense core 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables interpola ancora nome/valore in /boot/loader.conf. Residuo affine di GHSA-fq94. In Tunables.xml tunable / value sono TextField nudi (newline abilitati). system_login_configure() scrive {$param}="{$value}". La riconfigurazione dei Tunables riavvia anche login. Il sysctl(8) live passa attraverso shell_safe più un filtro OID, quindi quel salto non è shell injection. Il residuo sono direttive loader extra al boot successivo. Il privilegio è page-system-advanced-sysctl, non page-all.
Questo pacchetto GitHub resta privato fino alla divulgazione coordinata.
| ID | nessuna CVE al momento |
| Classe | Iniezione di riga di configurazione |
| Portata | Remota (WebGUI / API autenticata) |
| CWE | CWE-93 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Prodotto | OPNsense core |
| Affetto | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| Auth | Sessione WebGUI o chiave API con page-system-advanced-sysctl |
| Licenza | GNU Affero GPL v3.0 |
| Lab | compose exec gadget (hunt slot 18850) |
Ho fissato il tag 26.7.6 peel a842fe48. Il lab è un gadget PHP dell'interpolazione fissata di system_login_configure(). Progetto compose opnsense-tunables-loader. Hunt slot 18850 nella famiglia di gadget 18800-18860; questo file compose usa docker compose exec php, non un bind HTTP pubblicato.
| Metodo | Sink | Privilegio |
|---|---|---|
Valore Tunables CR/LF (hw.usb.no_boot_wait più "\n# witness) | fissa la riga extra di system_login_configure() in /boot/loader.conf | Integrità (dimostrata in lab): # OPNSENSE-TUNABLES-LOADER-WITNESS extra su una propria riga dopo un'assegnazione chiusa. Lab: newline-extra-line=yes. |
Valore pulito 1 | stesso writer | Negativo (dimostrato in lab): singola riga di assegnazione, nessun witness. Lab: clean-value-single-line=yes. |
| Stesse righe loader extra al boot successivo | loader init_path / module_path / *_load / vfs.root.mountfrom / console | Integrità (inferita): il loader al boot successivo onora le chiavi dell'attaccante. Non riavviato in questo gadget. |
Righe loader spazzatura / vfs.root.mountfrom errato | /boot/loader.conf | Disponibilità (inferita): boot fallito o root errata. |
POST /api/core/tunables/searchItem | API tunables | Recon (inferita): elenca i tunables, inclusi current/default/type. Previsto per questa ACL. |
sysctl -w live di un OID valido | set_sysctl + filtro OID | Compito previsto della pagina. Le righe loader extra sono il residuo. |
Dimostrato in lab vs inferito: la riga loader extra con newline e il valore pulito su singola riga sono SUCCESSO in lab. L'applicazione del loader al boot successivo è inferita. Gadget, non una VM OPNsense FreeBSD completa.
Richiede: utente autenticato o la chiave API Locale di quell'utente con page-system-advanced-sysctl e senza page-all. POST /api/core/tunables/*. CSRF sul POST di sessione. La riconfigurazione riavvia login; anche rc.reload_all e il boot chiamano system_login_configure.
| Superficie | Lab |
|---|---|
| Shell injection su sysctl live | shell_safe più filtro OID |
| Valore pulito | singola riga di assegnazione |
| Non autenticato | 401 |
Utente senza page-system-advanced-sysctl | 403 |
user-config-readonly | save() genera eccezione |
Impostazione di un OID reale da parte di un admin tunables con page-all | previsto |
| Campi di testo della GUI corretti da GHSA-fq94 | sink diversi; questo campo non era nominato |
Nessun accesso non autenticato. Nessuna shell sysctl live. Nessun Diagnostics: Command.
cd lab
./run.sh
Progetto compose opnsense-tunables-loader. Witness OPNSENSE-TUNABLES-LOADER-WITNESS. Ultima riga:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
Launcher root: python3 opnsense-tunables-loader-Abraxas-Labs.py.
Rimuovere CR/LF e " dal nome e dal valore dei tunables, stessa classe di GHSA-fq94. Tipizzare il nome come maschera OID, non come TextField nudo. Quotare con un helper che non possa chiudere l'assegnazione. Non scrivere un tunable in /boot/loader.conf a meno che non sia una chiave loader nota.
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc interpolazione di system_login_configure in loader.confTunables.xml TextField nudo per nome/valore