Desde hace un par de meses (uno o dos) me he estado introduciendo en el tema de XSS, hoy en día este tipo de ataques es el que más amenaza a los sistemas web, y es que cualquier sitio es vulnerable a sufrir un ataque XSS, desde un sencillo blog hasta los grandes sistemas como gmail, ebuy, myspace, el academico de la UM (Tiene varios), etc. En este post voy a aclarar algunas dudas que pudiesen existir, además que mostraré un ejemplo sencillo, todo esto con el afán de que los desarrolladores (programadores) se den cuenta del potencial de estos ataques y al desarrollar sus proyectos tengan en mente esto en todo momento.
¿Qué significa XSS?
En ingles Cross-Site Scripting (CSS), no confundir con Cascade Sheet Style, es por esta razón que se le a puesto una X en lugar de la C.
¿En que consiste un ataque XSS?
Básicamente un ataque XSS es inyectar código en la aplicación vulnerable, se puede alterar el DOM, robar cookies o inclusive ejecutar un archivo maligno.js donde las posibilidades son infinitas, pues pudieses modificar la base de datos mediante AJAX, en fin, un pequeño error puede abrir un universo de posibilidades, para mayor información al respecto te sugiero leer este articulo en la Wikipedia http://en.wikipedia.org/wiki/Cross_site_scripting.
¿Qué puedo hacer como usuario para protegerme?
Muchas de las veces personas malintencionadas encuentran una vulnerabilidad en un sitio, y por medio de ingeniería social logran hacer que el usuario de clic sobre un link maligno, al hacer esto la victima ah sido afectada. Para protegerte lo que puedes hacer es utilizar plugins para Firefox que deshabilitan el Javascript en las páginas, permitiéndote ejecutar solo aquellas que tu autorices, puedes descargar el plugin desde aquí https://addons.mozilla.org/es-ES/firefox/addon/722
¿Qué puedo hacer como desarrollador?
Como programador, tu trabajo es validar cada una de las entradas recibidas por formularios o parámetros de la url, tipos de dato, longitudes de cadenas, limpiar caracteres o tags exclusivos de html.
¿Como identifico una vulnerabilidad?
Detectarlo depende de ciertos skills, entre mas experiencia tengas te será más fácil aún, para encontrarlos simplemente prueba enviar a cada parámetro enviado al servidor series de caracteres como estas:
Este es el mas tonto, si un sitio cuenta con esto, es que realmente fue desarrollado por un completo inepto (Sin animo de ofender a nadie).
Estos dos en caso de que tengan filtradas las comillas
Este es muy útil algunas veces, para que veas que no solo con etiquetas <script> se puede realizar un ataque.
Una pequeña para cuando te restringen el tamaño de un campo.
Una muy buena!
Si te has dado cuenta lo primero que hay que hacer es terminar el tag vulnerable con esto “/> luego insertar el código malicioso.
Esto es realmente sencillo, solo necesitas tener un poco de imaginación y conocer Javascript, con un poco de pasciencia podrás ir mejorando tus habilidades al encontrar vulnerabilidades.
Ejemplo:
La versión de wordpress 2.2.1 tiene una grave vulnerabilidad, en la pagina upload.php recibe una serie de parámetros, entre ellos uno que se llama style, este parámetro no esta filtrado y se imprime directamente en la página.
Con un poco de ingeniería social y un poco de javascript un usuario malintencionado puede tomar el control absoluto del blog, para esto simplemente le mandas al admin un correo fake diciéndole que le han dejado un comentario en el blog y que lo puede ver mediante un link, el usuario da clic sobre el link y listo, el código maligno se ejecuta. El link puede ser semejante a este:
Al ejecutar este link, se incluye un script alojado en el servidor del atacante y se ejecuta sobre las paginas de la victima, un ejemplo de lo que pudiera contener este script puede ser insertar un nuevo usuario administrador, insertar posts, en el peor de los casos borrar todos tus post, editar los archivos php mediante el editor de wordpress, y muchas cosas mas y todo esto que estoy mencionando es realmente sencillo no necesitas ser un gurú para realizarlo, así que si tienes un wordpress mantente actualizado.
Actualmente he enviado varios avisos a personas que tienen esta versión de wordpress, y le he mandado el link anterior, claro esta que el xss.js no lo tengo implementado, por último es importante mencionar que difundas este conocimiento para que se le de un buen uso.