Reflective XSS en códigos de script con tipo de contenido “texto / javascript”

1

Tengo una página web que devuelve código de secuencia de comandos sin formato con el encabezado Content-Type: text/javascript . Sin embargo, encontré que hay un xss reflexivo en uno de los parámetros pasados a la url que se copia en el javascript devuelto. Esta es la configuración.

  

URL:

www.mysite.com/js?p1=data&p2=NodeFrame.jsResponse
     

Javascript:

     

/**/NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});

Ahora el XSS que he creado va así:

  

URL:

www.mysite.com/js?p1=data&p2=NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});alert(1);//
     

Javascript:

     

/**/NodeFrame.jsResponse({"success":true,"data":{"id":0,"jdata":[]}});alert(1);//({"success":true,"data":{"id":0,"jdata":[]}});

Para que quede claro, los valores del parámetro p2, se usan sin autorización en el script devuelto, como el nombre de la función.

La respuesta HTTP tiene Content-Type: text/javascript , en ella. Y el script no está incrustado dentro de un documento html.

¿Hay alguna posibilidad de que el código se pueda ejecutar en un navegador? Estoy preocupado por los navegadores antiguos y eso básicamente. Supongamos que X-Content-Type-Options: nosniff no está configurado, ¿hay algún navegador que realmente lo muestre? Si es así, ¿puedo obtener un PoC o una versión de navegador para probar?

Editar : La pregunta es, ¿cualquier versión de cualquier navegador olerá un código de script sin procesar con el conjunto de encabezados Content-Type: text/javascript , dado que X-Content-Type-Options: nosniff no está establecido?

    
pregunta mystupidstory 03.01.2016 - 19:00
fuente

3 respuestas

1

En primer lugar, text/javascript está desactualizado y, en consecuencia, es menos confiable. El tipo MIME oficial aceptado para JavaScript es application/javascript . Cualquiera de los principales navegadores modernos debe saber cómo manejar este último al no ejecutarlo cuando se visita directamente.

Con respecto a las vulnerabilidades de seguridad presentes en Internet Explorer, los tipos MIME de JavaScript no se ven afectados. En un artículo de Microsoft sobre detección de tipos MIME , hay tipos reconocidos claramente definidos , donde JavaScript no está presente en ninguna parte. Esto significa que Internet Explorer usará automáticamente lo que sea devuelto por el servidor:

  

Si el tipo MIME "sugerido" (proporcionado por el servidor) es desconocido (no se conoce y no es ambiguo), FindMimeFromData devuelve inmediatamente este tipo MIME como la determinación final. La razón de esto es que los nuevos tipos MIME están emergiendo continuamente, y estos tipos MIME pueden tener formatos que son difíciles de distinguir del conjunto de tipos MIME codificados para los cuales existen pruebas.

Google Chrome también tiende a enfatizar la compatibilidad hacia adelante, por lo que presumiblemente, ocurrirá un proceso similar.

Por lo tanto, una secuencia de comandos enviada con Content-Type: application/javascript no debe ser vulnerable a la detección de tipos, pero esto no significa que no se deben tomar las precauciones necesarias para asegurarse de que esto no suceda. Las personas pueden usar navegadores menos confiables o pueden ver un archivo en un contexto que no sea un navegador que no reconoce correctamente los tipos MIME.

Sería mejor usar siempre X-Content-Type-Options: nosniff ya que este caso es exactamente para lo que fue diseñado.

    
respondido por el Anonymous 03.01.2016 - 19:55
fuente
2
  

La pregunta es si alguna versión de cualquier navegador olerá un código de script sin procesar con el conjunto de encabezados Content-Type: text / javascript, dado que X-Content-Type-Options: nosniff no está establecido.

Para ejecutar el script dentro del navegador, no importará si el tipo es detectado o no. Si solo se le da el script al navegador, es decir, no está incrustado de alguna manera en el HTML, entonces el navegador no tiene un documento donde se pueda ejecutar el script. Eso significa que la secuencia de comandos se mostrará o descargará, pero no se ejecutará dentro del contexto de un documento HTML. Si usa Internet Explorer, también podría ofrecer el script para su ejecución, similar a otro contenido ejecutable. Algunas pruebas con IE11 muestran que no importa cuál es el tipo de contenido en este caso, ya sea porque los datos se mostrarán en línea (texto / plano, imágenes) o se ofrecerán para su descarga y tal vez se ejecuten. Si se ofrece la ejecución parece depender únicamente de la extensión del archivo y X-Content-Type-Options: nosniff parece no tener efecto en esta decisión.

Si el script está incrustado o se hace referencia a él desde un documento HTML, el tipo de contenido no importa en absoluto porque el navegador "sabe" lo que debe ser el contenido (es decir, Javascript) y generalmente ignorará el tipo de Contenido establecido por El servidor de todos modos. Por lo tanto, puede entregar con éxito un archivo Javascript con un tipo de contenido de texto / sin formato, application / octet-stream e incluso image / gif para la mayoría de los navegadores. Desde los navegadores que he comprobado hace un tiempo, solo las versiones más recientes de Chrome excluirán algunos tipos de contenido, es decir, ya no es posible incluir secuencias de comandos con un tipo de contenido de imagen / lo que sea en Chrome. Todavía funciona con otros navegadores.

    
respondido por el Steffen Ullrich 03.01.2016 - 21:11
fuente
1

Las versiones anteriores de IE lo tratarán, si lo incrustaste en una etiqueta de script, se procesará y ejecutará

    
respondido por el Yasser Gersy 09.07.2016 - 04:11
fuente

Lea otras preguntas en las etiquetas