He encontrado el siguiente código JS en varias aplicaciones web. Creo que la razón de la popularidad de este fragmento de código es esta respuesta aceptada en SO . Los desarrolladores parecen estar usando este código muchas veces para cambiar las pestañas del menú:
var url = document.location.toString();
if (url.match('#')) {
$('.nav-tabs a[href="#' + url.split('#')[1] + '"]').tab('show');
}
Básicamente, lee desde document.location
y pasa cualquier cosa después de #
a $()
sin ningún tipo de saneamiento.
Incluso el escáner activo de Burp Suite lo reporta como un verdadero positivo.
He intentado explotarlo, pero me parece un falso positivo. Mi hipótesis es que, dado que JS está convirtiendo la URL como una cadena, cualquier carga útil (incluyendo caracteres especiales) se tratará como una cadena.
¿Publicar esto aquí solo para asegurarse de que si pueden pensar en otra forma de explotarlo para causar un XSS basado en DOM?