Выбор ответа Senior Безопасность бэкенда обновлено

Защита от SSRF в загрузке по URL

Вопрос

Сервис скачивает картинку по URL, который присылает пользователь. Какая защита от SSRF корректна?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Только http/https, резолвить хост, запретить внутренние IP и подключаться к проверенному. SSRF позволяет заставить сервер сходить во внутреннюю сеть: метаданные облака (169.254.169.254), админки, Redis без пароля.

Варианты ответа

  1. Только http/https, резолвить хост, запретить внутренние IP и подключаться к проверенномуправильный ответ
  2. Проверить, что строка URL не содержит localhost, 127.0.0.1 и 169.254.169.254
  3. Проверить hostname по регулярке белого списка и скачать по исходному URL, следуя редиректам
  4. Достаточно таймаута на скачивание и лимита размера ответа

Разбор

SSRF позволяет заставить сервер сходить во внутреннюю сеть: метаданные облака (169.254.169.254), админки, Redis без пароля. Фильтр по строке обходится десятком способов: 0.0.0.0, [::1], десятичная запись IP, домен, который резолвится в 127.0.0.1, редирект на внутренний адрес. Ещё одна атака, DNS rebinding: при проверке домен резолвится во внешний IP, а при подключении уже во внутренний. Поэтому проверяют результат резолвинга и подключаются к тому же IP (в Node через свой lookup в агенте), повторяя проверку на каждом редиректе. Дополнительно сетевая изоляция: отдельный egress-прокси без доступа во внутреннюю сеть.

Таймаут защищает от зависания, но не от доступа к внутренним ресурсам.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме