pfSense CE 2.9.0-DEVELOPMENT - Hoch - Remote - RCE - IPsec login_banner start-scripts
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
Klasse: RCE Reichweite: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Das IPsec-Mobile-Login-Banner wird nur mit einer Längenprüfung gespeichert und dann unquoted als charon.plugins.attr.28672 in strongswan.conf geschrieben. strongSwan beendet einen unquoted Wert bei }. Ein Form_Input-sicheres Banner (keine Zeilenumbrüche) kann attr / plugins schließen und charon.start-scripts öffnen. Apply auf dieser Seite ist strongswanrc restart. charon popent start-scripts-Pfade beim Start. Die Berechtigung ist page-vpn-ipsec-mobile, nicht IPsec advanced / Diagnostics: Command.
| ID | noch keine CVE |
| Klasse | RCE |
| Reichweite | Remote (authentifiziertes WebGUI) |
| CWE | CWE-74 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Produkt | pfSense CE |
| Betroffen | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) IPsec login_banner |
| Auth | WebGUI-Sitzung mit page-vpn-ipsec-mobile |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1 |
Ich habe den öffentlichen Master 9363ac5 gepinnt. Das Lab ist auf ipsec_strongswan_confgen plus echtes /usr/lib/ipsec/charon gepinnt. Loopback 127.0.0.1:18850. Das Präfix include wurde nicht verwendet.
| Methode | Sink | Berechtigung |
|---|---|---|
POST vpn_ipsec_mobile.php save mit login_banner_enable + einem Banner, das attr/plugins schließt und charon.start-scripts öffnet, dann POST apply | ipsec_strongswan_confgen unquoted key = {$value} (ipsec.inc:1378-1384); charon popen von start-scripts | Integrität (im Lab bewiesen): echtes charon lud die generierte Konfiguration und popente den start-scripts-Pfad (charon=yes). Kontroll-Banner Welcome blieb innerhalb von attr (control-no-scripts=yes). |
| Derselbe popen | Host-Dateisystem | Recon (abgeleitet): config.xml, Schlüssel. |
Ungültige strongswan.conf oder IPsec-Neustart | charon | Verfügbarkeit (abgeleitet): IPsec-Tunnel brechen ab oder starten nicht. Apply startet IPsec ohnehin neu. |
Im Lab bewiesen vs. abgeleitet: control-no-scripts, start-scripts in der generierten Konfiguration und echtes charon popen sind im Lab bewiesen. Dateisystem-Recon wird aus diesem popen abgeleitet. Dummy-Abschnitte nach dem injizierten Block absorbieren die drei Closer von confgen, damit die Datei ein gültiger Einstellungsbaum bleibt.
Erfordert: WebGUI-Sitzung mit page-vpn-ipsec-mobile. CSRF-Token. Save, dann Apply auf derselben Seite. Erfordert nicht page-all, page-vpn-ipsec-editphase1 oder eine IPsec-Raw-Config-Textarea.
| Angriffsfläche | Lab |
|---|---|
Kontroll-Banner Welcome | bleibt innerhalb von attr, keine start-scripts |
| Unauth / CSRF ohne Token | geschlossen |
OpenVPN config.ovpn | anderer Überrest (G2) |
| P1 HTML XSS | SA-26_14 Skip-List |
page-vpn-ipsec-editphase1 | nicht erforderlich |
| Diagnostics: Command | bleibt geschlossen, sofern nicht zusätzlich gewährt |
IPsec-Mobile dns_domain auf dieser Seite verwendet bereits is_domain().
cd lab
./run.sh
Loopback 127.0.0.1:18850. Compose-Projekt pfsense-ipsec-login-banner. Image-Tag pfsense-ipsec-login-banner:2.9.0-dev. Witness PFSENSE-IPSEC-LOGIN-BANNER-WITNESS. Letzte Zeile:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
login_banner in ipsec_strongswan_confgen quoten / escapen. } # und Zeilenumbrüche beim Speichern ablehnen (das HTML-Widget ist bereits ein einzeiliges Form_Input). is_domain() existiert auf dieser Seite bereits für DNS-Domain; das Banner braucht dieselbe Art von Prüfung.
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts