XSS Based DOM
En esta sección veremos que es el xss basado en el DOM, como funciona, como explotarlo y cuales son sus posibles remediaciones.
Last updated
En esta sección veremos que es el xss basado en el DOM, como funciona, como explotarlo y cuales son sus posibles remediaciones.
Last updated
Definición: DOM XSS ocurre cuando la vulnerabilidad reside en el lado del cliente (JavaScript), y el script malicioso se inyecta y ejecuta directamente en el DOM del navegador sin pasar por el servidor.
Características:
Interacción del usuario: Puede ocurrir sin la intervención directa del usuario.
Vector de ataque: Manipulación del DOM del navegador a través de JavaScript.
Ejemplo: Una aplicación web que toma un parámetro de la URL y lo inserta en el DOM sin sanitización adecuada.
Características técnicas:
Ubicación: El código malicioso es inyectado y ejecutado directamente en el navegador del cliente.
Métodos comunes: document.URL
, document.location
, document.referrer
, window.name
, y otros métodos que manipulan el DOM.
Ejemplo de PoC:
Una URL vulnerable puede ser http://ejemplo.com/page?input=<script>alert('XSS')</script>
.
El código JavaScript vulnerable en la página podría ser:
(también conocido como ) surge cuando una aplicación contiene algún JavaScript del lado del cliente que procesa datos de una fuente no confiable de una manera insegura, generalmente escribiendo los datos nuevamente en el DOM.
En el siguiente ejemplo, una aplicación utiliza algo de JavaScript para leer el valor de un campo de entrada y escribir ese valor en un elemento dentro del HTML:
Si el atacante puede controlar el valor del campo de entrada, puede construir fácilmente un valor malicioso que haga que se ejecute su propio script:
En un caso típico, el campo de entrada se rellenaría con parte de la solicitud HTTP, como un parámetro de cadena de consulta de URL, lo que permitiría al atacante realizar un ataque utilizando una URL maliciosa, de la misma manera que el XSS reflejado.
Un atacante que explota una vulnerabilidad de secuencias de comandos entre sitios normalmente puede:
Hacerse pasar por el usuario víctima.
Realizar cualquier acción que el usuario sea capaz de realizar.
Leer cualquier dato al que el usuario pueda acceder.
Capturar las credenciales de inicio de sesión del usuario.
Realizar desfiguración virtual del sitio web.
Inyectar funcionalidad de troyano en el sitio web.
Las vulnerabilidades basadas en DOM surgen cuando un sitio web contiene JavaScript que toma un valor controlable por el atacante, conocido como origen, y lo pasa a una función peligrosa, conocida como receptor.
Básicamente, las vulnerabilidades basadas en DOM surgen cuando un sitio web pasa datos de una fuente a un receptor, que luego maneja los datos de manera insegura en el contexto de la sesión del cliente.
Un receptor puede ser tipo:
eval()
InnerHTML
HTMLEntities
ENQUOTES_
SetTimeOut
Las siguientes son fuentes típicas que se pueden utilizar para explotar una variedad de vulnerabilidades de flujo de contaminación:
La siguiente lista ofrece una descripción general rápida de las vulnerabilidades comunes basadas en DOM y un ejemplo de un receptor que puede conducir a cada una de ellas. Para obtener una lista más completa de receptores relevantes, consulte las páginas específicas de las vulnerabilidades haciendo clic en los enlaces que aparecen a continuación.
document.write()
window.location
document.cookie
eval()
document.domain
WebSocket()
element.src
postMessage()
setRequestHeader()
FileReader.readAsText()
ExecuteSql()
sessionStorage.setItem()
document.evaluate()
JSON.parse()
element.setAttribute()
RegExp()
Los siguientes son algunos de los principales sumideros que pueden provocar vulnerabilidades DOM-XSS:
Las siguientes funciones jQuery también son receptores que pueden provocar vulnerabilidades DOM-XSS:
La prueba manual de XSS reflejado y almacenado normalmente implica enviar una entrada única y simple (como una cadena alfanumérica corta) a cada punto de entrada de la aplicación, identificar cada ubicación donde se devuelve la entrada enviada en las respuestas HTTP y probar cada ubicación individualmente para determinar si la entrada diseñada adecuadamente se puede usar para ejecutar JavaScript arbitrario. De esta manera, puede determinar el en el que se produce el XSS y seleccionar una carga útil adecuada para explotarlo.
LABORATORIOS
LABS
LABS