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
Classe: RCE Alcance: Remoto
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
O banner de login do IPsec Mobile é armazenado apenas com uma verificação de comprimento e depois inserido sem aspas em strongswan.conf como charon.plugins.attr.28672. O strongSwan encerra um valor sem aspas em }. Um banner seguro para Form_Input (sem quebras de linha) pode fechar attr / plugins e abrir charon.start-scripts. Aplicar nessa página é strongswanrc restart. O charon faz popen nos caminhos de start-scripts quando inicia. O privilégio é page-vpn-ipsec-mobile, não IPsec advanced / Diagnostics: Command.
| ID | sem CVE ainda |
| Classe | 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 |
| Produto | pfSense CE |
| Afetado | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) IPsec login_banner |
| Autenticação | Sessão WebGUI com page-vpn-ipsec-mobile |
| Licença | GNU Affero GPL v3.0 |
| Lab | apenas 127.0.0.1 |
Fixe o master público 9363ac5. O lab está fixado em ipsec_strongswan_confgen mais o /usr/lib/ipsec/charon real. Loopback 127.0.0.1:18850. O prefixo include não foi usado.
| Método | Sink | Privilégio |
|---|---|---|
POST vpn_ipsec_mobile.php save com login_banner_enable + um banner que fecha attr/plugins e abre charon.start-scripts, depois POST apply | ipsec_strongswan_confgen sem aspas key = {$value} (ipsec.inc:1378-1384); charon popen de start-scripts | Integridade (comprovada em lab): o charon real carregou a conf gerada e fez popen no caminho de start-scripts (charon=yes). O banner de controle Welcome permaneceu dentro de attr (control-no-scripts=yes). |
| Mesmo popen | sistema de arquivos do host | Recon (inferido): config.xml, chaves. |
strongswan.conf inválido ou reinício do IPsec | charon | Disponibilidade (inferido): túneis IPsec caem ou falham ao iniciar. O Apply já reinicia o IPsec. |
Comprovado em lab vs inferido: control-no-scripts, start-scripts na conf gerada e popen do charon real são comprovados em lab. O recon do sistema de arquivos é inferido a partir desse popen. Seções dummy após o bloco injetado absorvem os três fechamentos do confgen para que o arquivo permaneça uma árvore de configurações válida.
Requer: sessão WebGUI com page-vpn-ipsec-mobile. Token CSRF. Save e depois Apply na mesma página. Não requer page-all, page-vpn-ipsec-editphase1 ou uma textarea de configuração bruta do IPsec.
| Superfície | Lab |
|---|---|
Banner de controle Welcome | permanece dentro de attr, sem start-scripts |
| Não autenticado / CSRF sem token | fechado |
OpenVPN config.ovpn | resíduo diferente (G2) |
| XSS HTML do P1 | skip-list SA-26_14 |
page-vpn-ipsec-editphase1 | não requerido |
| Diagnostics: Command | permanece fechado a menos que também concedido |
O dns_domain do IPsec mobile nesta página já usa is_domain().
cd lab
./run.sh
Loopback 127.0.0.1:18850. Projeto Compose pfsense-ipsec-login-banner. Tag da imagem pfsense-ipsec-login-banner:2.9.0-dev. Witness PFSENSE-IPSEC-LOGIN-BANNER-WITNESS. Última linha:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
Colocar login_banner entre aspas / escapar em ipsec_strongswan_confgen. Rejeitar } # e quebras de linha ao salvar (o widget HTML já é um Form_Input de linha única). is_domain() já existe nesta página para o domínio DNS; o banner precisa do mesmo tipo de verificação.
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts