¿Que es, el ataque XSS basado en DOM?

¿Qué es XSS basado en DOM (secuencias de comandos entre sitios)?

Este artículo de seguridad web explica las secuencias de comandos entre sitios basadas en DOM utilizando ejemplos de codificación de la vida real. También aprenderá por qué los métodos de remediación XSS tradicionales no son efectivos contra XSS basado en DOM y qué puede hacer para asegurarse de que sus aplicaciones web no sean vulnerables a este tipo de vulnerabilidad de secuencias de comandos entre sitios.

Cross-site scripting (XSS) es una vulnerabilidad de aplicación web muy conocida entre los desarrolladores. Si bien la idea de que los atacantes pueden inyectar JavaScript en su código es clara, la parte más importante de un ataque XSS que los desarrolladores deben comprender es su impacto. Si tiene éxito, un atacante puede robar o secuestrar su sesión, llevar a cabo ataques de phishing convincentes y hacer cualquier cosa que la víctima pueda hacer.

XSS basado en DOM simplemente significa una vulnerabilidad de secuencias de comandos entre sitios que ocurre en el DOM ( Modelo de objetos de documento ) de su sitio en lugar de en HTML. En los ataques de cross-site scripting reflexivos y almacenados, puede ver la carga útil de la vulnerabilidad en la página de respuesta. En las secuencias de comandos entre sitios basadas en DOM, el código fuente HTML y la respuesta del ataque serán exactamente iguales, es decir, no se podrá encontrar la carga útil en la respuesta. Solo se puede observar en tiempo de ejecución o investigando el DOM de la página.

Las vulnerabilidades DOM XSS son una amenaza real

Varias investigaciones y estudios identificaron que hasta el 50% de los sitios web son vulnerables a las vulnerabilidades XSS basadas en DOM. Los investigadores de seguridad han identificado problemas XSS basados ​​en DOM incluso en los sitios y aplicaciones de las empresas web más grandes.

Vulnerabilidades de flujo corrupto

Muchas vulnerabilidades basadas en DOM se remontan a problemas con la forma en que el código del lado del cliente manipula los datos controlables por el atacante.

¿Qué es el flujo de contaminación?

Para explotar o mitigar estas vulnerabilidades, es importante que primero se familiarice con los conceptos básicos del flujo contaminado entre fuentes y sumideros.

Escanee los rincones de sus aplicaciones que otras herramientas pasan por alto con nuestro exclusivo enfoque de escaneo dinámico + interactivo (DAST + IAST).

Conocer..

Fundamentalmente, las vulnerabilidades basadas en DOM surgen cuando un sitio web pasa datos de una fuente a un sumidero, que luego maneja los datos de manera insegura en el contexto de la sesión del cliente.

La fuente más común es la URL, a la que normalmente se accede con el location objeto. Un atacante puede construir un enlace para enviar a una víctima a una página vulnerable con una carga útil en la cadena de consulta y fragmentar partes de la URL. Considere el siguiente código:

				
					goto = location.hash.slice(1)
if (goto.startsWith('https:')) {
  location = goto;
}
				
			

Esto es vulnerable a la redirección abierta basada en DOM porque la location.hash fuente se maneja de manera insegura. Si la URL contiene un fragmento hash que comienza con https:, este código extrae el valor de la location.hash propiedad y lo establece como location propiedad de window. Un atacante podría aprovechar esta vulnerabilidad construyendo la siguiente URL:

				
					https://www.innocent-website.com/example#https://www.evil-user.net
				
			

Cuando una víctima visita esta URL, JavaScript establece el valor de la location propiedad en https://www.evil-user.net, lo que automáticamente redirige a la víctima al sitio malicioso. Este comportamiento podría explotarse fácilmente para construir un ataque de phishing, por ejemplo.

Encuentre y solucione rápidamente vulnerabilidades de tiempo de ejecución en aplicaciones web y API desde una única plataforma

Cotizar..

Fuentes comunes

Las siguientes son fuentes típicas que se pueden usar para explotar una variedad de vulnerabilidades de flujo contaminado:

				
					document.URL
document.documentURI
document.URLUnencoded
document.baseURI
location
document.cookie
document.referrer
window.name
history.pushState
history.replaceState
localStorage
sessionStorage
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database
				
			

Los siguientes tipos de datos también se pueden usar como fuentes para explotar las vulnerabilidades de flujo contaminado:

¿Qué sumideros pueden conducir a vulnerabilidades basadas en DOM?

La siguiente lista proporciona una descripción general rápida de las vulnerabilidades comunes basadas en DOM y un ejemplo de un sumidero que puede conducir a cada una. Para obtener una lista más completa de sumideros relevantes, consulte las páginas específicas de vulnerabilidad haciendo clic en los enlaces a continuación.

DOM XSS LABSdocument.write()
Open redirection LABSwindow.location
Cookie manipulation LABSdocument.cookie
JavaScript injectioneval()
Document-domain manipulationdocument.domain
WebSocket-URL poisoningWebSocket()
Link manipulationelement.src
Web message manipulationpostMessage()
Ajax request-header manipulationsetRequestHeader()
Local file-path manipulationFileReader.readAsText()
Client-side SQL injectionExecuteSql()
HTML5-storage manipulationsessionStorage.setItem()
Client-side XPath injectiondocument.evaluate()
Client-side JSON injectionJSON.parse()
DOM-data manipulationelement.setAttribute()
Denial of serviceRegExp()

Cómo prevenir vulnerabilidades de flujo contaminado basadas en DOM

No hay una sola acción que pueda tomar para eliminar por completo la amenaza de los ataques basados ​​en DOM. Sin embargo, en términos generales, la forma más efectiva de evitar las vulnerabilidades basadas en DOM es evitar permitir que los datos de cualquier fuente que no sea de confianza alteren dinámicamente el valor que se transmite a cualquier sumidero.

Si la funcionalidad deseada de la aplicación significa que este comportamiento es inevitable, las defensas deben implementarse dentro del código del lado del cliente. En muchos casos, los datos relevantes se pueden validar en una lista blanca, permitiendo solo el contenido que se sabe que es seguro. En otros casos, será necesario desinfectar o codificar los datos. Esta puede ser una tarea compleja y, según el contexto en el que se inserten los datos, puede implicar una combinación de escape de JavaScript, codificación de HTML y codificación de URL, en la secuencia adecuada.

Para conocer las medidas que puede tomar para prevenir vulnerabilidades específicas, consulte las páginas de vulnerabilidades correspondientes vinculadas en la tabla anterior.

DOM Clobbering

La destrucción de DOM es una técnica avanzada en la que inyecta HTML en una página para manipular el DOM y, en última instancia, cambiar el comportamiento de JavaScript en el sitio web. La forma más común de clobbering DOM utiliza un elemento de anclaje para sobrescribir una variable global, que luego es utilizada por la aplicación de una manera no segura, como generar una URL de secuencia de comandos dinámica.

Clasificación de vulnerabilidades y tabla de severidad

ClassificationID / Severity
PCI v3.26.5.7
OWASP 2013A3
OWASP 2017A7
CWE79
CAPEC19
WASC8
HIPAA164.308(a)
ISO27001A.14.2.5
CVSS:3.0
CVSS:3.0/VA:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N

Encuentre vulnerabilidades XSS basada en DOM utilizando los escáners de vulnerabilidades web mas reconocidos en este sitio.

Si te ha gustado, ¡compártelo con tus amigos!

Scroll al inicio

Portal de Clientes