Vulnerabilidad DOM-based

www.onlinetis.com
 

Las vulnerabilidades DOM-based son un tipo de vulnerabilidad del lado del cliente donde la fuente de los datos (por ejemplo, el URL o el referrer HTTP) y el punto donde se procesan los datos (el sink) se encuentran en el DOM (Document Object Model) del navegador.

A diferencia de las vulnerabilidades tradicionales (como XSS reflejado o almacenado), en un ataque DOM-based el servidor no procesa directamente el payload malicioso. La vulnerabilidad reside completamente en el código JavaScript del cliente, que toma datos no confiables y los inserta de manera insegura en el HTML de la página.


¿Cómo funciona una vulnerabilidad DOM-based?

El proceso de un ataque DOM-based ocurre enteramente dentro del navegador de la víctima.

  1. Fuente (Source): El navegador lee datos no confiables. Un ejemplo común es el URL (a través de window.location.href).

  2. Procesamiento del cliente: El código JavaScript de la página toma estos datos de la fuente.

  3. Sumidero (Sink): El script inserta los datos directamente en el DOM de forma insegura. Los sinks comunes son métodos como document.write(), innerHTML, o eval().

  4. Ejecución del payload: El navegador interpreta y ejecuta el payload malicioso como parte de la página, sin que el servidor intervenga en el proceso.


Ejemplos comunes de DOM-based

Las vulnerabilidades DOM-based suelen manifestarse como XSS (Cross-Site Scripting), pero también pueden presentarse como vulnerabilidades de inyección de URL o de cookies.

Ejemplo de XSS DOM-based

Este es el tipo más conocido. El script a continuación toma el parámetro de la URL y lo inyecta directamente en el HTML.

  • Código vulnerable:

    JavaScript
    // Código JavaScript en la página web
    var nombre = new URLSearchParams(window.location.search).get('nombre');
    document.getElementById('saludo').innerHTML = 'Hola, ' + nombre + '!';
    
  • Ataque:

    https://ejemplo.com/pagina.html?nombre=<script>alert('DOM-based XSS');</script>
    
  • Resultado: El script toma el nombre de la URL e inserta la etiqueta <script> directamente en el innerHTML del elemento saludo. El navegador ejecuta la alerta, demostrando la vulnerabilidad.

Ejemplo de Redirección Abierta DOM-based

En este caso, la vulnerabilidad se utiliza para redirigir a un usuario a un sitio malicioso.

  • Código vulnerable:

    JavaScript
    // Script que redirige según un parámetro de la URL
    var destino = new URLSearchParams(window.location.search).get('destino');
    if (destino) {
      window.location.href = destino;
    }
    
  • Ataque:

    https://ejemplo.com/redirigir.html?destino=http://sitio-malicioso.com
    
  • Resultado: El script lee el parámetro destino y redirige el navegador a una URL controlada por el atacante.


Prevención

La mejor manera de prevenir estas vulnerabilidades es asegurarse de que todo el código JavaScript que manipula el DOM utilice sanitización de datos o se asegure de que la entrada del usuario se procese de manera segura. Algunas prácticas recomendadas incluyen:

  • Evitar el uso de sinks peligrosos: No usar métodos como innerHTML, document.write o eval con datos directamente de la URL o de otras fuentes no confiables.

  • Sanitizar y validar la entrada: Si es inevitable usar datos de fuentes no confiables, se deben escapar y validar rigurosamente para eliminar cualquier carácter que pueda ser interpretado como código.

  • Utilizar frameworks seguros: Las librerías de JavaScript modernas como React o Angular tienen mecanismos de seguridad integrados para prevenir automáticamente este tipo de vulnerabilidades.

Entradas populares de este blog

Ciberseguridad y hacking con Whatweb

Como robar contraseñas haciendo un phishing web

Arsenal software hacking NFC