
OPNsense 26.7.6 - Hoch - Remote - Verbleibende Berechtigung - Werkssperre IP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-lockout-factory-ip
Klasse: Privilegien-Überrest Reichweite: Remote
OPNsense core 26.7.6 (a842fe48) - opnsense.org
Ein unauthentifizierter WebGUI-Login treibt weiterhin lockout_handler aus einer Factory-LOG_AUTH-Zeile an, die keine Socket-IP besitzt. GHSA-2v2x hat den CRLF-Split geschlossen und die Auswahl der Lockout-IP auf das letzte Token umgestellt, sodass das abschließende from REMOTE_ADDR von authgui.inc gewinnt. AuthenticationFactory::authenticate() schreibt weiterhin den rohen Benutzernamen per syslog() ohne Adress-Suffix. Ein Benutzername, der auf eine Lockout-False-Phrase plus ein IPv4-Token passt, ist die letzte (einzige) Adresse in dieser Zeile. Nach standardmäßig 5 zeitlich verteilten Versuchen: pfctl -t sshlockout -T add und pfctl -k. Standard: Lockout an, LAN-GUI.
| ID | noch keine CVE |
| Klasse | Privilegien-Überrest |
| Reichweite | Remote (unauthentifizierter WebGUI-Login-POST) |
| CWE | CWE-117 / CWE-863 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Produkt | OPNsense core (Deciso B.V.) |
| Betroffen | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) AuthenticationFactory / lockout_handler |
| Auth | Unauthentifiziert. CSRF-Cookie + Token aus GET /. |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1 |
Ich habe den Tag 26.7.6 gepinnt. Das Lab besteht aus dem gepinnten lockout_handler plus einem PATH-Stub pfctl, Loopback-Identität 127.0.0.1:18800. Dies ist kein CRLF. Ein PHP-syslog-Datensatz bleibt eine Handler-Zeile. Last-IP war die richtige Härtung für das authgui-Template und die falsche Härtung für das Factory-Template.
| Methode | Sink | Privileg |
|---|---|---|
Unauthentifizierter Factory-LOG_AUTH-Benutzername mit einer Lockout-False-Phrase plus einem IPv4-Token (6 zeitlich verteilte Zeilen) | pin lockout_handler -> Stub pfctl -t sshlockout -T add und pfctl -k | Integrität (im Lab bewiesen): Tabelle sshlockout plus State-Kill-argv. Lab: planted=203.0.113.77. |
| gleiche Plant, live pf | filter.lib.inc:293-314 from <sshlockout> to (self) Ports 22/GUI | Verfügbarkeit (abgeleitet): neue TCP-22/GUI-Verbindungen vom gepflanzten Host werden verworfen; pfctl -k reißt bestehende States von dieser IP ab. |
| gleicher Benutzername nur mit der IPv4 (ohne False-Phrase) | lockout_handler | Negativ (im Lab bewiesen): kein Tabellen-Add. negative-ip-only=no. |
authgui-Zeile mit abschließendem from REMOTE_ADDR | Last-IP-Parser | Integrität der eigenen IP (im Lab bewiesen): authgui-Last-Token bleibt 198.51.100.10. |
| Failed-Login-Body | keiner | Recon (im Lab bewiesen geschlossen): bestehendes "Wrong username or password." Keine Benutzer-Enumeration. |
Im Lab bewiesen vs. abgeleitet: Factory-Plant, Username-only-Negative und authgui-Last-IP sind Lab-ERFOLGE. Live-pf-Blocking und Live-Session-Kill sind abgeleitet. Pin lockout_handler unverändert kopiert; syslog-ng und WebGUI-POST sind gestubbt.
Erfordert: Unauthentifizierter WebGUI-Login-POST. CSRF-Cookie + Token aus GET /. Lockout an (system.no_sshlockout nicht gesetzt). Standardinstallation.
| Angriffsfläche | Lab |
|---|---|
Unauthentifizierte Session / root / config.xml-Schreiben | geschlossen |
| authgui-Zeile, die eine fremde IP pflanzt | Last-Token ist REMOTE_ADDR (authgui-last-ip=198.51.100.10) |
CRLF zusätzliches readline() | GHSA-2v2x-Rewrite; ein Datensatz bleibt eine Zeile |
| Login mit leerem Passwort | authgui.inc erfordert nicht-leeres Passwort |
| CVE-2026-44195 Success-Keyword-Reset auf der authgui-Zeile | Failure-Regeln zuerst |
26.7.6 Omar Habra pfctl -k str(ip) TypeError | bereits auf diesem Pin |
| Gepflanzte IP als DNS/Gateway-Ziel | Regeln sind nur from <sshlockout> to (self) Ports 22/GUI |
Kein Login-Skip. Kein RCE. Kein Rewrite von config.xml. Erzeugt keine Session.
cd lab
./run.sh
Loopback 127.0.0.1:18800. Compose-Projekt opnsense-lockout-factory-ip. Image-Tag opnsense-lockout-factory-ip:26.7.6. Witness OPNSENSE-LOCKOUT-FACTORY-IP-WITNESS. Letzte Zeile:
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
Die Socket-IP an das Factory-syslog(LOG_AUTH)-Template anhängen, dasselbe abschließende from REMOTE_ADDR wie in authgui.inc. Oder Lockout-IPs ignorieren, die nicht vom eigenen Peer des Handlers stammen. Last-Token nicht als Ersatz für "die Client-Adresse" behandeln.
a842fe48c21288d11a422cb944678e8eb308becfAuthenticationFactory.phplockout_handler