- Acceso a servicios internos (Redis, Elasticsearch, BD)
- Lectura de metadatos de cloud (AWS IMDS, GCP, Azure)
- Port scanning de red interna
- Bypass de firewalls y segmentación de red
- En casos extremos: RCE
??HIGH�OWASP #10
?? Server-Side Request Forgery (SSRF)
Ocurre cuando una aplicación web hace peticiones HTTP a un destino suministrado por el aéééticante. Permite acceder a servicios internos, metadatos de cloud y más.
Impacto
Explotación (�ético)
??Solo sistemas autorizados
Payloads? Test
# Acceso a localhost http://127.0.0.1/admin http://localhost:22 http://[::1]/ # Metadatos AWS http://169.254.169.254/latest/meta-data/ http://169.254.169.254/latest/meta-data/iam/security-credentials/ # Bypass de filtros http://localhost.localdomain/ http://127.1/ http://0x7f000001/ http://2130706433/ # 127.0.0.1 en decimal
Ejemplo Vulnerable? Código
# Flask vulnerable a SSRF @app.route('/fetch') def fetch_url(): url = request.args.get('url') return requests.get(url).text # SSRF!
Mitigación
Python? Seguro
import ipaddress from urllib.parse import urlparse def is_safe_url(url): parsed = urlparse(url) # Solo HTTPS if parsed.scheme != 'https': return False # Whitelist de dominios allowed = ['api.trusted.com', 'cdn.trusted.com'] if parsed.hostname not in allowed: return False # Verificar que no sea IP privada try: ip = ipaddress.ip_address(parsed.hostname) if ip.is_private or ip.is_loopback: return False except: pass return True
- Usar whitelist de URLs/dominios permitidos
- Bloquear IPs privadas y localhost
- Deshabilitar redirects automáéticos
- Usar IMDSv2 en AWS (requiere tokens)
- Segmentar red para limitar acceso desde app servers