Функция, загружающая содержимое вставленного URL, — повседневное удобство, но в худшем случае она раскрывает ваши облачные учётные данные. Это и есть SSRF. Вот как он работает и как защищаться, с нуля.
Что на самом деле происходит
Обычный доступ — «пользователь → внешний сайт». SSRF заставляет сервер отправлять запросы к внутренним назначениям от имени атакующего. Серверы могут доставать до внутренних сетей и эндпоинтов облачных учётных данных, невидимых снаружи, поэтому атакующий может косвенно их прочитать.
169.254.169.254 (облачные учётные данные)В облаке этот внутренний эндпоинт (сервис метаданных) может выдать временные учётные данные. Если SSRF до него дотянется, учётные данные крадут, и атака ведёт к массовому выносу данных из хранилища — именно это произошло в утечке Capital One (2019): SSRF → метаданные → учётные данные IAM → S3.
Где он прячется
Любая функция, где «сервер загружает URL от пользователя», — кандидат.
| Функция | Типичная реализация |
|---|---|
| OG / превью ссылки | сервер загружает вставленный URL, чтобы построить миниатюру |
| Доставка вебхуков | сервер делает POST на заданное пользователем назначение |
| Импорт изображения / файла | «загрузить изображение по URL» |
| Диагностика сайта | сервер обращается к введённому сайту, чтобы его осмотреть |
Пробелы валидации, которые упускают
«Блокировать внутренние IP» недостаточно. Нужно учесть и эти способы обхода.
Наивной блокировки недостаточно
- Следование за редиректами: разрешённый домен делает
302на внутренний адрес. - DNS rebinding: внешний IP в момент валидации, внутренний IP в момент загрузки.
- Трюки с кодированием IP: десятичные/восьмеричные/сокращённые формы маскируют внутренний адрес.
- Странные схемы:
file://,gopher://и другие неожиданные схемы.
Как защищаться, если вы строите эту функцию
SSRF предотвращается в «том, как вы строите функцию». Это правила, которые этот сайт накладывает на собственные диагностические функции.
Используйте allowlist для назначений
Ограничьте схему (http/https) и хост только разрешённым набором. «Разрешить только эти» надёжнее, чем «блокировать внутренние».
Блокируйте внутренние цели
Запретите достижимость 127.0.0.1 / 10.x / 192.168.x / 169.254.169.254 (метаданные).
Только домены, которыми владеет пользователь (для диагностики)
Ограничьтесь доменами, владение которыми пользователь доказал. Не давайте им направлять запросы на сторонние сайты.
Учтите способы обхода и защитите метаданные
Валидируйте конечную цель редиректа, учитывайте DNS rebinding и требуйте метаданные на основе токена (например, IMDSv2) в облаке.
Этот сайт строится на принципах «не хранить секретов», «диагностировать только доказанно-собственное» и «минимизировать ущерб от любой компрометации» (→ Об этом сайте).
SSRF, CSRF и открытый редирект
Во всех трёх участвует назначение, выбранное извне, но различается то, что движется, и как далеко оно достаёт.
| Атака | Кто и куда идёт | До чего может дотянуться |
|---|---|---|
| SSRF | Ваш сервер отправляет запрос по переданному ему адресу | До мест, недоступных снаружи, например внутренней сети и облачных учётных данных |
| CSRF | Браузер пользователя отправляет запрос, которого пользователь не хотел | До всего, что пользователь может сделать на сайте, где он вошёл |
| Открытый редирект | Браузер пользователя перенаправляется на переданный внешний сайт | До поддельного сайта (фишинг) |
SSRF особенно опасен тем, что достаёт «внутрь сервера». Места, которые ваш межсетевой экран защищает от внешнего мира, всё равно достижимы через сервер.
Реальные примеры: он прячется и в функциях фреймворков
SSRF встречается не только в самописных функциях «загрузить этот URL», но и в функциях фреймворков. Например, среди недавних CVE в Next.js SSRF (CWE-918) — один из самых частых типов слабостей, в серверных функциях вроде оптимизации изображений, которые загружают внешние картинки (→ уязвимости Next.js и React по реальным данным, на английском). В «CWE Top 25» MITRE (25 самых опасных слабостей ПО), опубликованном в декабре 2025 года, SSRF стоит на 22-м месте.
В облаке стандартный пример — утечка Capital One. SSRF дотянулся до сервиса метаданных, и были украдены временные учётные данные с избыточными правами (→ утечка Capital One). В ноябре 2019 года AWS выпустила IMDSv2, чтобы уменьшить такой ущерб.
Как проверить своё окружение
Составьте список всех мест, загружающих переданный URL
Поищите в коде HTTP-клиенты (fetch, axios, requests и т. п.), в адрес назначения которых может попасть пользовательский ввод. Типичные места — превью ссылок, вебхуки, импорт изображений, генерация PDF и функции импорта.
Проверьте настройки разрешений фреймворка
В настройках оптимизации изображений или внешней загрузки проверьте, не слишком ли широк список разрешённых хостов (для Next.js — что в images.remotePatterns нет записи из одного подстановочного знака).
Сделайте IMDSv2 обязательным (AWS)
В параметрах метаданных каждого экземпляра EC2 проверьте, что HttpTokens имеет значение required (только IMDSv2). На серверах без контейнеров оставьте лимит переходов (hop limit) для ответа с токеном равным 1.
Ограничьте исходящий трафик сервера
Запускайте код, загружающий URL, в отдельной среде без доступа к внутренней сети или ограничьте исходящий трафик нужными назначениями. Если проверка в приложении что-то пропустит, его остановит сеть.
Источники (первичные)
- OWASP, «Server-Side Request Forgery Prevention Cheat Sheet» — cheatsheetseries.owasp.org (allowlist, блокировка внутренних адресов, обработка редиректов и DNS)
- AWS, «Use the Instance Metadata Service to access instance metadata» — docs.aws.amazon.com (сеансовые токены IMDSv2, настройка required, лимит переходов)
- AWS Security Blog, «Add defense in depth against open firewalls, reverse proxies, and SSRF vulnerabilities with enhancements to the EC2 Instance Metadata Service» (ноябрь 2019 г.) — aws.amazon.com
- Microsoft, «Azure Instance Metadata Service» — learn.microsoft.com (Azure тоже использует 169.254.169.254)
- MITRE, «2025 CWE Top 25 Most Dangerous Software Weaknesses» (декабрь 2025 г.) — cwe.mitre.org (CWE-918 на 22-м месте)
Читать дальше
- Глоссарий: Что такое RCE · Что такое CVE
- Основы: Основы безопасности
- Защита: Подделка X-Forwarded-For и доверенные прокси