
pfSense CE 2.9.0-DEVELOPMENT - उच्च - रिमोट - RCE - CARP VHID अवशेष
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-carp-vhid
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Virtual IP edit, POST से CARP VHID को बिना 1-255 जाँच के संग्रहीत करता है। Form_Select विकल्प केवल HTML हैं। CARP apply VHID को escapeshellarg करता है। Stacked IP Alias apply vhid {$carpvip['vhid']} को escapeshellarg के बाहर interpolate करता है। CARP status उसी संग्रहीत VHID को double-quoted grep pipeline में interpolate करता है; semicolon quoted रहता है, command substitution अभी भी /bin/sh -c के अंतर्गत चलता है। विशेषाधिकार VIP edit + apply है, Diagnostics: Command नहीं।
| ID | अभी तक कोई CVE नहीं |
| Class | RCE |
| Reach | Remote (authenticated WebGUI) |
| CWE | CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Product | pfSense CE |
| Affected | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) CARP VHID |
| Auth | VIP edit + apply के साथ WebGUI session (status/widget बाद में trigger है) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
मैंने public master 9363ac5 को pin किया। Lab pinned interface_carp_configure, stacked ipalias mwexec, और status exec का PHP gadget है। Loopback 127.0.0.1:18830।
| Method | Sink | Privilege |
|---|---|---|
non-integer VHID के साथ carp VIP POST करें, फिर उस _vip{uniqid} parent पर stacked IP Alias apply करें | mwexec ifconfig ... alias {$gateway} {$vhid} (interfaces.inc:3238) | Integrity (lab-proven): root shell। Lab: ipalias-unescaped ने witness लिखा। उसी VHID का CARP apply ने कुछ नहीं लिखा (carp-escaped=yes)। |
वही संग्रहीत VHID, फिर GET status_carp.php या carp_status.widget.php render करें | exec grep pipeline (pfsense-utils.inc:794) | Integrity (lab-proven): double quotes के अंदर command substitution चला और witness लिखा (status-sink=yes, status-subst=yes)। Semicolon quoted रहा। Widget trigger दूसरा GUI session हो सकता है। |
| वही root shell | host filesystem | Recon (inferred): config.xml, keys। |
Root shell या टूटा ifconfig | CARP / alias devices | Availability (inferred): interface / CARP / filter disruption। |
Lab-proven vs inferred: carp-escaped, ipalias-unescaped witness, और status command-substitution witness lab-proven हैं। Filesystem recon और filter disruption root PHP-FPM से inferred हैं।
Requires: page-firewall-virtualipaddress-edit (save) और page-firewall-virtualipaddresses (apply)। Status sink: page-status-carp या CARP widget वाला कोई भी dashboard। POST पर CSRF।
| Surface | Lab |
|---|---|
| CARP apply स्वयं | VHID पर escapeshellarg, carp-escaped=yes |
| CARP password / advbase / advskew / subnet | is_ipaddr / escaped |
| Unauth | बंद |
| HA creds के बिना उन्हीं objects का xmlrpc apply | SA-26_22 skip-list |
| Diagnostics: Command | जब तक अलग से अनुदान न हो, बंद रहता है |
cd lab
./run.sh
Loopback 127.0.0.1:18830। Compose project pfsense-carp-vhid। Image tag pfsense-carp-vhid:2.9.0-dev। Witness PFSENSE-CARP-VHID-WITNESS। अंतिम पंक्ति:
SUCCESS PFSENSE-CARP-VHID carp-escaped=yes ipalias-unescaped=yes status-sink=yes PFSENSE-CARP-VHID-WITNESS
Save पर VHID को 1-255 तक integer-range करें। Stacked IP Alias apply पर और status grep पर VHID को escapeshellarg करें, जैसे CARP apply पहले से करता है।
9363ac5b8651a1c7a333180425ce7719070f95f9firewall_virtual_ip.inc saveVIPinterfaces.inc stacked ipalias mwexecpfsense-utils.inc CARP status grep