pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - Escritura de archivos - Gestor de archivos CP
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-cp-filemanager-write
Clase: Escritura de archivos Alcance: Remoto
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
El nombre de carga no es basename(). Un nombre que ya contiene captiveportal- omite el prefijo. file_put_contents("{$g['captiveportal_element_path']}/{$data['name']}") con cpelements = /var/db/cpelements. El ../ restante después de captiveportal-.. todavía recorre hasta /.
| ID | aún sin CVE |
| Clase | Escritura de archivos |
| Alcance | Remoto (WebGUI autenticado salvo que se indique lo contrario) |
| CWE | CWE-22 |
| 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) |
| Autenticación | Sesión de WebGUI con page-services-captiveportal-filemanager |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
Fijé el master público 9363ac5. El laboratorio es un gadget PHP del sink fijado, HTTP en loopback sobre 127.0.0.1:19000.
Análisis de la serie: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Método | Sink | Privilegio |
|---|---|---|
| POST services_captiveportal_filemanager.php nombre de archivo | file_put_contents cpelements/{$data['name']} | Integridad: Probado en laboratorio: el nombre captiveportal-../../../../../oracle/... omitió el prefijo y escribió fuera de cpelements. La escritura PHP como root es RCE en el host en esta plataforma. |
| mismo remanente | mismo sink | Reconocimiento: Inferido: sobrescribir config.xml o PHP de www. |
| mismo remanente | mismo sink | Disponibilidad: Inferido: sobrescribir archivos críticos. |
Requiere: page-services-captiveportal-filemanager. CSRF-magic en POST salvo que se indique lo contrario. WebGUI PHP-FPM es root.
Requiere: page-services-captiveportal-filemanager. 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.
Un nombre sin la subcadena recibe el prefijo y no puede escapar de esa forma. El PHP documentado dentro del jail del portal es una característica diferente.
No hay Diagnostics: Command a menos que esa página también esté concedida.
cd lab
./run.sh
Loopback 127.0.0.1:19000. Proyecto Compose pfsense-cp-filemanager-write. Testigo PFSENSE-CP-FILEMANAGER-WRITE-WITNESS. Solo loopback: 127.0.0.1:19000. Proyecto Compose pfsense-cp-filemanager-write. Testigo PFSENSE-CP-FILEMANAGER-WRITE-WITNESS. Gadget PHP de las líneas fijadas. El stack se desmonta tras la ejecución.
Última línea:
SUCCESS PFSENSE-CP-FILEMANAGER-WRITE control-prefixed=yes prefix-no-escape=yes trigger-outside=yes PFSENSE-CP-FILEMANAGER-WRITE-WITNESS
Aplicar basename() al nombre de carga. Prefijar siempre. Rechazar .. .
9363ac5b8651a1c7a333180425ce7719070f95f9