domingo, 18 de agosto de 2013

Nuevas versiones de Django solucionan vulnerabilidades de cross-site scripting

La Django Software Foundation ha publicado nuevas versiones de las ramas 1.4, 1.5 y 1.6 beta de Django, que solucionan dos vulnerabilidades que permitirían ataques de tipo cross-site scripting.

Django es un entorno de desarrollo de código abierto basado en Python para el desarrollo de sitios web siguiendo el patrón Modelo Vista Controlador. Fue publicado por primera vez en 2005, siendo su última versión estable la 1.5 y encontrándose la 1.6 en fase de desarrollo.

La primera de las vulnerabilidades se encuentra en la interfaz de administración. Desde esta aplicación se permite a los usuarios, previa autenticación, la edición de datos de las aplicaciones y sitios web en desarrollo.

Django aplica por defecto un escape de la salida sobre ciertos campos de aplicación potencialmente inseguros. Sin embargo, los campos de tipo URLField que son usados para almacenar URLs, son tratados como seguros al mostrarlos en esta interfaz. Esto los hace vectores potenciales para realizar ataques cross-site scripting.

El problema aparece principalmente en el sitio de administración, pero puede extenderse a cualquier parte del sitio que haga uso de los widgets que este provee. Para solucionarlo, se ha cambiado el trato por defecto a los campos URLField, pasando a tratarse como contenido inseguro, y aplicando sobre ellos el filtrado. Esta vulnerabilidad ha sido descubierta por Łukasz Langa, y afecta tanto a la rama 1.5 como 1.6.

La segunda vulnerabilidad se encuentra en el sistema 'POST-redirect-GET'. Este sistema permite pasar como parámetro la URL a la que el usuario va a ser redirigido si el proceso de la vista tiene éxito (por ejemplo, al abrir o cerrar sesión).

Este parámetro es validado mediante la función 'django.utils.http.is_safe_url', que comprueba que esté en el mismo dominio y que no sea una cadena maliciosa. Este proceso fue introducido el año pasado a raíz de la vulnerabilidad CVE-2012-3442, de la que informamos en su momento.

Aunque 'django.utils.http.is_safe_url' está diseñada para permitir redirecciones solo a esquemas HTTP y HTTPS, se ha descubierto un problema en la forma en la que la función procesa este parámetro, que podría permitir la redirección a otros esquemas, (por ejemplo, mailto: o javascript:).

El fallo podría permitir potencialmente un ataque cross-site scripting, aunque no se ha descubierto de momento un método de explotación. Afecta a las ramas 1.4, 1.5 y 1.6 beta y ha sido descubierta por Nick Bruun.

Se recomienda a los usuarios que actualicen a las versiones 1.4.6, 1.5.2 y 1.6 beta 2. Las actualizaciones están disponibles a través del repositorio PyPi o la página oficial de Django.

Más información:

Security releases issued

Denegaciones de servicio y cross-site scripting en Django


Francisco López

No hay comentarios:

Publicar un comentario en la entrada