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