pfSense CE 2.9.0-DEVELOPMENT - Alta - Remota - RCE - Procedura guidata OpenVPN CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-openvpn-wizard-crlf
Classe: RCE Portata: Remota
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
La procedura guidata OpenVPN copia Default Domain / NetBIOS scope in dns_domain / netbios_scope senza alcun controllo is_domain(), poi openvpn_add_dhcpopts() li scrive in un config.ovpn del server che ha già script-security 3. Una virgoletta più LF chiude la riga push "dhcp-option ..." e aggiunge direttive server tra cui up. Il privilegio è Wizard Subsystem, non OpenVPN advanced. Gemello di SA-26_07, che nominava solo vpn_openvpn_server.php.
| ID | nessuna CVE al momento |
| Classe | RCE |
| Portata | Remota (WebGUI autenticata) |
| 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 |
| Prodotto | pfSense CE |
| Affetto | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) procedura guidata OpenVPN |
| Auth | Sessione WebGUI con page-pfsensewizardsubsystem |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Ho fissato il master pubblico 9363ac5. Il lab è l'assegnazione della procedura guidata fissata più openvpn_add_dhcpopts, poi OpenVPN 2.6.14 su tun0. Loopback 127.0.0.1:18820. Se la 2.9.0-RELEASE ha aggirato l'helper, questa è la stessa SA di SA-26_07.
| Metodo | Sink | Privilegio |
|---|---|---|
Completare la procedura guidata OpenVPN Remote Access; impostare Default Domain (o NetBIOS scope) a un valore che chiude la riga push e aggiunge up | openvpn_add_dhcpopts nel config.ovpn del server (openvpn.inc:697-738) con script-security 3 (:905) | Integrità (dimostrata in lab): OpenVPN 2.6.14 ha eseguito quell'up su tun0 e ha scritto il witness (up-exec=yes). Il controllo example.com è rimasto un singolo push DOMAIN. |
| Comandi sullo stesso host | OpenVPN up come utente del daemon (root su pfSense) | Ricognizione (inferita): filesystem dell'host, config.xml, chiavi. |
| Configurazione OpenVPN corrotta o comandi sull'host | Server OpenVPN | Disponibilità (inferita): interruzione di OpenVPN / firewall. |
Dimostrato in lab vs inferito: l'assegnazione della procedura guidata, dhcpopts up, script-security 3, control-clean e tun0 up-exec sono dimostrati in lab. La ricognizione del filesystem è inferita dal processo up. Lo stesso avvelenamento in un blob CCD non è stato eseguito (ccd-up-ignored=yes).
Richiede: sessione WebGUI con page-pfsensewizardsubsystem. Token CSRF. Non richiede page-openvpn-server o page-openvpn-server-advanced.
| Superficie | Lab |
|---|---|
Dominio di controllo example.com | un push DOMAIN, control-clean=yes |
CCD up (sottoinsieme OpenVPN 2.6) | ccd-up-ignored=yes |
| Non autenticato / CSRF senza token | chiuso |
OpenVPN custom_options | privilegio advanced previsto |
| Diagnostica: Command | resta chiuso se non concesso anch'esso |
cd lab
./run.sh
Loopback 127.0.0.1:18820. Progetto Compose pfsense-openvpn-wizard-crlf. Tag immagine pfsense-openvpn-wizard-crlf:2.9.0-dev. Witness PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS. Ultima riga:
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() (o rimuovere CR/LF/virgolette) sui campi defaultdomain / nbtscope della procedura guidata prima che diventino dns_domain / netbios_scope, come già fa IPsec mobile. Sanificare all'interno di openvpn_add_dhcpopts() in modo che ogni chiamante sia coperto, inclusa la procedura guidata.
9363ac5b8651a1c7a333180425ce7719070f95f9openvpn_wizard.incopenvpn.inc openvpn_add_dhcpoptsfd301381 (non presente in questo albero pubblico)