Estoy usando la herramienta checkmarx SAST y sus selectores jquery resaltados usando el hash de la URL como Client DOM XSS:
$('[name=' + location.hash.replace('#', '') + ' ]')o incluso
$('#'location.hash.replace('#', ''))No entiendo cómo cualquiera de los ejemplos anteriores puede ser vulnerable a XSS dado que tiene otras partes del selector, especialmente la primera. Según tengo entendido, la única forma en que alguien puede ser vulnerable a XSS a través del selector jquery es insertando el valor hash sin el símbolo hash de la siguiente manera:
$(location.hash.replace('#', '')) donde alguien puede poner algo malicioso después del hash como https://example.com#<img src="" onerror="alert(1)" . Incluso $(location.hash) simple, creo que se solucionó en las últimas versiones de jquery.
Por favor, complétame con lo que me falta.
ACTUALIZAR
Resulta que lo que pensé que era el menos vulnerable es en realidad el más. prueba este $('[name="<img src="" onerror="alert(document.cookie)""]/>') y verás la ventana emergente de alerta.
Solo los selectores jQuery que comienzan con hash o incluso que comienzan con otros selectores pero tienen un hash que precede al elemento inyectado no serán explotables, por ejemplo, este $('.something <img src="" onerror="alert(document.cookie)""]/> #hash') es explotable, pero este $('#hash <img src="" onerror="alert(document.cookie)""]/>') no lo es.
¿Alguien puede confirmar que mis hallazgos son correctos y si, de hecho, algún selector de inicio de hash se puede marcar como no explotable?