pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - RCE - Assistente OpenVPN CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-openvpn-wizard-crlf
Classe: RCE Alcance: Remoto
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
O assistente do OpenVPN copia Default Domain / NetBIOS scope para dns_domain / netbios_scope sem qualquer verificação is_domain(), e depois openvpn_add_dhcpopts() escreve-os num config.ovpn de servidor que já tem script-security 3. Uma aspa seguida de LF fecha a linha push "dhcp-option ..." e adiciona diretivas de servidor, incluindo up. O privilégio é Wizard Subsystem, não OpenVPN advanced. Irmão do SA-26_07, que nomeava apenas vpn_openvpn_server.php.
| ID | ainda sem CVE |
| Classe | RCE |
| Alcance | Remoto (WebGUI autenticada) |
| CWE | CWE-74 / CWE-78 |
| 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) assistente OpenVPN |
| Autenticação | Sessão WebGUI com page-pfsensewizardsubsystem |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | apenas 127.0.0.1 |
Fixeio o master público 9363ac5. O laboratório é a atribuição do assistente fixada mais openvpn_add_dhcpopts, depois OpenVPN 2.6.14 em tun0. Loopback 127.0.0.1:18820. Se a 2.9.0-RELEASE escapou ao helper, este é o mesmo SA que o SA-26_07.
| Método | Sink | Privilégio |
|---|---|---|
Completar o assistente OpenVPN Remote Access; definir Default Domain (ou NetBIOS scope) para um valor que fecha a linha push e adiciona up | openvpn_add_dhcpopts no config.ovpn do servidor (openvpn.inc:697-738) com script-security 3 (:905) | Integridade (comprovada em laboratório): o OpenVPN 2.6.14 executou esse up em tun0 e escreveu a testemunha (up-exec=yes). O controlo example.com permaneceu um único push DOMAIN. |
| Comandos no mesmo host | OpenVPN up como o utilizador do daemon (root no pfSense) | Recon (inferido): sistema de ficheiros do host, config.xml, chaves. |
| Configuração OpenVPN quebrada ou comandos no host | Servidor OpenVPN | Disponibilidade (inferida): perturbação do OpenVPN / firewall. |
Comprovado em laboratório vs inferido: a atribuição do assistente, o up do dhcpopts, script-security 3, control-clean e o up-exec em tun0 estão comprovados em laboratório. O recon do sistema de ficheiros é inferido a partir do processo up. O mesmo veneno num blob CCD não foi executado (ccd-up-ignored=yes).
Requer: sessão WebGUI com page-pfsensewizardsubsystem. Token CSRF. Não requer page-openvpn-server nem page-openvpn-server-advanced.
| Superfície | Laboratório |
|---|---|
Domínio de controlo example.com | um push DOMAIN, control-clean=yes |
CCD up (subconjunto OpenVPN 2.6) | ccd-up-ignored=yes |
| Não autenticado / CSRF sem token | fechado |
custom_options do OpenVPN | privilégio avançado pretendido |
| Diagnostics: Command | permanece fechado a menos que também seja concedido |
cd lab
./run.sh
Loopback 127.0.0.1:18820. Projeto Compose pfsense-openvpn-wizard-crlf. Tag da imagem pfsense-openvpn-wizard-crlf:2.9.0-dev. Testemunha PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS. Última linha:
SUCCESS PFSENSE-OPENVPN-WIZARD-CRLF wizard-assign=yes dhcpopts-up=yes script-security-3=yes control-clean=yes up-exec=yes PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS
is_domain() (ou remover CR/LF/aspas) no defaultdomain / nbtscope do assistente antes de se tornarem dns_domain / netbios_scope, tal como o IPsec mobile já faz. Sanitizar dentro de openvpn_add_dhcpopts() para que todos os chamadores fiquem cobertos, incluindo o assistente.
9363ac5b8651a1c7a333180425ce7719070f95f9openvpn_wizard.incopenvpn.inc openvpn_add_dhcpoptsfd301381 (não está nesta árvore pública)