XSS en metaetiqueta HTML

4

Hay una aplicación web que contiene una función de búsqueda. Cuando busco aaaaaaaaxss , obtengo esto:

<meta property="the:property" content="100 Results for aaaaaaaaxss (Page 1)" />

Elimina los caracteres < y > pero no las comillas dobles. Sin embargo, como no puedo deshacerme de la otra entrada, no puedo usar 1;javascript:alert(1) o algo similar.

¿Este filtro es seguro?

    
pregunta 735Tesla 01.06.2014 - 02:42
fuente

2 respuestas

5

Definitivamente estoy de acuerdo con el comentario sobre la ineficacia de las listas negras, y no solo porque la respuesta hace referencia a mi sitio web :).

No poder deshacerse de la parte de contenido inicial puede limitar la oportunidad de XSS exitoso a través de una etiqueta meta, aunque no es del todo imposible. Por ejemplo, si la parte inicial cambia alguna vez para comenzar con una palabra no numérica como "No hay resultados para ...", podría inyectar algo como:

;url=hxxp://www.maliciousxss.com" HTTP-EQUIV="refresh" blah=" que, en función de su descripción, debería dar como resultado una etiqueta meta similar a:

<meta property="the:property" content="No results for;url=hxxp://www.maliciousxss.com" HTTP-EQUIV="refresh" blah=" (Page 1)" />

Lo probé con éxito en FF 29.0.1 pero no creo que esto funcione en ningún otro navegador moderno.

Si el texto inicial siempre comienza con un número, podrías intentar algo como

" STYLE="width:expression(alert('XSS'));" blah=" , que nuevamente en función de tu ejemplo debería dar como resultado una etiqueta meta similar a:

<meta property="the:property" content="100 results for" STYLE="width:expression(alert('XSS'));" blah=" (Page 1)" />

Este solo funcionaría en IE 7 o anterior, por lo que es aún más limitado.

Tuve que hacer algunas suposiciones sobre el comportamiento del sitio y la validación de entrada adicional para que estos ejemplos particulares no funcionen, pero espero haber ayudado a respaldar la afirmación de thexacre de que las listas negras rara vez son un enfoque completamente efectivo. La lista blanca (cuando sea posible) es mejor, pero la codificación de salida es siempre una obligación cuando los datos generados por el usuario se incorporan en la respuesta del servidor.

    
respondido por el T_v3rn1x 03.06.2014 - 20:52
fuente
3

Fuera de la parte superior de mi cabeza y sin ver la página específicamente, no puedo pensar en un vector de ataque, pero las "listas negras" rara vez son una técnica de seguridad completamente efectiva, así que apuesto a que no es seguro.

Encontré este artículo, por ejemplo, que aborda específicamente las etiquetas meta: enlace

Como se describe en ese artículo, podría inyectar un HTTP-EQUIV="actualizar" y una URL codificada en base64 para redirigir la página.

    
respondido por el thexacre 01.06.2014 - 03:07
fuente

Lea otras preguntas en las etiquetas