
OPNsense 26.7.6 — высокий — удалённый — инъекция строки конфигурации — WLAN WPA identity
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-wlan-wpa-line
Класс: Инъекция строки конфигурации Достижимость: Удалённая
Ядро OPNsense 26.7.6 (a842fe48) - opnsense.org
Наследие GHSA-fq94. Для беспроводного SSID было установлено AllowNewlines=N. Поля identity, passphrase и RADIUS auth_server_shared_secret остались обычными TextField (переносы строк включены по умолчанию) и попадают в /var/etc/wpa_supplicant_*.conf и /var/etc/hostapd_*.conf. interfaces.inc подставляет identity="{identity}" в блок wpa_supplicant. Перенос строки или разрыв кавычки добавляет дополнительные директивы с правами root. Привилегия — page-interfaces-wireless-edit, а не page-all.
| ID | CVE пока нет |
| Класс | Инъекция строки конфигурации |
| Достижимость | Удалённая (аутентифицированный WebGUI) |
| CWE | CWE-93 |
| CVSS | Высокий: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Продукт | Ядро OPNsense (Deciso B.V.) |
| Затронуто | Ядро OPNsense 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) Wlan.xml identity / passphrase |
| Аутентификация | Сессия WebGUI с page-interfaces-wireless-edit |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1 |
Я зафиксировал тег 26.7.6. Лаборатория — это PHP-гаджет с зафиксированным interfaces_wlan_configure, loopback HTTP на 127.0.0.1:18840. CR/LF в identity записал дополнительный # OPNSENSE-WLAN-WPA-LINE-WITNESS. SSID остался одной строкой.
| Метод | Точка сброса | Привилегия |
|---|---|---|
| CR/LF в identity | зафиксировать дополнительную директиву interfaces_wlan_configure в конфигурации wpa_supplicant | Целостность (доказано в лаборатории): дополнительный # OPNSENSE-WLAN-WPA-LINE-WITNESS после identity. Лаборатория: identity-newline=yes extra-directive=yes. |
обработка дополнительных network / ssid / ap_scan / ctrl_interface | wpa_supplicant / hostapd с правами root | Целостность (предположительно): дополнительные директивы демона. wpa_supplicant в гаджете не запускался. |
| CR/LF в SSID | AllowNewlines=N | Отрицательный (доказано в лаборатории): SSID остался одной строкой. ssid-control=single-line. |
| CR/LF в passphrase / RADIUS secret | hostapd_*.conf / wpa_supplicant | Целостность (предположительно): тот же класс. Гаджет выполнял путь identity. |
| недопустимая дополнительная директива | беспроводные демоны | Доступность (предположительно): hostapd / wpa_supplicant могут не запуститься. |
| этот путь | нет | Разведка: дополнительного чтения секретов config.xml нет. |
Доказано в лаборатории vs предположительно: дополнительная директива при переносе строки в identity и контроль односрочности SSID — УСПЕХ в лаборатории. Применение hostapd и живого демона — предположительно.
Требуется: page-interfaces-wireless-edit. POST /api/interfaces/wireless_settings/*. Не page-all. CSRF-токен. Браузерный <input type="text"> не сохранит CR/LF; прямой POST из этой сессии — сохранит.
| Поверхность | Лаборатория |
|---|---|
| Перенос строки в SSID | ограничено (ssid-control=single-line) |
| Без аутентификации | закрыто |
Администратор беспроводной сети с page-all | предполагаемая конфигурация радио; наследие — это дополнительные директивы, которые делегированный редактор не должен был создавать |
| cmdi через bridge span CVE-2025-50989 | теперь configdRun без токена запроса |
| Ключи WEP | escapeshellarg в ifconfig |
Без аутентификации — нет. SSID уже отклоняет CR/LF. Полный администратор и так имеет root по замыслу.
cd lab
./run.sh
Loopback 127.0.0.1:18840. Проект Compose opnsense-wlan-wpa-line. Свидетель OPNSENSE-WLAN-WPA-LINE-WITNESS. Последняя строка:
SUCCESS opnsense-wlan-wpa-line identity-newline=yes extra-directive=yes ssid-control=single-line OPNSENSE-WLAN-WPA-LINE-WITNESS
Установите AllowNewlines=N для identity, passphrase и секретов RADIUS, как для SSID. Удаляйте CR/LF и кавычки внутри interfaces_wlan_configure, чтобы охватить всех вызывающих. Дополнительные директивы hostapd / wpa_supplicant должны находиться за page-all.
a842fe48c21288d11a422cb944678e8eb308becfWlan.xmlinterfaces.inc interfaces_wlan_configureAllowNewlines=N