OPNsense 26.7.6 - Alta - Remota - Privilegio residuo - blocco di fabbrica IP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-lockout-factory-ip
Classe: Privilegio residuo Portata: Remota
OPNsense core 26.7.6 (a842fe48) - opnsense.org
Un login WebGUI non autenticato aziona ancora lockout_handler da una riga LOG_AUTH di fabbrica che non ha l'IP del socket. GHSA-2v2x ha chiuso la divisione CRLF e ha cambiato la selezione dell'IP di lockout sull'ultimo token, così che il from REMOTE_ADDR finale di authgui.inc prevalga. AuthenticationFactory::authenticate() continua a fare syslog() del nome utente grezzo senza suffisso di indirizzo. Un nome utente che corrisponde a una frase False di lockout più un token IPv4 è l'ultimo (unico) indirizzo su quella riga. Dopo i 5 tentativi distanziati predefiniti: pfctl -t sshlockout -T add e pfctl -k. Predefinito: lockout attivo, GUI LAN.
| ID | nessuna CVE al momento |
| Classe | Privilegio residuo |
| Portata | Remota (POST di login WebGUI non autenticato) |
| 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 |
| Prodotto | OPNsense core (Deciso B.V.) |
| Affetto | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) AuthenticationFactory / lockout_handler |
| Auth | Non autenticato. Cookie CSRF + token da GET /. |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Ho fissato il tag 26.7.6. Il lab è il lockout_handler fissato più uno stub PATH pfctl, identità loopback 127.0.0.1:18800. Questo non è CRLF. Un record syslog PHP resta una riga del handler. L'ultimo-IP era l'hardening giusto per il template authgui e quello sbagliato per il template di fabbrica.
| Metodo | Sink | Privilegio |
|---|---|---|
Nome utente LOG_AUTH di fabbrica non autenticato con una frase False di lockout più un token IPv4 (6 righe distanziate) | pin lockout_handler -> stub pfctl -t sshlockout -T add e pfctl -k | Integrità (dimostrata in lab): tabella sshlockout più argv di state-kill. Lab: planted=203.0.113.77. |
| stesso plant, pf live | filter.lib.inc:293-314 from <sshlockout> to (self) porte 22/GUI | Disponibilità (inferita): drop di nuove TCP 22/GUI dall'host piantato; pfctl -k abbatte gli stati esistenti da quell'IP. |
| stesso nome utente con solo l'IPv4 (senza frase False) | lockout_handler | Negativo (dimostrato in lab): nessun add in tabella. negative-ip-only=no. |
riga authgui con from REMOTE_ADDR finale | parser ultimo-IP | Integrità del proprio IP (dimostrata in lab): l'ultimo token authgui resta 198.51.100.10. |
| Corpo del login fallito | nessuno | Recon (dimostrata chiusa in lab): "Wrong username or password." esistente. Nessuna enumerazione utenti. |
Dimostrato in lab vs inferito: plant di fabbrica, negativo solo-nome-utente e ultimo-IP authgui sono SUCCESS in lab. Il blocco pf live e l'uccisione di sessione live sono inferiti. Pin lockout_handler copiato invariato; syslog-ng e POST WebGUI sono stub.
Richiede: POST di login WebGUI non autenticato. Cookie CSRF + token da GET /. Lockout attivo (system.no_sshlockout non impostato). Installazione predefinita.
| Superficie | Lab |
|---|---|
Sessione non autenticata / root / scrittura config.xml | chiusa |
| Riga authgui che pianta un IP estraneo | l'ultimo token è REMOTE_ADDR (authgui-last-ip=198.51.100.10) |
readline() extra CRLF | riscrittura GHSA-2v2x; un record resta una riga |
| Login con password vuota | authgui.inc richiede password non vuota |
| Reset della success-keyword CVE-2026-44195 sulla riga authgui | prima le regole di fallimento |
TypeError pfctl -k str(ip) di Omar Habra in 26.7.6 | già su questo pin |
| IP piantato come destinazione DNS/gateway | le regole sono solo from <sshlockout> to (self) porte 22/GUI |
Nessun salto di login. Nessun RCE. Nessuna riscrittura di config.xml. Non genera una sessione.
cd lab
./run.sh
Loopback 127.0.0.1:18800. Progetto Compose opnsense-lockout-factory-ip. Tag immagine opnsense-lockout-factory-ip:26.7.6. Witness OPNSENSE-LOCKOUT-FACTORY-IP-WITNESS. Ultima riga:
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
Aggiungere l'IP del socket al template syslog(LOG_AUTH) di fabbrica, stesso from REMOTE_ADDR finale di authgui.inc. Oppure ignorare gli IP di lockout che non provengono dal peer del handler stesso. Non trattare l'ultimo-token come sostituto di "l'indirizzo del client".
a842fe48c21288d11a422cb944678e8eb308becfAuthenticationFactory.phplockout_handler