Requests: Mitigación HTTPoxy

Creado en 18 jul. 2016  ·  4Comentarios  ·  Fuente: psf/requests

https://httpoxy.org/

Es posible configurar HTTP_PROXY en scripts CGI pasando el encabezado Proxy . Si el script utiliza solicitudes para descargar archivos, las solicitudes utilizarán felizmente el proxy proporcionado por el atacante para realizar solicitudes.

Esto debería mitigarse como en Perl (desde 2001), Ruby y bibliotecas como curl.

Confirmé que se acepta HTTP_PROXY (en mayúsculas) así como el convencional http_proxy minúsculas (solicitudes 2.7.0)

Comentario más útil

Hemos estado discutiendo esto extensamente en IRC. Tenemos un conjunto complejo de opiniones aquí, pero aquí están:

  1. En general, si está ejecutando su secuencia de comandos de Solicitudes en una ubicación donde su aplicación permite escrituras en el entorno, debe deshabilitar la búsqueda del entorno de Solicitudes. Tenemos una bandera para esto: Session.trust_env . Establecerlo en False mitiga por completo este riesgo.
  2. CGI es un modo _extremadamente_ poco común para ejecutar código Python. Es asombrosamente ineficiente y, hasta donde yo sé, prácticamente no se desarrollan aplicaciones de Python con él.
  3. Nuestra búsqueda de proxies en realidad se realiza mediante la biblioteca estándar de Python. Esto significa que la solución más eficiente está en la propia biblioteca estándar de Python, que puede mitigar el problema no solo para las solicitudes, sino también para todos los demás clientes de la biblioteca estándar de Python.

Estoy dispuesto a considerar la posibilidad de generar advertencias al ejecutar Solicitudes dentro de un proceso CGI con trust_env=True , e incluso estoy dispuesto a considerar la posibilidad de forzar trust_env a False en tal situación, pero de manera realista para el código Python, la solución correcta a esto es simplemente _no ejecutar sus aplicaciones dentro de CGI_.

Todos 4 comentarios

Hemos estado discutiendo esto extensamente en IRC. Tenemos un conjunto complejo de opiniones aquí, pero aquí están:

  1. En general, si está ejecutando su secuencia de comandos de Solicitudes en una ubicación donde su aplicación permite escrituras en el entorno, debe deshabilitar la búsqueda del entorno de Solicitudes. Tenemos una bandera para esto: Session.trust_env . Establecerlo en False mitiga por completo este riesgo.
  2. CGI es un modo _extremadamente_ poco común para ejecutar código Python. Es asombrosamente ineficiente y, hasta donde yo sé, prácticamente no se desarrollan aplicaciones de Python con él.
  3. Nuestra búsqueda de proxies en realidad se realiza mediante la biblioteca estándar de Python. Esto significa que la solución más eficiente está en la propia biblioteca estándar de Python, que puede mitigar el problema no solo para las solicitudes, sino también para todos los demás clientes de la biblioteca estándar de Python.

Estoy dispuesto a considerar la posibilidad de generar advertencias al ejecutar Solicitudes dentro de un proceso CGI con trust_env=True , e incluso estoy dispuesto a considerar la posibilidad de forzar trust_env a False en tal situación, pero de manera realista para el código Python, la solución correcta a esto es simplemente _no ejecutar sus aplicaciones dentro de CGI_.

Tiene sentido para mi. Evitar HTTP_PROXY (mayúsculas) en un contexto CGI probablemente sería una buena medida, pero si las solicitudes no lo hacen directamente, probablemente no tenga sentido que tome medidas activas. Yo solo uso wsgi. Voy a seguir adelante y cerrar esto.

@ remram44 Por lo que vale, apoyaría _de corazón_ un parche para el método urllib.request del módulo getproxies #$0$#$ de stdlib para implementar este tipo de verificación. Ese parece un lugar mucho más productivo para colocar el parche. =) Si desea abrir un informe de error para eso, con gusto intervendré: ¡incluso puedo ofrecerme como voluntario para escribir el parche yo mismo!

¿Fue útil esta página
0 / 5 - 0 calificaciones