
pfSense CE 2.9.0-DEVELOPMENT - उच्च - रिमोट - RCE - QinQ parent-if ifconfig
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-qinq-parent-if
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
QinQ संपादन एक parent interface नाम को बिना किसी does_interface_exist जाँच के संग्रहीत करता है। VLAN संपादन पहले से ही ऐसे parent को अस्वीकार करता है जो लाइव iface नहीं है। Form_Select POST को पुनः मान्य नहीं करता। write_config तब भी बनाता है जब interface_qinq_configure जल्दी लौट आता है। सदस्य जोड़ना/हटाना फिर संग्रहीत vlanif को unescaped ifconfig में इंटरपोलेट करता है। PHP exec /bin/sh -c है। WebGUI PHP-FPM root है। विशेषाधिकार page-interfaces-qinq-edit है, Diagnostics: Command नहीं।
| ID | अभी तक कोई CVE नहीं |
| Class | RCE |
| Reach | Remote (प्रमाणित 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) QinQ संपादन |
| Auth | page-interfaces-qinq-edit के साथ WebGUI सत्र |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
मैंने सार्वजनिक master 9363ac5 को पिन किया। लैब पिन किए गए vlan_interface / interface_qinq_configure / सदस्य exec पंक्तियों का एक PHP गैजेट है, 127.0.0.1:18810 पर लूपबैक HTTP।
| Method | Sink | Privilege |
|---|---|---|
| ऐसे parent के साथ POST QinQ create जो लाइव iface नहीं है, फिर सदस्य जोड़ते हुए POST edit | interface_qinq2_configure exec ifconfig vlan create ... (interfaces.inc:620) | Integrity (lab-proven): /bin/sh -c के माध्यम से root shell। लैब: member-add qinq2 ने witness लिखा (member-sink=yes)। |
वही संग्रहीत vlanif, सदस्य हटाते हुए POST edit | exec("/sbin/ifconfig {$parent}.{$tag} destroy") (interfaces_qinq_edit.php:212) | Integrity (lab-proven): वही root exec। Destroy पर कोई IF_NAMESIZE सीमा नहीं है। |
| वही root shell | होस्ट फ़ाइलसिस्टम | Recon (inferred): config.xml, keys, अन्य tenants। यह पृष्ठ exec आउटपुट प्रिंट नहीं करता। |
Root shell या टूटा ifconfig | vlan devices | Availability (inferred): vlan devices बनाएँ/नष्ट करें; data plane प्रभावित हो सकता है। |
Lab-proven vs inferred: VLAN reject, create-only no exec, len 16 पर IF_NAMESIZE block, और member-add qinq2 witness lab-proven हैं। Filesystem recon और data-plane disruption root PHP-FPM से inferred हैं।
Requires: page-interfaces-qinq-edit के साथ WebGUI सत्र। CSRF token। दो POSTs (create, फिर member edit)। डिफ़ॉल्ट admin के पास यह पृष्ठ है। एक सीमित उपयोगकर्ता को केवल यह पृष्ठ दिया जा सकता है।
| Surface | Lab |
|---|---|
| VLAN parent existence check | vlan-rejected=yes |
| QinQ create-only (parent missing) | config संग्रहीत करता है, create-no-exec=yes |
| qinq2 name length 16 | exec से पहले if-namesize-block=yes |
| बिना token के Unauth / CSRF | guiconfig + CSRF-magic |
GIF/GRE name regex, LAGG members does_interface_exist + escapeshellarg | अन्य पृष्ठ |
| कभी न बनाए गए parent का QinQ list delete | does_interface_exist($vlanif) |
| Diagnostics: Command | बंद रहता है जब तक अतिरिक्त रूप से अनुदान न दिया जाए |
कोई Diagnostics: Command नहीं। कोई unauth नहीं। ऐतिहासिक वर्ग CVE-2023-42326 GIF/GRE है, भिन्न पृष्ठ।
cd lab
./run.sh
Loopback 127.0.0.1:18810. Compose project pfsense-qinq-parent-if. Image tag pfsense-qinq-parent-if:2.9.0-dev. Witness PFSENSE-QINQ-PARENT-IF-WITNESS. अंतिम पंक्ति:
SUCCESS PFSENSE-QINQ-PARENT-IF vlan-rejected=yes create-no-exec=yes member-sink=yes if-namesize-block=yes PFSENSE-QINQ-PARENT-IF-WITNESS
QinQ संपादन: ऐसे parent को अस्वीकार करें जो लाइव interface नहीं है, VLAN संपादन की तरह। सदस्य tags का Integer-check पहले से मौजूद है; फिर भी प्रत्येक ifconfig से पहले संग्रहीत vlanif को escapeshellarg करें। सदस्य-हटाने वाले destroy को उसी तरह सीमित करें जैसे interface_qinq2_configure IF_NAMESIZE को सीमित करता है।
9363ac5b8651a1c7a333180425ce7719070f95f9interfaces_qinq_edit.phpinterfaces.inc interface_qinq2_configureinterfaces_vlan_edit.php