No sabía nada de esto hasta que leí el enlace que publicaste, así que no veas esta respuesta como autorativa. Le recomendaría que tome las precauciones enumeradas en "Mitigación inmediata" ahora, hasta que esté completamente seguro de que no está afectado.
Primero, ¿cómo funciona esta vulnerabilidad? Esta es una forma breve del ejemplo de PHP que se explica en "Cómo funciona" :
- El atacante envía una solicitud con el encabezado
Proxy
configurado a una IP maliciosa controlada por el atacante.
- Si el servidor ejecuta CGI, los valores de todos los encabezados terminan en
getenv("HTTP_NAME_OF_HEADER")
, o en este caso getenv("HTTP_PROXY")
.
- Si la secuencia de comandos que se ejecuta en el servidor también usa un cliente HTTP (como Guzzle) para enviar sus propias solicitudes, también puede leer
getenv("HTTP_PROXY")
, pero no para obtener el encabezado, sino para saber si debe usar un proxy para El tráfico saliente. La IP enviada por el atacante se utilizará como proxy.
- El atacante ahora puede MITM todas las solicitudes salientes que realiza el servidor.
Lo importante a tener en cuenta es que aquí se realizan dos solicitudes:
- A. Uno en el paso # 1, donde el atacante realiza una solicitud al servidor vulnerable.
- B. Uno en el paso # 3, donde el servidor vulnerable actúa como un cliente y realiza una solicitud en otro lugar.
Si usa HTTPS para A, no importa (supongo que eso es lo que significaría "sitios servidos a través de TLS"). Se encripta al HTTP antiguo de todos modos. Así que eres vulnerable.
Sin embargo, si usa HTTPS para B, puede ser importante, ya que (como hectorct señala en los comentarios) el atacante no podrá MITM la solicitud de todos modos, asumiendo que el cliente verifique el certificado y que el TLS sea bueno y así sucesivamente. Es la segunda solicitud de la que hablan en estos pasajes (mi punto culminante):
Algunas cosas son necesarias para ser vulnerables:
- El código se ejecuta en un contexto similar a CGI, donde
HTTP_PROXY
se convierte en una variable de entorno real o emulada
- Un cliente HTTP que confía en HTTP_PROXY y lo configura como el proxy
- Ese cliente, utilizado dentro de un controlador de solicitudes, realiza una solicitud HTTP (a diferencia de HTTPS)
Y, por supuesto, otra estrategia de defensa en profundidad que funciona es utilizar HTTPS para solicitudes internas, no solo para asegurar las conexiones de su sitio con el mundo exterior. Los que no están afectados por HTTP_PROXY
.