Repository navigation
2.25.3
Срочные исправления безопасности и DNS
Исправления к 2.25.2 по аудиту от 5 октября. Главное: имя сервера из подписки больше не может выполнить код в LuCI. Обновление ставится поверх, настройки не меняются, ничего делать вручную не нужно.
Что изменилось
- Имена серверов и устройств в выпадающих списках выводятся как текст. В списках «Include servers» / «Exclude servers» (настройки URLTest, подписки, уровни приоритета) имя сервера приходит от провайдера подписки. Раньше при раскрытии списка LuCI разбирал его как HTML, и подписка с именем вида
NL<img onerror=…>выполняла JavaScript в сессии администратора роутера. То же было с именами устройств в выборе «Имя (IP)», которые могут прийти из PTR-записи. Теперь имена всегда показываются как обычный текст. Находки FE-11 (P1) и FE-12 (P2). - Лаунчеры Zapret-Manager не качают скрипт по HTTP. Если в настройках указано зеркало с адресом
http://, обновление Prokop переписывало командыzms/zmsAтак, что они при каждом запуске скачивали скрипт через это зеркало без шифрования и выполняли его от root. Установка через такое зеркало и раньше запрещалась; теперь и лаунчеры с таким зеркалом скачивают скрипт с GitHub поhttps://, а при обновлении в журнал пишется предупреждение. Находка UPD-9. - Локальный DNS-резолвер на другом порту снова работает. С 2.5.0 Prokop отказывался запускаться, если основным, bootstrap или DNS-правилом указан резолвер на самом роутере: например https-dns-proxy (
127.0.0.1:5053), unbound (:5335) или AdGuard Home. Петля возникает только при обычном DNS на порт dnsmasq (53 или порт из настроек dnsmasq), и только такой адрес теперь отклоняется. Другой порт, DoT или DoH на роутере принимаются с предупреждением в журнале: такой резолвер не должен пересылать запросы обратно в dnsmasq. Находка NET-11. - Кнопка «Отправить тест» в уведомлениях объясняет отказ. Если роутер не смог подготовить запрос (например, переполнен
/var/run), кнопка раньше молча возвращалась в исходное состояние. Теперь показывается причина. Находка FE-17. - Проверка исходников, которая ищет вывод строк как HTML, теперь видит и такие места (выпадающие списки,
E(tag, строка), содержимое модальных окон), а тест маскирования секретов для режима только чтения покрывает токен и chat ID Telegram и URL webhook. Находки FE-13, FE-20.
Что проверено
- PASS: автоматические тесты бэкенда (полный прогон от root и от непривилегированного пользователя без
uci, как в CI) и фронтенда (prettier, eslint, tsc, vitest, сборка). Новые проверки: имя сервера и имя устройства с HTML-разметкой попадают в выпадающий список как текст (tests/luci_outbound_choice_labels.sh,tests/local_device_labels.sh); лаунчеры приhttp://-зеркале остаются наhttps://(tests/fork_fix_zapret_manager_launchers.sh); резолверы на портах 5053/5335/5353, DoT и DoH на роутере принимаются, порт 53 и порт dnsmasq из настроек отклоняются (tests/dns_server_loop.sh). - NOT TESTED: на роутере. Внешний вид русского интерфейса на 1440/1024/768 не проверялся: изменения не трогают разметку (меняется только способ вставки текста в существующие элементы).