
OPNsense 26.7.6 — высокий — удалённый — инъекция строки конфигурации — NTP GPS fudge
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-ntp-gps-fudge
Класс: Инъекция строки конфигурации Достижимость: Удалённая
Ядро OPNsense 26.7.6 (a842fe48) - opnsense.org
Остаток от GHSA-fq94. GPS/PPS fudge1 / fudge2 / refid по-прежнему конкатенируются в /var/etc/ntpd.conf после того, как хосты timeserver были вырезаны. Перезапись пути CVE-2026-53581 внесена в allowlist (^cua[a-z0-9.,{}]+$ плюс символьное устройство). Общая страница NTP уже рассматривает дополнительный текст ntpd.conf как эскалацию (userIsAdmin). ACL для GPS/PPS отдельные. Сохранение configd_run('service restart ntpd'). ntpd работает от root без -u.
| ID | CVE пока нет |
| Класс | Инъекция строки конфигурации |
| Достижимость | Удалённая (аутентифицированный WebGUI) |
| CWE | CWE-93 / CWE-74 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Продукт | OPNsense core (Deciso B.V.) |
| Затронуто | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) NTP GPS/PPS fudge |
| Аутентификация | Сессия WebGUI с page-services-ntp-gps и/или page-services-ntp-pps |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал тег 26.7.6. Лаборатория — это PHP-гаджет зафиксированного ntpd_configure_do, идентичность loopback 127.0.0.1:18830. CR/LF в GPS fudge записал дополнительную строку logfile. CR/LF в хосте timeserver схлопнулся в один токен.
| Метод | Сток | Привилегия |
|---|---|---|
GPS fudge1 CR/LF | закрепление ntpd_configure_do дополнительной строки logfile /oracle/OPNSENSE-NTP-GPS-FUDGE-WITNESS после fudge 127.127.20.0 | Целостность (доказано в лаборатории): дополнительная строка ntpd.conf. Лаборатория: fudge-newline=yes. |
использование includefile / driftfile / statsdir | ntpd от root, без -u | Целостность (предположительно): дополнительная политика ntpd / запись файла по пути, доступному для записи ntpd. ntpd не запускался в гаджете. |
| CR/LF в хосте timeserver | вырезание в ntpd.inc:327-329 | Отрицательно (доказано в лаборатории): timeserver схлопнулся в один токен. timeserver-stripped=yes. |
PPS fudge1 / refid CR/LF | блок PPS fudge 127.127.22.0 | Целостность (предположительно): тот же класс. Гаджет выполнял путь GPS. |
| недопустимая дополнительная директива | запуск ntpd | Доступность (предположительно): ntpd может не запуститься. |
| этот путь | нет | Разведка: дополнительного чтения секретов config.xml нет. |
Доказано в лаборатории vs предположительно: перевод строки в GPS fudge и вырезание timeserver — УСПЕХ в лаборатории. PPS-аналог и живой ntpd от root — предположительно.
Требуется: page-services-ntp-gps (лаборатория) и/или page-services-ntp-pps. Не page-all. Живой символьный узел /dev/cua*, чтобы configure_gps/pps вернул true. NTP включён. CSRF-токен. Браузерный <input type="text"> не сохранит CR/LF; прямой POST из этой сессии — сохранит.
| Поверхность | Лаборатория |
|---|---|
| Перезапись произвольного пути CVE-2026-53581 | ../ больше не выходит из /dev/ (gps-char=char) |
| GPS XSS GHSA-h793 | нет цепочки к этому остатку |
| CR/LF в хосте timeserver | вырезается (timeserver-stripped=yes) |
custom_options на общей странице NTP | только page-all / userIsAdmin |
| Без аутентификации | закрыто |
Без аутентификации — нет. Перезаписи пути 53581 — нет. Хосты timeserver уже получили вырезание.
cd lab
./run.sh
Loopback 127.0.0.1:18830. Проект Compose opnsense-ntp-gps-fudge. Свидетель OPNSENSE-NTP-GPS-FUDGE-WITNESS. Последняя строка:
SUCCESS opnsense-ntp-gps-fudge fudge-newline=yes timeserver-stripped=yes OPNSENSE-NTP-GPS-FUDGE-WITNESS
Вырезать CR/LF (и обрабатывать кавычки) в GPS/PPS fudge1 / fudge2 / refid так же, как это уже делается для хостов timeserver в ntpd.inc:327-329. Или ограничить эти поля числовым / токенным классом. Держать дополнительный текст ntpd.conf за userIsAdmin.
a842fe48c21288d11a422cb944678e8eb308becfntpd.inc ntpd_configure_doservices_ntpd_gps.php