
pfSense CE 2.9.0-DEVELOPMENT — высокий — удалённо — инъекция конфигурации — CP maxprocperip nginx
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-cp-maxprocperip
Класс: Инъекция конфигурации Доступ: Удалённый
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Проверка целого числа выполняется для неиспользуемого POST-параметра maxproc. maxprocperip сохраняется как есть и выводится как limit_conn addr $maxprocperip; внутри server{}. Дополнительный location/alias принимается.
| ID | CVE пока нет |
| Класс | Инъекция конфигурации |
| Доступ | Удалённый (аутентифицированный WebGUI, если не указано иное) |
| CWE | CWE-94 |
| CVSS | Высокий: 7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L |
| Продукт | pfSense CE |
| Затронуто | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Аутентификация | Сессия WebGUI с plant with page-services-captiveportal; then unauth on the portal listener |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал публичный master 9363ac5. Лаборатория — это PHP-гаджет зафиксированного sink, loopback HTTP на 127.0.0.1:19120.
Серия статей: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Метод | Sink | Привилегия |
|---|---|---|
| POST services_captiveportal.php maxprocperip, затем неаутентифицированный GET портального vhost | system_generate_nginx_config limit_conn addr $maxprocperip; | Целостность: Доказано в лаборатории: дополнительный location /p { alias /oracle/; } внутри CP server{}. nginx -t прошёл. |
| тот же остаток | тот же sink | Разведка: Доказано в лаборатории: неаутентифицированный GET этого location вернул внедрённый файл на портальном vhost, а не в GUI. RCE на хосте не показан. |
| тот же остаток | тот же sink | Доступность: Предположительно: недействительный nginx не может запустить эту зону. |
Требуется: plant with page-services-captiveportal; then unauth on the portal listener. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
Требуется: plant with page-services-captiveportal; then unauth on the portal listener. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root. CSRF-magic при POST, если не указано иное. WebGUI PHP-FPM работает от root.
GUI nginx (captive_portal=false). Неаутентифицированное внедрение. RCE на хосте.
Нет Diagnostics: Command, если эта страница также не предоставлена.
cd lab
./run.sh
Loopback 127.0.0.1:19120. Проект Compose pfsense-cp-maxprocperip. Свидетель PFSENSE-CP-MAXPROCPERIP-WITNESS. Только loopback: 127.0.0.1:19120. Проект Compose pfsense-cp-maxprocperip. Свидетель PFSENSE-CP-MAXPROCPERIP-WITNESS. PHP-гаджет зафиксированных строк. Стек удаляется после запуска.
Последняя строка:
SUCCESS PFSENSE-CP-MAXPROCPERIP control-limit-conn=yes nginx-t-control=yes trigger-inject=yes nginx-t-trigger=yes host-read=yes fail-to-start=no PFSENSE-CP-MAXPROCPERIP-WITNESS
is_numericint maxprocperip. Отклонять фигурные скобки/точки с запятой.
9363ac5b8651a1c7a333180425ce7719070f95f9