Reflected DOM XSS

20240807115606.png
  1. Realiza una solicitud AJAX:

function search(path) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            eval('var searchResultsObj = ' + this.responseText);
            displaySearchResults(searchResultsObj);
        }
    };
    xhr.open("GET", path + window.location.search);
    xhr.send();
}
  • La función search realiza una solicitud GET a la URL compuesta por path y los parámetros de la búsqueda (window.location.search).

  • Cuando la respuesta se recibe y es exitosa (status == 200), el código evalúa la respuesta JSON como un objeto JavaScript usando eval.

  1. Mostrar los resultados de la búsqueda:

    • displaySearchResults se encarga de actualizar el DOM con los resultados de la búsqueda.

Entrada Maliciosa: \

Entrada Maliciosa: \"-alert(1)}//

Si un usuario malicioso ingresa la cadena \"-alert(1)}//, el código puede quedar vulnerable a un ataque XSS debido al uso de eval. Vamos a analizar por qué:

  1. Concatenación y Evaluación de la Respuesta:

Si el servidor devuelve una respuesta JSON que incluye la cadena maliciosa sin escaparla adecuadamente, eval ejecutará código JavaScript no seguro.

  1. Ejemplo de Respuesta del Servidor: Supongamos que el servidor devuelve el siguiente JSON (simplificado):

  1. Evaluación Peligrosa:

    • La línea eval('var searchResultsObj = ' + this.responseText); se convertiría en:

Debido a los caracteres de escape, la cadena de búsqueda se cierra prematuramente y se ejecuta alert(1).

Last updated