Server-Side Request Forgery (SSRF)
Server-Side Request Forgery (SSRF) es un ataque en el que el atacante fuerza a una aplicación del lado del servidor a realizar solicitudes HTTP a un dominio arbitrario o recurso interno. Al abusar de la posición de red confiable del servidor, los atacantes pueden acceder a servicios internos, endpoints de metadatos en la nube y datos sensibles que no son directamente accesibles desde internet.
Cómo Funciona Server-Side Request Forgery (SSRF)
SSRF explota la funcionalidad del servidor que obtiene recursos externos (URLs proporcionadas por el usuario). En lugar de una URL legítima, el atacante proporciona una dirección interna, forzando al servidor a actuar como un proxy hacia la red interna.
Identificar una obtención de URL del lado del servidor
El atacante encuentra una funcionalidad donde la aplicación obtiene un recurso remoto basado en la entrada del usuario — como vistas previas de URLs, generadores de PDF, endpoints de webhook o importaciones de imágenes.
Proporcionar un objetivo interno
En lugar de una URL pública, el atacante proporciona una dirección interna como http://169.254.169.254/latest/meta-data/ (metadatos de AWS) o http://localhost:6379/ (Redis) para alcanzar servicios internos.
Evadir los filtros de URL
Si existe una validación básica de URL, el atacante usa técnicas de evasión: DNS rebinding, representaciones IPv6, codificación de URL, redirecciones a través de dominios controlados o formatos alternativos de IP como 0x7f000001.
Exfiltrar datos internos
La respuesta del servidor se devuelve al atacante, exponiendo respuestas de APIs internas, credenciales de la nube (tokens de roles IAM), archivos de configuración o permitiendo el escaneo de puertos de la red interna.
Ejemplos Reales
Brecha de datos de Capital One
Una vulnerabilidad SSRF en una mala configuración de WAF permitió el acceso al servicio de metadatos de AWS, exponiendo 106 millones de registros de clientes incluyendo números de Seguro Social y números de cuentas bancarias. La brecha le costó a Capital One más de $300 millones.
SSRF de GitLab mediante webhooks
Múltiples vulnerabilidades SSRF en las funcionalidades de webhook e importación de GitLab permitieron a los atacantes acceder a servicios de red interna y metadatos de la nube desde instancias auto-alojadas.
Microsoft Exchange ProxyLogon
Una cadena de vulnerabilidades incluyendo SSRF (CVE-2021-26855) en Microsoft Exchange Server fue explotada por atacantes patrocinados por estados, comprometiendo más de 250,000 servidores en todo el mundo.
Impacto y Evaluación de Riesgo
SSRF es especialmente peligroso en entornos de nube donde los servicios de metadatos exponen credenciales IAM. Un SSRF exitoso puede llevar a la lectura de credenciales de instancias en la nube, acceso a bases de datos y APIs internas, escaneo de puertos de redes internas, lectura de archivos locales a través del protocolo file:// y pivoteo hacia Ejecución Remota de Código (RCE) a través de servicios internos. En el OWASP Top 10 de 2021, SSRF fue elevado a su propia categoría (A10) debido a su creciente prevalencia e impacto.
Cómo Detectar Server-Side Request Forgery (SSRF)
Monitorear las solicitudes salientes de los servidores de aplicación en busca de conexiones a rangos de IP internos (10.x, 172.16-31.x, 192.168.x, 169.254.x). Alertar sobre solicitudes a endpoints de metadatos en la nube. Registrar y analizar todas las solicitudes HTTP del lado del servidor. Inspeccionar los registros de resolución DNS en busca de nombres de host internos. Usar alertas de segmentación de red para detectar tráfico inesperado entre zonas.
Cómo Prevenir Server-Side Request Forgery (SSRF)
Validar y sanitizar todas las URLs proporcionadas por el usuario en el lado del servidor. Implementar una lista blanca de dominios y protocolos permitidos (denegar file://, gopher://, dict://). Bloquear solicitudes a rangos de IP privados y direcciones de metadatos de la nube a nivel de red. Usar un cliente HTTP dedicado con límites de timeout y redirecciones. Deshabilitar esquemas de URL innecesarios. Desplegar IMDSv2 (Instance Metadata Service v2) en AWS que requiere tokens de sesión. Segmentar los servidores de aplicación de los servicios internos sensibles.
Ejemplos de Código
# VULNERABLE: fetches any URL the user provides
@app.route('/preview')
def preview():
url = request.args.get('url')
response = requests.get(url) # No validation!
return response.text
# Attacker request:
# /preview?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
import ipaddress
from urllib.parse import urlparse
ALLOWED_HOSTS = {'api.example.com', 'cdn.example.com'}
BLOCKED_RANGES = [
ipaddress.ip_network('10.0.0.0/8'),
ipaddress.ip_network('172.16.0.0/12'),
ipaddress.ip_network('192.168.0.0/16'),
ipaddress.ip_network('169.254.0.0/16'),
]
def is_safe_url(url):
parsed = urlparse(url)
if parsed.scheme not in ('http', 'https'):
return False
if parsed.hostname not in ALLOWED_HOSTS:
return False
try:
ip = ipaddress.ip_address(parsed.hostname)
return not any(ip in net for net in BLOCKED_RANGES)
except ValueError:
return True # hostname, not IP — check against allowlist
PowerWAF bloquea automáticamente Server-Side Request Forgery (SSRF) antes de que llegue a tu servidor.
Implementa en minutos. Sin cambios de código. Plan gratuito disponible.
Los cupos del plan gratuito son limitados