pfSense CE 2.9.0-DEVELOPMENT — высокий уровень — удалённо — RCE — мастер OpenVPN CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-openvpn-wizard-crlf
Класс: RCE Доступ: Удалённый
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Мастер OpenVPN копирует Default Domain / NetBIOS scope в dns_domain / netbios_scope без проверки is_domain(), после чего openvpn_add_dhcpopts() записывает их в серверный config.ovpn, в котором уже установлен script-security 3. Кавычка вместе с LF закрывает строку push "dhcp-option ..." и добавляет серверные директивы, включая up. Привилегия — Wizard Subsystem, а не OpenVPN advanced. Родственник SA-26_07, в котором упоминался только vpn_openvpn_server.php.
| ID | CVE пока нет |
| Класс | RCE |
| Доступ | Удалённый (аутентифицированный WebGUI) |
| CWE | CWE-74 / 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 |
| Продукт | pfSense CE |
| Затронуто | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) мастер OpenVPN |
| Аутентификация | Сессия WebGUI с page-pfsensewizardsubsystem |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал публичный master 9363ac5. Лаборатория — это зафиксированное назначение мастера плюс openvpn_add_dhcpopts, затем OpenVPN 2.6.14 на tun0. Loopback 127.0.0.1:18820. Если 2.9.0-RELEASE избежал этого помощника, это тот же SA, что и SA-26_07.
| Метод | Точка сброса | Привилегия |
|---|---|---|
Пройти мастер OpenVPN Remote Access; задать Default Domain (или NetBIOS scope) значением, которое закрывает строку push и добавляет up | openvpn_add_dhcpopts в серверный config.ovpn (openvpn.inc:697-738) с script-security 3 (:905) | Целостность (доказано в лаборатории): OpenVPN 2.6.14 выполнил этот up на tun0 и записал свидетельство (up-exec=yes). Контрольный example.com остался единственным DOMAIN push. |
| Те же команды хоста | OpenVPN up от имени пользователя демона (root на pfSense) | Разведка (предположительно): файловая система хоста, config.xml, ключи. |
| Сломанный конфиг OpenVPN или команды хоста | Сервер OpenVPN | Доступность (предположительно): нарушение работы OpenVPN / межсетевого экрана. |
Доказано в лаборатории vs предположительно: назначение мастера, dhcpopts up, script-security 3, контрольная чистота и tun0 up-exec доказаны в лаборатории. Разведка файловой системы выведена из процесса up. Тот же яд в CCD-блобе не был выполнен (ccd-up-ignored=yes).
Требуется: сессия WebGUI с page-pfsensewizardsubsystem. CSRF-токен. Не требует page-openvpn-server или page-openvpn-server-advanced.
| Поверхность | Лаборатория |
|---|---|
Контрольный домен example.com | один DOMAIN push, control-clean=yes |
CCD up (подмножество OpenVPN 2.6) | ccd-up-ignored=yes |
| Неаутентифицированный / CSRF без токена | закрыто |
OpenVPN custom_options | предназначенная привилегия advanced |
| Diagnostics: Command | остаётся закрытым, если не предоставлено дополнительно |
cd lab
./run.sh
Loopback 127.0.0.1:18820. Проект Compose pfsense-openvpn-wizard-crlf. Тег образа pfsense-openvpn-wizard-crlf:2.9.0-dev. Свидетельство PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS. Последняя строка:
SUCCESS PFSENSE-OPENVPN-WIZARD-CRLF wizard-assign=yes dhcpopts-up=yes script-security-3=yes control-clean=yes up-exec=yes PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS
is_domain() (или удаление CR/LF/кавычек) для defaultdomain / nbtscope мастера до того, как они станут dns_domain / netbios_scope, так же, как уже делает IPsec mobile. Санитизировать внутри openvpn_add_dhcpopts(), чтобы были охвачены все вызывающие, включая мастер.
9363ac5b8651a1c7a333180425ce7719070f95f9openvpn_wizard.incopenvpn.inc openvpn_add_dhcpoptsfd301381 (отсутствует в этом публичном дереве)