
pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - Privilegio residuo - Nome admin LDAP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ldap-name-collision
Classe: Privilegio residuo Portata: Remota
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
getUserEntry($name) restituisce la riga locale in caso di corrispondenza del nome. isAdminUID() vede quindi uid 0 e isAllowedPage consente ogni pagina. passwordmg tratta la sessione come locale e scrive l'hash di quell'utente. uid == 0 è un confronto lasco.
| ID | nessuna CVE al momento |
| Classe | Privilegio residuo |
| Portata | Remota (WebGUI autenticata salvo diversa indicazione) |
| CWE | CWE-269 |
| CVSS | Alto: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Prodotto | pfSense CE |
| Affetto | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | Sessione WebGUI con remote WebGUI login when authmode != Local; passwordmg is not warn-root |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Ho fissato il master pubblico 9363ac5. Il lab è un gadget PHP del sink fissato, HTTP su loopback su 127.0.0.1:19010.
Write-up della serie: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Metodo | Sink | Privilegio |
|---|---|---|
| Bind LDAP/RADIUS con il nome dell'admin locale, poi POST passwordmg | getUserEntry / isAdminUID / local_user_set_password | Integrità: Provato in lab: l'admin remoto è isAdminUID; tutte le pagine incluso diag_command; passwordmg ha impostato l'hash di uid 0. I nomi remoti solo-stub falliscono in modo sicuro. |
| stesso residuo | stesso sink | Ricognizione: Provato in lab: flag di autorizzazione per ogni pagina. |
| stesso residuo | stesso sink | Disponibilità: Nessuna dimostrata. |
Richiede: remote WebGUI login when authmode != Local; passwordmg is not warn-root. CSRF-magic sul POST salvo diversa indicazione. WebGUI PHP-FPM è root.
Richiede: remote WebGUI login when authmode != Local; passwordmg is not warn-root. CSRF-magic sul POST salvo diversa indicazione. WebGUI PHP-FPM è root. CSRF-magic sul POST salvo diversa indicazione. WebGUI PHP-FPM è root.
Nomi remoti solo-stub. usermanager stesso è warn-root. Il salto uid di SA-26_22 xmlrpc è un bug diverso.
Nessun Diagnostics: Command a meno che anche quella pagina sia concessa.
cd lab
./run.sh
Loopback 127.0.0.1:19010. Progetto Compose pfsense-ldap-name-collision. Witness PFSENSE-LDAP-NAME-COLLISION-WITNESS. Solo loopback: 127.0.0.1:19010. Progetto Compose pfsense-ldap-name-collision. Witness PFSENSE-LDAP-NAME-COLLISION-WITNESS. Gadget PHP delle righe fissate. Lo stack viene smontato dopo l'esecuzione.
Ultima riga:
SUCCESS PFSENSE-LDAP-NAME-COLLISION control-isadmin=no control-diag=no control-hash-unchanged=yes trigger-isadmin=yes trigger-all-pages=yes trigger-hash-set=yes uid-loose-eq=yes PFSENSE-LDAP-NAME-COLLISION-WITNESS
Non mappare un nome remoto su una riga locale con uid 0. Usare uid === '0' in modo stretto più l'origine di autenticazione. Rendere passwordmg warn-root.
9363ac5b8651a1c7a333180425ce7719070f95f9