SSRF ermöglicht es einem Angreifer, den Server dazu zu bringen, Anfragen an interne Dienste zu senden — AWS-Metadaten, interne APIs, Datenbanken.
Wie SSRF funktioniert¶
Verwundbarer Code¶
@app.post(“/fetch-url”) async def fetch_url(url: str): response = requests.get(url) # Angreifer: http://169.254.169.254/ return response.text
Prävention¶
import ipaddress from urllib.parse import urlparse BLOCKED = [ 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: str) -> bool: parsed = urlparse(url) if parsed.scheme not in (‘http’, ‘https’): return False import socket for _, _, _, _, addr in socket.getaddrinfo(parsed.hostname, None): ip = ipaddress.ip_address(addr[0]) if any(ip in net for net in BLOCKED): return False return True
Cloud-Schutz¶
- AWS: IMDSv2 (Token erforderlich)
- Netzwerk: Egress-Firewall
- Segmentierung: App-Server in separatem Subnetz
Wichtigste Erkenntnis¶
URLs validieren, private IP-Bereiche blockieren, IMDSv2 verwenden. SSRF ist das Einfallstor in die interne Infrastruktur.