pfSense CE 2.9.0-DEVELOPMENT - Élevé - À distance - RCE - Assistant OpenVPN CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-openvpn-wizard-crlf
Classe : RCE Portée : Distante
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
L'assistant OpenVPN copie le Default Domain / NetBIOS scope dans dns_domain / netbios_scope sans vérification is_domain(), puis openvpn_add_dhcpopts() les écrit dans un config.ovpn serveur qui contient déjà script-security 3. Un guillemet suivi d'un LF ferme la ligne push "dhcp-option ..." et ajoute des directives serveur, dont up. Le privilège est Wizard Subsystem, pas OpenVPN advanced. Frère de SA-26_07, qui ne nommait que vpn_openvpn_server.php.
| ID | pas encore de CVE |
| Classe | RCE |
| Portée | Distante (WebGUI authentifiée) |
| CWE | CWE-74 / CWE-78 |
| CVSS | Élevé : 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Produit | pfSense CE |
| Affecté | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) assistant OpenVPN |
| Auth | session WebGUI avec page-pfsensewizardsubsystem |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement |
J'ai épinglé le master public 9363ac5. Le lab correspond à l'assignation de l'assistant épinglé plus openvpn_add_dhcpopts, puis OpenVPN 2.6.14 sur tun0. Loopback 127.0.0.1:18820. Si la 2.9.0-RELEASE a échappé au helper, c'est la même SA que SA-26_07.
| Méthode | Sink | Privilège |
|---|---|---|
Terminer l'assistant OpenVPN Remote Access ; définir Default Domain (ou NetBIOS scope) sur une valeur qui ferme la ligne push et ajoute up | openvpn_add_dhcpopts dans le config.ovpn serveur (openvpn.inc:697-738) avec script-security 3 (:905) | Intégrité (prouvée en lab) : OpenVPN 2.6.14 a exécuté ce up sur tun0 et écrit le témoin (up-exec=yes). Le contrôle example.com est resté un unique push DOMAIN. |
| Commandes sur le même hôte | OpenVPN up en tant qu'utilisateur du démon (root sur pfSense) | Recon (inféré) : système de fichiers de l'hôte, config.xml, clés. |
| Configuration OpenVPN cassée ou commandes sur l'hôte | Serveur OpenVPN | Disponibilité (inférée) : perturbation d'OpenVPN / du pare-feu. |
Prouvé en lab vs inféré : l'assignation de l'assistant, dhcpopts up, script-security 3, control-clean et tun0 up-exec sont prouvés en lab. La reconnaissance du système de fichiers est inférée à partir du processus up. Le même poison dans un blob CCD n'a pas été exécuté (ccd-up-ignored=yes).
Nécessite : une session WebGUI avec page-pfsensewizardsubsystem. Un token CSRF. Ne nécessite pas page-openvpn-server ni page-openvpn-server-advanced.
| Surface | Lab |
|---|---|
Domaine de contrôle example.com | un push DOMAIN, control-clean=yes |
CCD up (sous-ensemble OpenVPN 2.6) | ccd-up-ignored=yes |
| Non authentifié / CSRF sans token | fermé |
OpenVPN custom_options | privilège avancé prévu |
| Diagnostics : Command | reste fermé sauf si également accordé |
cd lab
./run.sh
Loopback 127.0.0.1:18820. Projet Compose pfsense-openvpn-wizard-crlf. Tag d'image pfsense-openvpn-wizard-crlf:2.9.0-dev. Témoin PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS. Dernière ligne :
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 suppression des CR/LF/guillemets) sur defaultdomain / nbtscope de l'assistant avant qu'ils ne deviennent dns_domain / netbios_scope, comme le fait déjà IPsec mobile. Assainir à l'intérieur de openvpn_add_dhcpopts() afin que tous les appelants soient couverts, y compris l'assistant.
9363ac5b8651a1c7a333180425ce7719070f95f9openvpn_wizard.incopenvpn.inc openvpn_add_dhcpoptsfd301381 (absent de cet arbre public)