Skip to content

2.25.3

Choose a tag to compare

@github-actions github-actions released this 05 Oct 14:26

Срочные исправления безопасности и 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 не проверялся: изменения не трогают разметку (меняется только способ вставки текста в существующие элементы).