CVE-2021-23017
nginx resolver: ошибка обработки поддельного ответа DNS
Старый nginx мог повредить память при обработке ответа DNS, если включена директива resolver и атакующий способен подделать ответ DNS-сервера. Проверьте конфигурацию и пакет: одного номера nginx недостаточно для оценки применимости.
Кому нужно проверить
Администраторам nginx, который во время работы разрешает доменные имена через resolver, например в подходящих прокси-конфигурациях. Владельцу управляемой платформы нужно запросить подтверждение исправления у провайдера. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
DNS переводит понятное человеку имя сервера в сетевой адрес. Компонент resolver в nginx обрабатывает такие ответы. Специально сформированный поддельный ответ мог вызвать запись одного байта за границу нужного участка памяти. Даже маленькая запись может нарушить состояние программы: advisory подтверждает падение рабочего процесса и допускает потенциальное выполнение произвольного кода. Реальность более тяжёлого последствия зависит от окружения; нельзя описывать его как неизбежный захват любого сервера.
Затронутые версии
nginx 0.6.18–1.20.0 включительно при использовании директивы resolver. Дополнительное обязательное условие из advisory — возможность атакующего подделать UDP-пакеты от DNS-сервера. Наличие доменных имён в конфигурации само по себе не равнозначно использованию этой директивы. Статус nginx внутри коммерческого продукта или образа нужно проверять у его поставщика.
Исправленные версии
Upstream-исправления выпущены в nginx 1.20.1 и 1.21.0. Это исторические версии закрытия конкретной ошибки; сегодня нужен поддерживаемый исправленный пакет. В дистрибутивах патч может быть перенесён в более старую базовую версию. Не заменяйте пакет ОС самостоятельно собранным nginx только ради большего номера без проверки происхождения и сопровождения.
Что сделать
- 1Определите версию nginx в работающем сервисе и пакет поставщика. Проверьте уведомление об исправлении CVE-2021-23017, включая backport. Если nginx находится в контейнере или устройстве, проверяйте этот образ или продукт, а не только пакет хостовой ОС.
- 2Локально изучите активную конфигурацию и подключаемые файлы: используется ли resolver и какие функции от него зависят. Не публикуйте полный дамп конфигурации — там могут быть внутренние адреса и чувствительные заголовки. Не подменяйте DNS-ответы для проверки рабочего сервера.
- 3До обновления ограничьте доступ к DNS-инфраструктуре и используйте доверенные резолверы согласно своей сетевой политике. Это уменьшает поверхность риска, но доверенное имя DNS-сервера само по себе не исключает подделку пакетов и не исправляет nginx. Удалять resolver можно только после проверки: это может нарушить разрешение имён и доступность сайта.
- 4Сохраните конфигурацию и подготовьте восстановление прежнего образа. На тестовой среде обновите nginx до поддерживаемого исправленного пакета. Проверьте разрешение имён, обычную работу upstream-сервисов и изменение их адресов, если ваша архитектура зависит от динамического DNS.
- 5Примените пакет и перезапуск или перезагрузку службы по инструкции поставщика. Убедитесь, что старые рабочие процессы завершились и запросы обслуживает исправленная сборка. При откате к старому образу сохраняйте временные сетевые ограничения и согласуйте восстановление с администратором.
- 6Проверьте доступность сайта, ошибки разрешения имён и неожиданные завершения процессов. Сохраните подозрительные события для расследования. Отсутствие аварий не подтверждает отсутствие уязвимости, а падение без других данных не доказывает атаку.
Какие условия нужны для ошибки resolver
В старом nginx используется resolver. Ошибочный разбор может повредить память рабочего процесса.
- 1В старом nginx используется resolver.
- 2nginx ожидает ответ DNS-сервера.
- 3Атакующий способен подделать соответствующий UDP-ответ.
- 4Ошибочный разбор может повредить память рабочего процесса.
Примеры конфигурации и проверки
nginx -vТерминал Linux/Unix с nginx в PATH. Запускайте обычным пользователем на своём сервере или внутри проверяемого контейнера; sudo не нужен. Версия обычно выводится в стандартный поток ошибок — это нормальное поведение, а не признак сбоя. Команда не меняет конфигурацию и не выполняет DNS-проверку, откат не нужен. Она не доказывает использование resolver, наличие backport или то, что запущенный сервис использует именно этот исполняемый файл.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.