
pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - Privilegio residual - Nombre de administrador LDAP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ldap-name-collision
Clase: Privilegio residual Alcance: Remoto
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
getUserEntry($name) devuelve la fila local cuando coincide el nombre. isAdminUID() entonces ve uid 0 y isAllowedPage permite todas las páginas. passwordmg trata la sesión como local y escribe el hash de ese usuario. uid == 0 es una comparación laxa.
| ID | aún sin CVE |
| Clase | Privilegio residual |
| Alcance | Remoto (WebGUI autenticado salvo que se indique lo contrario) |
| 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 |
| Producto | pfSense CE |
| Afectado | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | Sesión WebGUI con remote WebGUI login when authmode != Local; passwordmg is not warn-root |
| Licencia | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Fijé el master público 9363ac5. El lab es un gadget PHP del sink fijado, HTTP en loopback sobre 127.0.0.1:19010.
Write-up de la serie: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Método | Sink | Privilegio |
|---|---|---|
| Bind LDAP/RADIUS con el nombre del admin local, luego POST passwordmg | getUserEntry / isAdminUID / local_user_set_password | Integridad: Probado en lab: el admin remoto es isAdminUID; todas las páginas incluida diag_command; passwordmg estableció el hash de uid 0. Los nombres remotos solo-stub fallan de forma segura. |
| mismo residual | mismo sink | Recon: Probado en lab: flag de permiso para todas las páginas. |
| mismo residual | mismo sink | Disponibilidad: Ninguna mostrada. |
Requiere: remote WebGUI login when authmode != Local; passwordmg is not warn-root. CSRF-magic en POST salvo que se indique lo contrario. WebGUI PHP-FPM es root.
Requiere: remote WebGUI login when authmode != Local; passwordmg is not warn-root. CSRF-magic en POST salvo que se indique lo contrario. WebGUI PHP-FPM es root. CSRF-magic en POST salvo que se indique lo contrario. WebGUI PHP-FPM es root.
Nombres remotos solo-stub. usermanager en sí es warn-root. El salto de uid de SA-26_22 xmlrpc es un bug diferente.
No hay Diagnostics: Command a menos que esa página también esté concedida.
cd lab
./run.sh
Loopback 127.0.0.1:19010. Proyecto Compose pfsense-ldap-name-collision. Testigo PFSENSE-LDAP-NAME-COLLISION-WITNESS. Solo loopback: 127.0.0.1:19010. Proyecto Compose pfsense-ldap-name-collision. Testigo PFSENSE-LDAP-NAME-COLLISION-WITNESS. Gadget PHP de las líneas fijadas. El stack se desmonta tras la ejecución.
Última línea:
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
No mapear un nombre remoto a una fila local con uid 0. Usar uid === '0' estricto más el origen de autenticación. Hacer que passwordmg sea warn-root.
9363ac5b8651a1c7a333180425ce7719070f95f9