SSRF (Server-Side Request Forgery)

Indice dei contenuti

    La Server-Side Request Forgery (SSRF) è una vulnerabilità che permette a un attaccante di indurre il server applicativo a effettuare richieste HTTP (o di altro protocollo) verso destinazioni arbitrarie — interne o esterne — scelte dall’attaccante. Il server diventa un proxy involontario: poiché le richieste partono dall’interno dell’infrastruttura, raggiungono risorse normalmente inaccessibili dall’esterno, come servizi interni, database, metadata endpoint cloud e sistemi protetti da firewall perimetrale.

    Meccanismo

    L’applicazione riceve un URL dall’utente e lo usa per effettuare una richiesta lato server:

    # Funzionalità legittima: carica un'immagine da URL
    GET /preview?url=https://esempio.com/immagine.jpg
    
    # Input malevolo: accede al metadata service AWS
    GET /preview?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/

    Il server effettua la richiesta verso 169.254.169.254 — l’endpoint di metadati AWS raggiungibile solo dall’interno dell’istanza EC2 — e restituisce le credenziali IAM temporanee dell’istanza all’attaccante.

    Impatto in ambienti cloud

    L’SSRF è particolarmente devastante in ambienti cloud per il metadata service: ogni istanza VM su AWS, Azure e GCP ha un endpoint di metadati interno non autenticato che espone le credenziali temporanee del ruolo IAM associato all’istanza. Con SSRF su un’applicazione cloud:

    1. L’attaccante recupera le credenziali IAM dal metadata service
    2. Usa le credenziali per autenticarsi all’API AWS/Azure/GCP dall’esterno
    3. Esegue operazioni con i permessi del ruolo dell’applicazione — potenzialmente leggere S3, accedere a RDS, elencare risorse

    IMDSv2 (AWS Instance Metadata Service v2) mitiga questo vettore richiedendo una sessione pre-autenticata con un token, ottenibile solo tramite richiesta PUT iniziale — che le SSRF semplici (GET-only) non possono effettuare.

    Capital One breach (2019): il più noto attacco SSRF documentato. Una SSRF nel WAF mal configurato di Capital One ha permesso di accedere al metadata service EC2, ottenere credenziali IAM con permessi eccessivi, e scaricare oltre 100 milioni di record da S3.

    Varianti

    SSRF verso servizi interni: accedere a servizi non esposti su Internet — Redis, Elasticsearch, MongoDB, Kubernetes API server — che girano su porte interne senza autenticazione perché “non raggiungibili dall’esterno”. Esempio: http://redis.interno:6379/ — Redis risponde a richieste HTTP con un errore che rivela la versione e i comandi supportati.

    SSRF blind: l’applicazione non restituisce la risposta della richiesta interna, ma l’attaccante può inferire informazioni dall’esistenza della risposta (port scanning interno tramite differenze di timing o codici di errore).

    SSRF con protocolli non-HTTP: alcuni parser URL supportano file://, dict://, gopher://, ftp:// — usabili per leggere file locali, inviare comandi arbitrari a servizi come Redis o SMTP.

    Difese

    Allowlist degli URL: se l’applicazione deve accedere solo a URL specifici, validarli contro una whitelist di domini e IP. Non usare blocklist di IP privati — troppo facile aggirare con reindirizzamenti, IPv6, encoding.

    Blocco a livello di rete: i firewall interni o le security group cloud devono impedire alle istanze applicative di accedere ai metadata endpoint e ai servizi interni non necessari — difesa in profondità che limita l’impatto anche se la SSRF è sfruttata.

    Risposta senza redirect: non seguire automaticamente i redirect HTTP nelle richieste server-side — i redirect possono portare da URL apparentemente validi a destinazioni interne.

    IMDSv2 obbligatorio: nei deployment AWS, forzare IMDSv2 per bloccare la classe più impattante di SSRF cloud.

    Ultimo aggiornamento: