¿Por qué Chromes XSS filtra la inyección de bloques en un elemento HTML, pero no en un atributo?

2

Tengo este código vulnerable que toma un parámetro GET, y lo coloca dentro de un elemento HTML ( h1 ), así como dentro de un atributo HTML ( data-text ):

$data = $_GET["payload"];
echo "<h1>" .$data. "</h1>";
echo '<div data-role="button"  data-text="' .$data.'"></div>';

El auditor de Chrome XSS bloqueará <script>alert(1)</script> en el primer eco (dentro del elemento), pero no en el segundo (dentro del atributo) a pesar de que la carga útil podría ejecutarse a través de un gadget de script.

¿Por qué es eso?

    
pregunta Niv 13.05.2018 - 11:54
fuente

1 respuesta

2

Debido a que no hay una vulnerabilidad resultante del código HTML en el segundo caso (primero tendría que cerrar las etiquetas, por ejemplo, '"><script>alert(1)</script> ; el auditor lo detectaría).

Es posible que tenga un código JavaScript que luego procesa su código HTML y, por lo tanto, también introduce una vulnerabilidad XSS en el segundo caso (por ejemplo, a través de gadgets de script ), pero eso no es lo que XSS Auditor monitores:

  

El auditor XSS se ejecuta durante la fase de análisis de HTML e intenta encontrar reflexiones desde la solicitud hasta el cuerpo de la respuesta. No intenta mitigar los ataques XSS almacenados o basados en DOM.

El intérprete de JavaScript se ejecutará después el analizador HTML, por lo que cualquier vulnerabilidad introducida por JavaScript no será capturado por el auditor de XSS.

    
respondido por el tim 13.05.2018 - 14:32
fuente

Lea otras preguntas en las etiquetas