
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
Análisis: https://abraxaslabs.tech/research/opnsense-tunables-loader
Clase: Inyección de línea de configuración Alcance: Remoto
Núcleo de OPNsense 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 restricciones (saltos de línea permitidos). 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 | aún sin CVE |
| 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 WebGUI o clave API con page-system-advanced-sysctl |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | compose exec gadget (hunt slot 18850) |
Fijé la etiqueta 26.7.6 peel a842fe48. El laboratorio 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 en system_login_configure() en /boot/loader.conf | Integridad (probado en laboratorio): # OPNSENSE-TUNABLES-LOADER-WITNESS extra en su propia línea tras una asignación cerrada. Laboratorio: newline-extra-line=yes. |
Valor limpio 1 | mismo escritor | Negativo (probado en laboratorio): línea de asignación única, sin witness. Laboratorio: clean-value-single-line=yes. |
| Las 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 respeta 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/por defecto/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 laboratorio 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 laboratorio. La aplicación del loader en el siguiente arranque es inferida. Gadget, no una VM FreeBSD completa de OPNsense.
Requiere: usuario con sesión iniciada o la clave 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 | Laboratorio |
|---|---|
| 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 parámetros ajustables con page-all estableciendo un OID real | previsto |
| Campos de texto de la GUI parcheados por GHSA-fq94 | sumideros diferentes; este campo no fue nombrado |
Sin autenticación. Sin shell de sysctl en vivo. Sin Diagnostics: Command.
cd lab
./run.sh
Proyecto Compose opnsense-tunables-loader. Testigo 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 raíz: python3 opnsense-tunables-loader-Abraxas-Labs.py.
Eliminar CR/LF y " del nombre y el valor de los tunables, misma clase que GHSA-fq94. Tipar el nombre como una máscara OID, no como un TextField sin formato. Entrecomillar 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 como TextField sin formato