Fran 🐝 Brizzolis

hace 7 años · 2 min. de lectura · ~10 ·

Blogging
>
Blog de Fran 🐝
>
Vulnerabilidad grave en el protocolo GCI, que obliga al servidor a usar un proxy comprometido

Vulnerabilidad grave en el protocolo GCI, que obliga al servidor a usar un proxy comprometido

Hoy os  advierto de una vulnerabilidad que afecta a varias implementaciones del protocolo GCI y que permite, de manera trivial, forzar al servidor a usar un proxy controlado por un atacante,

Los autores han decidido llamarla httpoxy (en un futuro habrá asignaturas en las universidades dedicadas a nombrar vulnerabilidades), un juego de palabras con las palabras "proxy" y "poxy".


¿Cómo actua?

La explicación es tremendamente sencilla. Cuando el servidor atiende las peticiones de los clientes (navegadores) le pasa la petición completa al script o ejecutable que hace de GCI, cabeceras incluidas. Al procesar las cabeceras del cliente si se encuentra una cabecera denominada "Proxy" cogerá el valor y lo pondrá como valor de la variable de entorno del servidor "HTTP_PROXY".


66afde74.png


Es típico de CGI funcionar así. A cada cabecera del cliente le antepone el "HTTP_" y la cambia a mayúsculas. No es un defecto que ocurra por procesar cierto valor, simplemente es una colisión de nombres ya que HTTP_PROXY se usa en otros contextos independientes de CGI.

El problema con esta variable de entorno es que le estamos diciendo a todos los procesos, que le hagan caso y la tengan en su entorno, que envíen todas las peticiones HTTP a través de ese proxy.

De este modo, lo que estamos es manipulando al servidor vía GCI para forzar el uso de un proxy. Si tenemos controlado el proxy nos llegarán las respuestas del servidor, con lo que podemos hacer un hombre en el medio con todo el tráfico en texto claro (no, no funcionaría con el tráfico cifrado) o simplemente ralentizar las respuestas para degradar el servicio.


¿A qué afecta?

Si tu servidor no sirve un entorno GCI no hay de qué preocuparse, en principio. Esto solo afecta a GCI, que es un auténtico vestigio de otros tiempos en los que la gente hablaba por teléfonos que residían en pequeños habitáculos puestos en la calle a cambio de insertarles monedas de metal.

Tampoco afecta a FastCGI, alternativa "más moderna" que no usa variables de entorno para comunicar al proceso receptor los valores de las peticiones de los clientes.

Ahora bien, si el entorno del servidor da soporte a CGI la cosa cambia. Como sabemos, CGI es soportado por cualquier lenguaje que se ejecute en el servidor. Incluso llegaron a existir CGIs corriendo sobre bash o binarios en C , atendiendo peticiones HTTP. Pues bien, algunos lenguajes ya parchearon esta vulnerabilidad hace tiempo y de manera independiente, como Ruby o Perl, pero no todos... hasta que la vulnerabilidad volvió a cobrar protagonismo.

En algo así como un revival, alguien se dio cuenta de que lo que parchearon en algunos lenguajes y herramientas se podía reproducir en otros lenguajes, como por ejemplo PHP (¿Sorprendido?), Python y el recién llegado Go. Además se han parcheado los servidores Apache HTTP Server y Apache Tomcat para evitar que esto ocurra. Es de esperar que otros lenguajes y herramientas se unan y saquen los oportunos parches ya que este fallo es un error de diseño y por lo tanto transversal a todo el bestiario de librerías, implementaciones y herramientas que usen CGI.

Por cierto si estabas a punto de dejar de leer pensando que no afecta a Microsoft IIS, sí que afecta en cierto modo, como por ejemplo derivado del uso de la librería cURL, tal y como comentan en la nota enlazada.


Prueba de concepto y más información

Los autores nos han dejado un legado para la posteridad en forma de página web con su logo y dominio, como viene siendo costumbre.

No es recomendable hacer una prueba de concepto en entornos de producción, ya que si funciona todo el tráfico HTTP saliente del servidor se dirigirá al proxy indicado por la petición manipulada, pero si insistimos en ello, los autores han dejado código en un repositorio de GitHub.



Más información:

httpoxy

https://httpoxy.org/

The CERT vulnerability note - VU#797896 CGI web servers assign Proxy header values from client requests to internal HTTP_PROXY environment variables

https://www.kb.cert.org/vuls/id/797896

Red Hat advisory HTTPoxy - CGI "HTTP_PROXY" variable name clash

https://access.redhat.com/security/vulnerabilities/httpoxy

Apache Software Foundation Projects and "httpoxy" CERT VU#797896

https://www.apache.org/security/asf-httpoxy-response.txt

Microsoft advisory KB3179800 IIS CGI HTTP_PROXY header requests may be redirected

https://support.microsoft.com/en-us/kb/3179800

"
Comentarios

Artículos de Fran 🐝 Brizzolis

Ver blog
hace 5 años · 5 min. de lectura

¡Hola abejas! Este año 2018 está siendo algo complicado para mí, supongo que como para algunos de vo ...

hace 5 años · 7 min. de lectura

¡Hola abejas!... Después de un final e inicio de año un tanto accidentado, ( 2 averías casi consecut ...

hace 5 años · 1 min. de lectura

A medida que evoluciona la tecnología, también lo hace el delito informático. El centro de atención ...

Puede que te interesen estos puestos de trabajo


  • Servinform Sevilla, España

    Administrador/a Servidores aplicaciones web LINUX Sevilla · Publicada el 9 de abril de 2024 · ¿Quieres formar parte de una gran empresa? Somos Servinform,uno de los principales grupos de externalización de servicios de contact center y BPO, formado por más de 9.000 empleados en ...

  • Ofg Adquisiciones E Ingeniería

    Analista Vulnerabilidades&Ciclo De Vida, Hibrido

    Encontrado en: Buscojobs ES C2 - hace 2 días


    Ofg Adquisiciones E Ingeniería Madrid, España

    Analista vulnerabilidades&ciclo de vida en hibrido. Descripción En OFG seleccionamos un Analista Gestión de vulnerabilidades y del Ciclo de Vida del Desarrollo (SDLC). Requisitos - Experiencia demostrable en hacking ético Test de intrusión Análisis de vulnerabilidades. - Experien ...

  • Servinform

    Administrador/a Servidores aplicaciones web LINUX

    Encontrado en: beBee S2 ES - hace 5 días


    Servinform Sevilla, España De jornada completa

    ¿Quieres formar parte de una gran empresa?Somos Servinform,uno de los principales grupos de externalización de servicios de contact center y BPO, formado por más de 9.000 empleados en la que damos soporte a más de 1.500 empresas en servicios de call center, backoffice, marketing, ...