
pfSense CE 2.9.0-DEVELOPMENT - उच्च - रिमोट - RCE - timezone php.ini prepend
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-timezone-phpini
Class: RCE Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
system.php, system_get_timezone_list() के विरुद्ध in_array के बिना $_POST['timezone'] लिखता है। is_timezone() केवल अंत में आने वाले स्लैश को अस्वीकार करता है। system_timezone_configure /var/db/zoneinfo लिखता है। rc.php_ini_setup, php.ini में date.timezone="${TIMEZONE}" को इंटरपोलेट करता है। कोट के साथ न्यूलाइन auto_prepend_file जोड़ता है।
| ID | अभी तक कोई CVE नहीं |
| Class | RCE |
| Reach | Remote (जब तक अन्यथा न कहा गया हो, प्रमाणित WebGUI) |
| CWE | CWE-94 |
| 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) |
| Auth | page-system-generalsetup के साथ WebGUI सत्र |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
मैंने सार्वजनिक master 9363ac5 को पिन किया। लैब पिन किए गए sink का एक PHP gadget है, 127.0.0.1:18940 पर लूपबैक HTTP।
श्रृंखला लेख: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Method | Sink | Privilege |
|---|---|---|
| POST system.php timezone | rc.php_ini_setup date.timezone="${TIMEZONE}" | Integrity: लैब-प्रमाणित: उत्पन्न php.ini ने auto_prepend_file स्वीकार किया; php -c और एक php-fpm समान स्क्रिप्ट ने prepend चलाया और witness लिखा। |
| वही leftover | वही sink | Recon: अनुमानित: php.ini पुनर्निर्माण / php-fpm पुनःआरंभ के बाद prepend root PHP के रूप में चलता है। |
| वही leftover | वही sink | Availability: अनुमानित: टूटी हुई php.ini ठीक होने तक GUI को नीचे ला सकती है। |
आवश्यक: page-system-generalsetup। जब तक अन्यथा न कहा गया हो, POST पर CSRF-magic। WebGUI PHP-FPM root है।
आवश्यक: page-system-generalsetup। जब तक अन्यथा न कहा गया हो, POST पर CSRF-magic। WebGUI PHP-FPM root है। जब तक अन्यथा न कहा गया हो, POST पर CSRF-magic। WebGUI PHP-FPM root है।
Form_Select केवल UI है। hostname/domain के अपने charset जाँच हैं। Unauth N/A।
कोई Diagnostics: Command नहीं, जब तक वह पृष्ठ भी अनुदत्त न हो।
cd lab
./run.sh
लूपबैक 127.0.0.1:18940। Compose प्रोजेक्ट pfsense-timezone-phpini। Witness PFSENSE-TIMEZONE-PHPINI-WITNESS। केवल लूपबैक: 127.0.0.1:18940। Compose प्रोजेक्ट pfsense-timezone-phpini। Witness PFSENSE-TIMEZONE-PHPINI-WITNESS। पिन की गई पंक्तियों का PHP gadget। रन के बाद स्टैक टूट जाता है।
अंतिम पंक्ति:
SUCCESS PFSENSE-TIMEZONE-PHPINI control-clean=yes trigger-prepend=yes is-timezone-accepts=yes not-allowlisted=yes PFSENSE-TIMEZONE-PHPINI-WITNESS
system_get_timezone_list() के विरुद्ध in_array timezone। rc.php_ini_setup इंटरपोलेशन को कोट-एस्केप करें।
9363ac5b8651a1c7a333180425ce7719070f95f9