OPNsense 26.7.6 - Alta - Remota - Privilegio residual - Bloqueo de fábrica de IP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-lockout-factory-ip
Clase: Privilegio residual Alcance: Remoto
OPNsense core 26.7.6 (a842fe48) - opnsense.org
El inicio de sesión no autenticado en la WebGUI sigue dirigiendo lockout_handler desde una línea LOG_AUTH de fábrica que no tiene IP de socket. GHSA-2v2x cerró la división CRLF y cambió la selección de IP de bloqueo al último token para que el from REMOTE_ADDR final de authgui.inc gane. AuthenticationFactory::authenticate() todavía hace syslog() del nombre de usuario sin procesar sin sufijo de dirección. Un nombre de usuario que coincida con una frase de bloqueo False más un token IPv4 es la última (única) dirección en esa línea. Tras los 5 intentos espaciados predeterminados: pfctl -t sshlockout -T add y pfctl -k. Predeterminado: bloqueo activado, GUI de LAN.
| ID | sin CVE todavía |
| Clase | Privilegio residual |
| Alcance | Remoto (POST de inicio de sesión no autenticado en la WebGUI) |
| CWE | CWE-117 / CWE-863 |
| CVSS | Alto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Producto | OPNsense core (Deciso B.V.) |
| Afectado | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) AuthenticationFactory / lockout_handler |
| Autenticación | No autenticado. Cookie CSRF + token de GET /. |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
Fijé la etiqueta 26.7.6. El laboratorio es el lockout_handler fijado más un stub de PATH pfctl, identidad de loopback 127.0.0.1:18800. Esto no es CRLF. Un registro syslog de PHP sigue siendo una línea del handler. La última IP fue el endurecimiento correcto para la plantilla authgui y el endurecimiento incorrecto para la plantilla de fábrica.
| Método | Sumidero | Privilegio |
|---|---|---|
Nombre de usuario LOG_AUTH de fábrica no autenticado con una frase de bloqueo False más un token IPv4 (6 líneas espaciadas) | fijar lockout_handler -> stub pfctl -t sshlockout -T add y pfctl -k | Integridad (probado en laboratorio): tabla sshlockout más argv de eliminación de estados. Laboratorio: planted=203.0.113.77. |
| mismo plant, pf en vivo | filter.lib.inc:293-314 from <sshlockout> to (self) puertos 22/GUI | Disponibilidad (inferido): descartar nuevo TCP 22/GUI desde el host plantado; pfctl -k derriba los estados existentes desde esa IP. |
| mismo nombre de usuario solo con la IPv4 (sin frase False) | lockout_handler | Negativo (probado en laboratorio): sin adición a la tabla. negative-ip-only=no. |
línea authgui con from REMOTE_ADDR final | parser de última IP | Integridad de la propia IP (probado en laboratorio): el último token de authgui sigue siendo 198.51.100.10. |
| Cuerpo de inicio de sesión fallido | ninguno | Recon (probado en laboratorio, cerrado): el existente "Wrong username or password." Sin enumeración de usuarios. |
Probado en laboratorio vs inferido: el plant de fábrica, el negativo solo con nombre de usuario y la última IP de authgui son ÉXITO en laboratorio. El bloqueo de pf en vivo y la eliminación de sesión en vivo son inferidos. lockout_handler fijado copiado sin cambios; syslog-ng y el POST de la WebGUI están stubbeados.
Requiere: POST de inicio de sesión no autenticado en la WebGUI. Cookie CSRF + token de GET /. Bloqueo activado (system.no_sshlockout sin establecer). Instalación predeterminada.
| Superficie | Laboratorio |
|---|---|
Sesión no autenticada / root / escritura de config.xml | cerrado |
| Línea authgui plantando una IP ajena | el último token es REMOTE_ADDR (authgui-last-ip=198.51.100.10) |
readline() extra por CRLF | reescritura de GHSA-2v2x; un registro sigue siendo una línea |
| Inicio de sesión con contraseña vacía | authgui.inc requiere contraseña no vacía |
| Reinicio por palabra clave de éxito de CVE-2026-44195 en la línea authgui | primero las reglas de fallo |
TypeError de pfctl -k str(ip) de Omar Habra en 26.7.6 | ya en este pin |
| IP plantada como destino DNS/gateway | las reglas son from <sshlockout> to (self) solo puertos 22/GUI |
Sin omisión de inicio de sesión. Sin RCE. Sin reescritura de config.xml. No genera una sesión.
cd lab
./run.sh
Loopback 127.0.0.1:18800. Proyecto de Compose opnsense-lockout-factory-ip. Etiqueta de imagen opnsense-lockout-factory-ip:26.7.6. Testigo OPNSENSE-LOCKOUT-FACTORY-IP-WITNESS. Última línea:
SUCCESS opnsense-lockout-factory-ip planted=203.0.113.77 table=sshlockout negative-ip-only=no authgui-last-ip=198.51.100.10 OPNSENSE-LOCKOUT-FACTORY-IP-WITNESS
Añadir la IP del socket a la plantilla syslog(LOG_AUTH) de fábrica, el mismo from REMOTE_ADDR final que authgui.inc. O ignorar las IPs de bloqueo que no provengan del propio peer del handler. No tratar el último token como sustituto de "la dirección del cliente".
a842fe48c21288d11a422cb944678e8eb308becfAuthenticationFactory.phplockout_handler