Все уязвимости

CVE-2021-23017

nginx resolver: ошибка обработки поддельного ответа DNS

Старый nginx мог повредить память при обработке ответа DNS, если включена директива resolver и атакующий способен подделать ответ DNS-сервера. Проверьте конфигурацию и пакет: одного номера nginx недостаточно для оценки применимости.

Проверено 26 октября 2026Medium по собственной шкале проекта nginx в официальном каталоге. Возможность атаки зависит от использования resolver и подделки ответов DNS; тяжесть не означает, что любой посетитель сайта может воспроизвести ошибку обычным HTTP-запросом.

Кому нужно проверить

Администраторам 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. 1Определите версию nginx в работающем сервисе и пакет поставщика. Проверьте уведомление об исправлении CVE-2021-23017, включая backport. Если nginx находится в контейнере или устройстве, проверяйте этот образ или продукт, а не только пакет хостовой ОС.
  2. 2Локально изучите активную конфигурацию и подключаемые файлы: используется ли resolver и какие функции от него зависят. Не публикуйте полный дамп конфигурации — там могут быть внутренние адреса и чувствительные заголовки. Не подменяйте DNS-ответы для проверки рабочего сервера.
  3. 3До обновления ограничьте доступ к DNS-инфраструктуре и используйте доверенные резолверы согласно своей сетевой политике. Это уменьшает поверхность риска, но доверенное имя DNS-сервера само по себе не исключает подделку пакетов и не исправляет nginx. Удалять resolver можно только после проверки: это может нарушить разрешение имён и доступность сайта.
  4. 4Сохраните конфигурацию и подготовьте восстановление прежнего образа. На тестовой среде обновите nginx до поддерживаемого исправленного пакета. Проверьте разрешение имён, обычную работу upstream-сервисов и изменение их адресов, если ваша архитектура зависит от динамического DNS.
  5. 5Примените пакет и перезапуск или перезагрузку службы по инструкции поставщика. Убедитесь, что старые рабочие процессы завершились и запросы обслуживает исправленная сборка. При откате к старому образу сохраняйте временные сетевые ограничения и согласуйте восстановление с администратором.
  6. 6Проверьте доступность сайта, ошибки разрешения имён и неожиданные завершения процессов. Сохраните подозрительные события для расследования. Отсутствие аварий не подтверждает отсутствие уязвимости, а падение без других данных не доказывает атаку.

Какие условия нужны для ошибки resolver

В старом nginx используется resolver. Ошибочный разбор может повредить память рабочего процесса.

  1. 1В старом nginx используется resolver.
  2. 2nginx ожидает ответ DNS-сервера.
  3. 3Атакующий способен подделать соответствующий UDP-ответ.
  4. 4Ошибочный разбор может повредить память рабочего процесса.

Примеры конфигурации и проверки

Узнать версию выбранного nginx (shell)
nginx -v

Терминал Linux/Unix с nginx в PATH. Запускайте обычным пользователем на своём сервере или внутри проверяемого контейнера; sudo не нужен. Версия обычно выводится в стандартный поток ошибок — это нормальное поведение, а не признак сбоя. Команда не меняет конфигурацию и не выполняет DNS-проверку, откат не нужен. Она не доказывает использование resolver, наличие backport или то, что запущенный сервис использует именно этот исполняемый файл.

Как не подпустить ботов к сайту

BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.

Первоисточники

Снизьте шанс атаки до того, как бот дойдёт до сайта

Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.