pfSense CE 2.9.0-DEVELOPMENT - Alto - Remoto - RCE - IPsec login_banner start-scripts
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
Classe: RCE Portata: Remota
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Il banner di login di IPsec Mobile viene memorizzato con un solo controllo di lunghezza, poi riversato senza virgolette in strongswan.conf come charon.plugins.attr.28672. strongSwan termina un valore non quotato su }. Un banner compatibile con Form_Input (senza newline) può chiudere attr / plugins e aprire charon.start-scripts. Apply su quella pagina è strongswanrc restart. charon esegue popen sui percorsi di start-scripts quando si avvia. Il privilegio è page-vpn-ipsec-mobile, non IPsec advanced / Diagnostics: Command.
| ID | nessuna CVE al momento |
| Classe | RCE |
| Portata | Remota (WebGUI autenticata) |
| 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 |
| Prodotto | pfSense CE |
| Affetto | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) IPsec login_banner |
| Auth | Sessione WebGUI con page-vpn-ipsec-mobile |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Ho fissato il master pubblico 9363ac5. Il lab è fissato a ipsec_strongswan_confgen più il vero /usr/lib/ipsec/charon. Loopback 127.0.0.1:18850. Il prefisso include non è stato usato.
| Metodo | Sink | Privilegio |
|---|---|---|
POST vpn_ipsec_mobile.php save con login_banner_enable + un banner che chiude attr/plugins e apre charon.start-scripts, poi POST apply | ipsec_strongswan_confgen non quotato key = {$value} (ipsec.inc:1378-1384); charon popen di start-scripts | Integrità (dimostrata in lab): il vero charon ha caricato la conf generata ed eseguito popen sul percorso di start-scripts (charon=yes). Il banner di controllo Welcome è rimasto dentro attr (control-no-scripts=yes). |
| Stesso popen | filesystem dell'host | Ricognizione (inferita): config.xml, chiavi. |
strongswan.conf non valido o riavvio IPsec | charon | Disponibilità (inferita): i tunnel IPsec cadono o non si avviano. Apply riavvia già IPsec. |
Dimostrato in lab vs inferito: control-no-scripts, start-scripts nella conf generata e il popen del vero charon sono dimostrati in lab. La ricognizione del filesystem è inferita da quel popen. Le sezioni fittizie dopo il blocco iniettato assorbono i tre chiusori di confgen così il file rimane un albero di impostazioni valido.
Richiede: sessione WebGUI con page-vpn-ipsec-mobile. Token CSRF. Save poi Apply sulla stessa pagina. Non richiede page-all, page-vpn-ipsec-editphase1, o una textarea di configurazione raw IPsec.
| Superficie | Lab |
|---|---|
Banner di controllo Welcome | rimane dentro attr, nessun start-scripts |
| Non autenticato / CSRF senza token | chiuso |
OpenVPN config.ovpn | residuo diverso (G2) |
| XSS HTML P1 | skip-list SA-26_14 |
page-vpn-ipsec-editphase1 | non richiesto |
| Diagnostics: Command | rimane chiuso a meno che non sia anche concesso |
Il dns_domain di IPsec mobile su questa pagina usa già is_domain().
cd lab
./run.sh
Loopback 127.0.0.1:18850. Progetto Compose pfsense-ipsec-login-banner. Tag immagine pfsense-ipsec-login-banner:2.9.0-dev. Witness PFSENSE-IPSEC-LOGIN-BANNER-WITNESS. Ultima riga:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
Quotare / effettuare l'escape di login_banner in ipsec_strongswan_confgen. Rifiutare } # e newline al salvataggio (il widget HTML è già un Form_Input a riga singola). is_domain() esiste già su questa pagina per il dominio DNS; il banner necessita della stessa classe di controllo.
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts