Know-How
OWASP Top 10: Server-Side Request Forgery (SSRF)
SSRF umožňuje útočníkovi přinutit server posílat requesty na interní služby — AWS metadata, interní API, databáze.
Jak SSRF funguje
# ❌ Zranitelný kód
@app.post("/fetch-url")
async def fetch_url(url: str):
response = requests.get(url) # Útočník: http://169.254.169.254/
return response.text
Prevence
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 ochrana
- AWS: IMDSv2 (vyžaduje token)
- Network: Egress firewall
- Segmentace: App servery v separátním subnetu
Klíčový takeaway
Validujte URL, blokujte privátní IP rozsahy, používejte IMDSv2. SSRF je gateway do interní infrastruktury.