
pfSense CE 2.9.0-DEVELOPMENT — высокий уровень — удалённый — RCE — timezone php.ini prepend
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-timezone-phpini
Класс: RCE Доступ: Удалённый
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
system.php записывает $_POST['timezone'] без проверки in_array по system_get_timezone_list(). is_timezone() отклоняет только завершающий слэш. system_timezone_configure записывает /var/db/zoneinfo. rc.php_ini_setup подставляет date.timezone="${TIMEZONE}" в php.ini. Кавычка плюс перевод строки добавляет auto_prepend_file.
| ID | CVE пока нет |
| Класс | RCE |
| Доступ | Удалённый (аутентифицированный 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 |
| Продукт | pfSense CE |
| Затронуто | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Аутентификация | Сессия WebGUI с page-system-generalsetup |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал публичный master 9363ac5. Лаборатория — это PHP-гаджет зафиксированного sink, loopback HTTP на 127.0.0.1:18940.
Разбор серии: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Метод | Sink | Привилегия |
|---|---|---|
| POST system.php timezone | rc.php_ini_setup date.timezone="${TIMEZONE}" | Целостность: Доказано в лаборатории: сгенерированный php.ini принял auto_prepend_file; php -c плюс аналог скрипта php-fpm выполнил prepend и записал свидетельство. |
| тот же остаток | тот же sink | Разведка: Предположительно: prepend выполняется как root PHP после пересборки php.ini / перезапуска php-fpm. |
| тот же остаток | тот же sink | Доступность: Предположительно: сломанный php.ini может вывести GUI из строя до восстановления. |
Требуется: page-system-generalsetup. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
Требуется: page-system-generalsetup. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
Form_Select — только UI. hostname/domain имеют собственные проверки набора символов. Без аутентификации — неприменимо.
Нет Diagnostics: Command, если эта страница также не предоставлена.
cd lab
./run.sh
Loopback 127.0.0.1:18940. Compose-проект pfsense-timezone-phpini. Свидетельство PFSENSE-TIMEZONE-PHPINI-WITNESS. Только loopback: 127.0.0.1:18940. Compose-проект pfsense-timezone-phpini. Свидетельство PFSENSE-TIMEZONE-PHPINI-WITNESS. PHP-гаджет зафиксированных строк. Стек разбирается после запуска.
Последняя строка:
SUCCESS PFSENSE-TIMEZONE-PHPINI control-clean=yes trigger-prepend=yes is-timezone-accepts=yes not-allowlisted=yes PFSENSE-TIMEZONE-PHPINI-WITNESS
in_array timezone по system_get_timezone_list(). Экранировать кавычки в подстановке rc.php_ini_setup.
9363ac5b8651a1c7a333180425ce7719070f95f9