Ataques XSS: la próxima ola
8 de junio de 2017
0 minutos de lectura¿Ha disminuido la amenaza del XSS? Han pasado más de 10 años desde que el Cross-Site Scripting (XSS) se convirtió en noticia. La conciencia sobre el tema ha aumentado y las defensas se han vuelto mucho más sofisticadas. Sin embargo, los datos recientes muestran otra realidad:
Los ataques XSS aumentaron un 39 % en el primer trimestre de 2017, el mayor incremento desde el cuarto trimestre de 2015
Se espera que las vulnerabilidades XSS aumenten un 166 % en 2017, el mayor incremento desde 2012
La prevalencia del XSS se mantiene constantemente alta: desde 2012, alrededor del 50 % de todas las vulnerabilidades de sitios web son XSS
Hace poco analizamos las 10 principales vulnerabilidades de seguridad de OWASP a la luz de las 50 mayores filtraciones de datos de 2016. En comparación con las dramáticas historias sobre grandes filtraciones de datos, los ataques XSS parecen tener un impacto mucho menor. Sin embargo, en la práctica, es probable que afecten a muchos más usuarios y sitios web; solo que, en lugar de filtrar datos de una sola vez, comprometen a los usuarios uno por uno: una «muerte por mil cortes».
En esta publicación mostraremos los datos más recientes sobre ataques, vulnerabilidades y prevalencia de XSS, que indican que estamos en medio de una «próxima ola» de XSS. Por último, analizaremos las razones detrás de la persistencia y el renovado crecimiento del XSS.
Una breve introducción al XSS
Los ataques XSS o Cross-Site Scripting (consulta la definición oficial de OWASP) ocurren cuando un atacante engaña al navegador de un usuario para que ejecute código JavaScript malicioso en el contexto del dominio de una víctima. Estos scripts pueden robar las cookies de sesión del usuario para ese dominio, extraer o modificar su contenido y realizar o modificar acciones en nombre del usuario; acciones que normalmente bloquea la Política del mismo origen del navegador.
Las vulnerabilidades XSS permiten estos ataques al reflejar el script del atacante en la página, y así ejecutarlo en el contexto del dominio de la víctima. Por ejemplo, un atacante puede publicar en un artículo un comentario que incluya un script malicioso aprovechando una vulnerabilidad XSS. El script del atacante compromete entonces a todos los visitantes de la página.

El ejemplo anterior describe una vulnerabilidad de «XSS persistente». Otro tipo común de XSS se denomina «XSS reflejado», en el que el sitio web devuelve una parte de la solicitud. El atacante debe engañar al usuario para que haga clic en un enlace malicioso (por ejemplo, mediante un correo de phishing o JavaScript malicioso en otra página), lo que desencadena el ataque XSS.
Por último, los ataques de «XSS basado en DOM» ocurren exclusivamente en el navegador, cuando JavaScript del lado del cliente devuelve una parte de la URL a la página. El XSS basado en DOM es notoriamente difícil de detectar, ya que el servidor nunca llega a ver el ataque.
Los ataques XSS llevan un año en aumento: crecieron un 39 % en el primer trimestre
El Informe sobre el estado de la seguridad en Internet de Akamai, que se publica cada trimestre, muestra que los ataques XSS disminuyeron a principios de 2016, pero volvieron a aumentar y crecieron drásticamente en el primer trimestre de este año. Según Akamai, los ataques XSS ahora representan el 10 % de todos los ataques a aplicaciones web.

Antes de 2015, el informe de Akamai no especificaba la cantidad de ataques XSS, lo que dificulta extender esta cronología a años anteriores. Sin embargo, los datos del Informe sobre ataques a aplicaciones web de Imperva, un estudio de 297,954 ataques que protegieron las soluciones WAF de Imperva, arrojan algo de luz sobre los ataques XSS de años anteriores.
Imperva informa que, en 2013, 2014 y 2015, la aplicación web promedio de su conjunto de datos sufrió ataques XSS 8, 12 y 21 veces, respectivamente. Esto representa un aumento del 110 % en los ataques entre 2014 y 2015.

Aunque se trata de dos conjuntos de datos y metodologías muy diferentes, podríamos describir 2015 como una «ola» de ataques XSS. Y los datos de 2017 sugieren que ahora estamos en medio de la «próxima ola».
Se espera que las vulnerabilidades XSS aumenten un 166 % en 2017
La Base de datos nacional de vulnerabilidades, compilada por NIST, informa sobre vulnerabilidades en productos de software según CVE, gravedad y muchos otros criterios.
Si observamos la cantidad total de vulnerabilidades XSS, los últimos años muestran una tendencia irregular. 2014 destaca con 1,028 vulnerabilidades, un 66 % más que en 2013. 2016 fue un año de cifras bajas, con solo 472 vulnerabilidades, un 34 % menos que en 2015.

Sin embargo, en 2017 hay una tendencia ascendente drástica: en los primeros 5.5 meses del año (hasta el momento de redactar este artículo), se reportaron 508 vulnerabilidades, más que en todo 2016. Si extrapolamos a todo el año, se estima que se reportarán 1,354 vulnerabilidades, lo que representa un crecimiento sin precedentes del 166 %.
Esta es una prueba más de la «próxima ola» de XSS, impulsada por un crecimiento inusual en la cantidad de sistemas de software reportados como vulnerables.
Cabe señalar que estos datos no incluyen los ataques XSS basados en DOM, que ocurren en el lado del cliente y son prácticamente imposibles de detectar. Según nuestra experiencia, estos tipos de ataques son cada vez más frecuentes a medida que las aplicaciones de una sola página ganan popularidad y los sitios web ofrecen funciones más completas del lado del cliente.
Por ejemplo, hace poco realizamos un estudio de bibliotecas JavaScript del lado del cliente y descubrimos que el 77 % de los sitios usa al menos una biblioteca JavaScript vulnerable. Muchas de esas vulnerabilidades son XSS y serían difíciles de detectar con las herramientas de monitoreo tradicionales.
Las vulnerabilidades XSS de alto perfil no son cosa del pasado
Históricamente, se han reportado vulnerabilidades y ataques de Cross-Site Scripting en organizaciones como MySpace (2005), American Express (2008), el sitio web de la campaña electoral de Barack Obama (2008), McAfee, Semantec y Kaspersky (2009), Facebook (2011), la CIA y el FBI (2011) y Ebay (2012).
Pero estos reportes «espectaculares» no son cosa del pasado. En 2016, los usuarios de eBay y Yahoo volvieron a estar expuestos a XSS. En julio de 2016, Cisco anunció una vulnerabilidad XSS en su popular plataforma Webex, que se corrigió rápidamente.
En 2017, hasta el mes de mayo, la base de datos de NIST reportó vulnerabilidades XSS en ciertas versiones de los siguientes sistemas de software de primer nivel:
IBM Rational Team Concert - CVE-2016-6037
Trend Micro OfficeScan - CVE-2017-8801
El lenguaje de programación ColdFusion - 2017-3008
Cisco Prime Infrastructure - 2017-6611
IBM Financial Transaction Manager for ACH Services - 2017-1160
Atlassian JIRA - 2016-4318
Esta es solo una muestra anecdótica: muchas más de las 508 vulnerabilidades reportadas en los últimos meses podrían considerarse de «alto perfil». Es posible que los atacantes hayan explotado muchas de ellas (un dato que no estaba disponible cuando redactamos este artículo).
La prevalencia del XSS se mantiene alta desde 2012
Otro estudio, el Informe de estadísticas de seguridad de WhiteHat, hizo un seguimiento de la prevalencia del XSS entre 2012 y 2015 mediante el análisis de los datos de escaneo y corrección del servicio WhiteHat Sentinel. La métrica utilizada fue el porcentaje de todas las vulnerabilidades detectadas en los sitios web participantes que correspondían a XSS.

Estos datos contradicen la idea de que el XSS está disminuyendo o desapareciendo. Una década completa después de que el ataque XSS «Sami is My Hero» en MySpace conmocionara al mundo, en 2015 casi el 50 % de las vulnerabilidades detectadas en sitios web eran vulnerabilidades XSS, sin cambios significativos respecto de años anteriores.
El estudio de WhiteHat también destaca la importancia del XSS frente a otras vulnerabilidades. De manera constante, el XSS es una de las 3 vulnerabilidades principales detectadas en sitios web, con una gran diferencia en el porcentaje de prevalencia entre las 3 principales y el resto.
Estas son las cifras de 2015: el XSS ocupó el puesto n.º 3, con el 48 % de todas las vulnerabilidades, frente a la siguiente, la suplantación de contenido (Content Spoofing), con apenas el 25 %.

El Informe de estadísticas de vulnerabilidades de EdgeScan respalda estos datos con cifras muy similares, obtenidas mediante una metodología parecida. EdgeScan informa que el XSS representó constantemente más del 50 % de todas las vulnerabilidades entre 2013 y 2015.
Nuestra conclusión: el XSS es un problema cada vez más grave
Los datos muestran que el XSS sigue siendo un problema importante y probablemente está entrando en una nueva ola en cuanto a la prevalencia de vulnerabilidades y la cantidad de ataques:
La proporción de ataques XSS entre todos los ataques a aplicaciones web aumentó del 7 % al 10 % en el primer trimestre de 2017.
Durante los últimos cuatro años (y más), las vulnerabilidades XSS han estado presentes en alrededor del 50 % de los sitios web.
Según la base de datos de vulnerabilidades de NIST, se proyecta que las vulnerabilidades XSS aumenten un 166 % este año: de 508 productos y sistemas vulnerables en 2016 a 1,354 vulnerabilidades en todo 2017.
Es importante recordar que esta prevalencia tiene otro factor multiplicador: una sola vulnerabilidad XSS compromete todo el dominio en el que aparece. Como resultado, una página remota y poco visitada que use JavaScript antiguo y sea susceptible al XSS basado en DOM expone y pone en riesgo todos los datos y acciones de los usuarios en el dominio donde está alojada.
En Snyk, protegemos miles de aplicaciones web frente al XSS y otras vulnerabilidades presentes en los paquetes de código abierto que utilizan. Según nuestra experiencia, podemos sugerir cinco razones por las que el XSS no va a desaparecer (como muchos expertos esperaban) y por las que podría convertirse en un problema de seguridad más difícil en 2017:
Cada vez se transfieren datos más importantes y se realizan más acciones a través de la web, lo que hace que los ataques XSS sean mucho más atractivos para los atacantes.
Las aplicaciones de una sola página aumentan la cantidad de lógica del lado del cliente y el procesamiento de entradas de usuario. Esto las hace más propensas al XSS basado en DOM, que, como mencionamos antes, es muy difícil de detectar para los propietarios de sitios web.
Una mayor persistencia y almacenamiento en caché de JavaScript en las aplicaciones web modernas, diseñados para permitir el acceso sin conexión y las aplicaciones web progresivas, permiten a los atacantes mantener JavaScript malicioso en el navegador de la víctima y dejarlo comprometido mucho después de corregir la vulnerabilidad.
Las pantallas de los dispositivos móviles ocultan información del navegador, por ejemplo, al cortar las URL y las cadenas de consulta. Esto dificulta que los usuarios detecten algo inusual mientras navegan desde sus dispositivos móviles.
El mayor uso de bibliotecas de código abierto, presentes en la mayoría de los sitios web y cuyo uso promueven aún más frameworks como React y Angular, amplifica el alcance de las vulnerabilidades XSS en esas bibliotecas. La mayoría de los sitios web no administran sus dependencias, por lo que siguen sin tener conocimiento de las vulnerabilidades y expuestos a ellas mucho después de que se corrijan en la biblioteca.
Los desarrolladores de aplicaciones, los propietarios de sitios web y los responsables de seguridad deben prestar atención: los ataques XSS son una gran señal de alerta en 2017 y merecen un análisis cuidadoso. Ahora más que nunca, las aplicaciones deben desarrollarse, probarse, analizarse y actualizarse teniendo en cuenta las fallas XSS, para reducir los riesgos para las organizaciones y el daño a clientes y usuarios.
A los desarrolladores les encanta. Los equipos de seguridad confían en él.
Las herramientas de Snyk, diseñadas primero para desarrolladores, ofrecen seguridad integrada y automatizada que satisface tus necesidades de gobernanza y cumplimiento.