/proxy?url=http://169.254.169.254/latest/meta-data/Это метаданные облака (включая ключи доступа). Наш сервис, имея внутренний доступ, отдаёт их наружу.
200 OK
AccessKeyId=AKIA...PROD
SecretAccessKey=wJalrXUtnFEMI/K7MDENG/...PROD
У нас есть эндпоинт-прокси: он скачивает указанный URL и отдаёт ответ клиенту. Проблема — мы не фильтруем, куда ходим. Злоумышленник может заставить сервис обращаться к внутренним адресам и вытягивать чувствительные данные.
/proxy?url=http://169.254.169.254/latest/meta-data/
Тест пытается сходить через /proxy к внутреннему адресу
169.254.169.254.
Если видим 200 — билд стопается.
Ожидаем 403.
#!/bin/bash
# ssrf-check.sh
STATUS=$(curl -s -o /tmp/meta.txt -w "%{http_code}" \
"https://staging.example.internal/proxy?url=http://169.254.169.254/latest/meta-data/")
if [ "$STATUS" = "200" ]; then
echo "[BLOCK] SSRF: сервис даёт доступ к внутренним метаданным"
exit 1
fi
echo "[OK] Внутренние адреса заблокированы (HTTP $STATUS)"
exit 0
Это закрывает класс атак, а не только конкретный URL.
Стандарт:прокси/превью/загрузка-URL никогда не должны ходить куда угодно. Только к заранее разрешённым хостам.