
OPNsense 26.7.6 - Alta - Remota - Inyección de línea de configuración - cargador de tunables
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-tunables-loader
Clase: Inyección de línea de configuración Alcance: Remoto
OPNsense core 26.7.6 (a842fe48) - opnsense.org
System: Advanced: Tunables sigue interpolando nombre/valor en /boot/loader.conf. Residuo hermano de GHSA-fq94. Tunables.xml tunable / value son TextField sin formato (saltos de línea activados). system_login_configure() escribe {$param}="{$value}". La reconfiguración de Tunables también reinicia login. El sysctl(8) en vivo pasa por shell_safe más un filtro de OID, por lo que ese salto no es inyección de shell. El residuo son directivas de loader adicionales en el siguiente arranque. El privilegio es page-system-advanced-sysctl, no page-all.
Este paquete de GitHub permanece privado hasta la divulgación coordinada.
| ID | sin CVE todavía |
| Clase | Inyección de línea de configuración |
| Alcance | Remoto (WebGUI / API autenticado) |
| 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 |
| Producto | OPNsense core |
| Afectado | 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables |
| Autenticación | Sesión de WebGUI o clave de API con page-system-advanced-sysctl |
| Licencia | GNU Affero GPL v3.0 |
| Lab | compose exec gadget (hunt slot 18850) |
Fijé el tag 26.7.6 peel a842fe48. El lab es un gadget PHP de la interpolación fijada de system_login_configure(). Proyecto Compose opnsense-tunables-loader. Hunt slot 18850 en la familia de gadgets 18800-18860; este archivo compose usa docker compose exec php, no un bind HTTP publicado.
| Método | Sink | Privilegio |
|---|---|---|
Valor de Tunables con CR/LF (hw.usb.no_boot_wait más "\n# witness) | fijar línea extra de system_login_configure() en /boot/loader.conf | Integridad (probado en lab): # OPNSENSE-TUNABLES-LOADER-WITNESS extra en su propia línea tras una asignación cerrada. Lab: newline-extra-line=yes. |
Valor limpio 1 | mismo escritor | Negativo (probado en lab): línea de asignación única, sin witness. Lab: clean-value-single-line=yes. |
| Mismas líneas de loader extra en el siguiente arranque | loader init_path / module_path / *_load / vfs.root.mountfrom / consola | Integridad (inferido): el loader del siguiente arranque honra las claves del atacante. No se reinició en este gadget. |
Líneas de loader basura / vfs.root.mountfrom incorrecto | /boot/loader.conf | Disponibilidad (inferido): fallo de arranque o root incorrecto. |
POST /api/core/tunables/searchItem | API de tunables | Recon (inferido): listar tunables, incluyendo actual/default/tipo. Previsto para esta ACL. |
sysctl -w en vivo de un OID válido | set_sysctl + filtro de OID | Tarea prevista de la página. Las líneas de loader extra son el residuo. |
Probado en lab vs inferido: la línea de loader extra por salto de línea y el valor limpio de una sola línea son ÉXITO en lab. La aplicación del loader en el siguiente arranque es inferido. Gadget, no una VM FreeBSD completa de OPNsense.
Requiere: usuario con sesión iniciada o la clave de API Local de ese usuario con page-system-advanced-sysctl y sin page-all. POST /api/core/tunables/*. CSRF en POST de sesión. La reconfiguración reinicia login; rc.reload_all y el arranque también llaman a system_login_configure.
| Superficie | Lab |
|---|---|
| Inyección de shell en sysctl en vivo | shell_safe más filtro de OID |
| Valor limpio | línea de asignación única |
| Sin autenticación | 401 |
Usuario sin page-system-advanced-sysctl | 403 |
user-config-readonly | save() lanza excepción |
Administrador de tunables con page-all estableciendo un OID real | previsto |
| Campos de texto de GUI parcheados de GHSA-fq94 | sinks diferentes; este campo no fue nombrado |
Sin acceso no autenticado. Sin shell de sysctl en vivo. Sin Diagnostics: Command.
cd lab
./run.sh
Proyecto Compose opnsense-tunables-loader. Witness OPNSENSE-TUNABLES-LOADER-WITNESS. Última línea:
SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS
Lanzador root: python3 opnsense-tunables-loader-Abraxas-Labs.py.
Eliminar CR/LF y " del nombre y valor de los tunables, misma clase que GHSA-fq94. Tipar el nombre como una máscara de OID, no como un TextField sin formato. Citar con un helper que no pueda cerrar la asignación. No escribir un tunable en /boot/loader.conf a menos que sea una clave de loader conocida.
a842fe48c21288d11a422cb944678e8eb308becfsystem.inc interpolación de loader.conf en system_login_configureTunables.xml nombre/valor TextField sin formato