Что такое SSRF

Ответ

SSRF (Server-Side Request Forgery) — уязвимость, когда злоумышленник заставляет сервер выполнять произвольные HTTP-запросы к внутренним или внешним ресурсам. Часто используется для обхода firewall, сканирования внутренней сети или доступа к метаданным облачных сервисов (например, AWS IMDS).

Пример уязвимого кода на Node.js:

app.get('/fetch', (req, res) => {
  const url = req.query.url;
  fetch(url) // опасный запрос без валидации URL
    .then(response => response.text())
    .then(data => res.send(data));
});

Меры защиты:

  • Валидация и санитизация URL
  • Использование белых списков доменов
  • Отключение обработки перенаправлений
  • Блокировка приватных IP-адресов (RFC 1918)

Ответ 18+ 🔞

Эх, слушай, про эту вашу SSRF-хуйню, блядь! Это ж когда сервер, этот долбоёб, по твоей указке начинает куда попада стрелять запросами, как последний распиздяй. Представь: ты ему — «Сходи туда-то!», а он, не думая, идёт и хуярит запрос куда ни попадя, хоть в свою же внутреннюю сетку, которую снаружи и не видно. Охуенно же? Для атакующего — да, пиздец как охуенно. А для админа — волосы дыбом, ёпта.

Вот смотри, какой примитивный пример на Node.js, просто пиздец какой наивный:

app.get('/fetch', (req, res) => {
  const url = req.query.url;
  fetch(url) // опасный запрос без валидации URL
    .then(response => response.text())
    .then(data => res.send(data));
});

Ну что это за хуйня, а? Пришёл любой мудак, передал в url адресок типа http://169.254.169.254/latest/meta-data/ (это в AWS всякие секреты лежат, блядь), и сервер, этот манда с ушами, доверчиво так всё оттуда вытащит и в ответ сунет. Во все дыры давалка, блядь, а не сервер!

Так как же от этого говна защищаться, спросишь? А вот как, слушай сюда, блядь:

  • Валидация и санитизация URL. Это первое дело, ёпта! Проверяй, что там за хуйню тебе подсунули. Не пускай всякое file:// или ссылки на локальную петлю 127.0.0.1.
  • Белые списки доменов. Самый надёжный способ, блядь. Если твоему серверу нужно ходить только в api.trusted-service.com, так и разреши ему ходить ТОЛЬКО туда. На остальное — отвечай «Иди нахуй, не положено».
  • Выруби эти ебучки-редиректы нахуй. А то он пойдёт по первой ссылке, а его переадресуют куда-нибудь в запретные дебри, и он, дурак, пойдёт.
  • Блокируй приватные IP-адреса. Эти самые, из RFC 1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. И локальную петлю 127.0.0.0/8 тоже в пизду! Серверу нехуй шастать по внутренностям, он должен наружу смотреть, а не внутрь себя ебаться.

Короче, доверия к входящим данным — ноль ебать. Ни хуя себе просто так. Иначе окажешься в ситуации, когда твой сервер — это такой же хитрожопый, но доверчивый Герасим, который по первому зову «Муму» готов свою же собаку утопить, блядь. Не доводи до этого, ёпта.