jueves, 14 de abril de 2011

Corregida vulnerabilidad en la seguridad de urllib/urllib2

Artículo original: urllib Security Vulnerability Fixed
Guido van Rossum publicó recientemente una corrección para la incidencia CVE-2011-1521, una cuestión de seguridad en las bibliotecas URL de Python. Aunque las cuestiones relacionadas con la seguridad no son muy comunes, es una buena ocasión para dar a la comunidad la oportunidad de conocer el proceso detrás del informa, la gestión y la corrección de estos problemas cuando surgen.

Informar de un fallo

Si has encontrado un fallo en la seguridad dentro de CPython, lo primero que debes hacer es obtener los detalles del fallo de forma privada. Después de determinar que has encontrado un fallo de seguridad legítimo, generar un informe sucinto pero detallado es clave para transferir tus averiguaciones a los desarrolladores principales.
Un buen informe explica claramente cómo las partes relevantes del sistema están afectada por el fallo. También es positivo saber si el fallo ocurre en una plataforma específica o es debido a una dependencia. Es útil igualmente conocer las versiones afectadas y es probable que la vulnerabilidad sea comprobada también para todas las versiones activas. Finalmente, si has comprobado un caso de prueba que demuestre que el fallo se produce, asegúrate de incluirlo. Debes enviar tu informe al grupo security@python.org.
Recientemente Niels Heinen del Equipo de Seguridad de Google, presentó un buen informe. Descubrió un fallo en el manejo de redirecciones HTTP 302 en los módulos de las bibliotecas estándar urllib y urllib2. Lo que encontró fue que un servidor podía redirigir peticiones a esquemas inapropiados, llevando a situaciones en las cuales los datos o los sistemas podían ser comprometidos. En su informe inicial, Neils explica dos escenarios en los que estas redirecciones podrían causar problemas.
En primer lugar, ya que urllib/urllib2 ofrecen un manejador para el esquema URL file://, una redirección a file:///etc/passwd podría exponer información de contraseñas. Neils también explicó que la redirección a un dispositivo del sistema como file:///dev/zero podría generar un agotamiento de los recursos, desembocando en una denegación de servicio.

Gestionar un informe

Debido a la naturaleza sensible de los informes de seguridad, la lista security@python.org es mantenida por un pequeño grupo de desarrolladores de confianza, los cuales analizan y actúan sobre los informes tan pronto como les es posible. Si quieres comunicarte con la lista usando cifrado, lee la página noticias sobre seguridad para detalles sobre OpenPGP.
Si el grupo determina que se ha detectado un fallo en la seguridad, se anunciará un informe público de error con el correspondiente parche. En el caso que nos ocupa, Guido van Rossum anunció públicamente el fallo en la issue #11662, completándolo con un parche inicial.

Corregir el fallo

Lo que no hace el parche de Guido es restringir la redirección a los esquemas URL http://, https:// y ftp://. La redirección FTP fue juzgada como aceptable y es una redirección muy común actualmente: Los sistemas de descargas espejo en ocasiones redireccionan peticiones a servidores FTP más convenientes geográficamente hablando.
Para Python 2.x, el método redirect_internal de FancyURLopener arroja ahora una excepción IOError cuando se solicita la realización de una redirección a un esquema inapropiado. El método http_error_302 de HTTPRedirectHandler hace lo mismo, arrojando HTTPError únicamente. En Python 3, las mismas correcciones se realizaron en urllib.request. Se incluyeron con el parche dos pruebas las cuales ponen en práctica la redirección en esquemas válidos e inválidos.
En lo que a los usuarios se refiere, el lanzamiento final de seguridad de Python 2.5 se realizará pronto. Aunque todavía no hay fechas establecidas para los siguientes parches en las ramas de mantenimiento (2.6, 2.7, 3.1, y 3.2) se les ha aplicado el parche para resolver esta vulnerabilidad.

No hay comentarios:

Publicar un comentario en la entrada