pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - RCE - IPsec login_banner start-scripts
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
Clase: RCE Alcance: Remoto
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
El banner de inicio de sesión de IPsec Mobile se almacena solo con una comprobación de longitud, y luego se vuelca sin comillas en strongswan.conf como charon.plugins.attr.28672. strongSwan termina un valor sin comillas en }. Un banner seguro para Form_Input (sin saltos de línea) puede cerrar attr / plugins y abrir charon.start-scripts. Aplicar en esa página es strongswanrc restart. charon hace popen de las rutas de start-scripts cuando se inicia. El privilegio es page-vpn-ipsec-mobile, no IPsec advanced / Diagnostics: Command.
| ID | sin CVE todavía |
| Clase | RCE |
| Alcance | Remoto (WebGUI autenticada) |
| CWE | CWE-74 |
| 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) IPsec login_banner |
| Autenticación | Sesión WebGUI con page-vpn-ipsec-mobile |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
Fijé el master público 9363ac5. El laboratorio está fijado a ipsec_strongswan_confgen más el /usr/lib/ipsec/charon real. Loopback 127.0.0.1:18850. No se usó el prefijo include .
| Método | Sink | Privilegio |
|---|---|---|
POST a vpn_ipsec_mobile.php save con login_banner_enable + un banner que cierra attr/plugins y abre charon.start-scripts, luego POST apply | ipsec_strongswan_confgen sin comillas key = {$value} (ipsec.inc:1378-1384); popen de charon sobre start-scripts | Integridad (probado en laboratorio): el charon real cargó la conf generada e hizo popen de la ruta de start-scripts (charon=yes). El banner de control Welcome permaneció dentro de attr (control-no-scripts=yes). |
| Mismo popen | sistema de archivos del host | Recon (inferido): config.xml, claves. |
strongswan.conf inválido o reinicio de IPsec | charon | Disponibilidad (inferido): los túneles IPsec se caen o no arrancan. Apply ya reinicia IPsec. |
Probado en laboratorio vs inferido: control-no-scripts, start-scripts en la conf generada y el popen del charon real están probados en laboratorio. El reconocimiento del sistema de archivos se infiere de ese popen. Las secciones dummy después del bloque inyectado absorben los tres cierres de confgen para que el archivo siga siendo un árbol de configuración válido.
Requiere: sesión WebGUI con page-vpn-ipsec-mobile. Token CSRF. Guardar y luego Aplicar en la misma página. No requiere page-all, page-vpn-ipsec-editphase1 ni un textarea de configuración raw de IPsec.
| Superficie | Laboratorio |
|---|---|
Banner de control Welcome | permanece dentro de attr, sin start-scripts |
| Sin autenticación / CSRF sin token | cerrado |
OpenVPN config.ovpn | residuo diferente (G2) |
| XSS HTML de P1 | lista de omisión SA-26_14 |
page-vpn-ipsec-editphase1 | no requerido |
| Diagnostics: Command | permanece cerrado a menos que también se otorgue |
El dns_domain de IPsec mobile en esta página ya usa is_domain().
cd lab
./run.sh
Loopback 127.0.0.1:18850. Proyecto Compose pfsense-ipsec-login-banner. Etiqueta de imagen pfsense-ipsec-login-banner:2.9.0-dev. Testigo PFSENSE-IPSEC-LOGIN-BANNER-WITNESS. Última línea:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
Poner entre comillas / escapar login_banner en ipsec_strongswan_confgen. Rechazar } # y saltos de línea al guardar (el widget HTML ya es un Form_Input de una sola línea). is_domain() ya existe en esta página para el dominio DNS; el banner necesita el mismo tipo de comprobación.
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts