Non lo sapevo fino a quando non ho letto il link che hai postato, quindi non visualizzare questa risposta come autorevole. Ti consiglio di prendere le precauzioni elencate sotto "Mitigazione immediata" ora, finché non sei completamente sicuro di non essere interessati.
Innanzitutto, come funziona questa vulnerabilità? Questa è una breve forma dell'esempio PHP spiegato sotto "Come funziona" :
- L'attaccante invia una richiesta con l'intestazione
Proxy
impostata su un IP malvagio controllato dall'hacker.
- Se il server esegue CGI, i valori di tutte le intestazioni finiscono in
getenv("HTTP_NAME_OF_HEADER")
, o in questo caso getenv("HTTP_PROXY")
.
- Se lo script in esecuzione sul server utilizza anche un client HTTP (come Guzzle) per inviare richieste proprie, potrebbe anche leggere
getenv("HTTP_PROXY")
, ma non per ottenere l'intestazione ma per sapere se deve utilizzare un proxy per il traffico in uscita. L'IP inviato dall'hacker verrà quindi utilizzato come proxy.
- L'attaccante può ora MITM tutte le richieste in uscita effettuate dal server.
La cosa importante da notare è che qui ci sono due richieste:
- A. Uno al passaggio n. 1, in cui l'utente malintenzionato inoltra una richiesta al server vulnerabile.
- B. Uno al passaggio n. 3, in cui il server vulnerabile funge da client e inoltra una richiesta da qualche altra parte.
Se utilizzi HTTPS per A non importa (suppongo che sia ciò che significherebbe "siti serviti tramite TLS"). Viene comunque crittografato al semplice vecchio HTTP. Quindi sei vulnerabile.
Tuttavia, se si utilizza HTTPS per B può essere importante, poiché (come hectorct evidenziato nei commenti) l'attaccante non sarà comunque in grado di soddisfare la richiesta MITM, assumendo che il cliente controlli il certificato e che il TLS sia valido e così via. È la seconda richiesta di cui stanno parlando in questi passaggi (il mio punto strong):
A few things are necessary to be vulnerable:
- Code running under a CGI-like context, where
HTTP_PROXY
becomes a real or emulated environment variable
- An HTTP client that trusts HTTP_PROXY, and configures it as the proxy
- That client, used within a request handler, making an HTTP (as opposed to HTTPS) request
And, of course, another defense-in-depth strategy that works is to use HTTPS for internal requests, not just for securing your site’s connections to the outside world. Those aren’t affected by HTTP_PROXY
.