¿Puede el Javascript malicioso en el archivo HTML local enviar archivos a Internet en Firefox / Chrome?

6
  1. Descargue example.html -file desde un sitio web aleatorio a mi computadora de escritorio
  2. Abra example.html -file desde el escritorio con Google Chrome
  3. Ahora Chrome ejecuta javascript desde example.html -archivo que busca en los archivos de la computadora desde el escritorio o los documentos -directorio y los envía al sitio web o servidor controlado por el atacante

¿Puedo buscar javascript a través de mis archivos desde el escritorio y enviarlos al atacante? ¿Es esto posible?

Si este escenario es posible, ¿cómo bloquear este ataque?

    
pregunta nptxzs 13.01.2018 - 00:19
fuente

2 respuestas

6
  

¿Puedo buscar javascript a través de mis archivos desde el escritorio y enviarlos al atacante?

Históricamente, sí , los navegadores han tratado el esquema file: como un origen único y el ataque que describiste hubiera sido factible.

Pero hoy, no, Chrome y Firefox aplican políticas del mismo origen que restringen el acceso entre archivos locales. (Sin embargo, no todos los navegadores todos hacen eso. Más notablemente, Microsoft Edge aún no restringe el acceso de lectura entre archivos locales, como lo ha detectado @dandavis).

Es decir, cuando abre un archivo HTML en file:///downloads/malicious.html en uno de estos navegadores, un script en ese documento no puede no buscar libremente en el sistema de archivos y enviar archivos confidenciales a casa. Sin embargo, la forma exacta en que se implementan los SOP en el esquema file: varía entre los navegadores y no está muy bien documentado, y no parece haber un estándar establecido para ello.

Mozilla tiene algunos detalles (potencialmente desactualizados) documentados aquí :

  

A partir de Gecko 1.9 [el motor del navegador de Mozilla], los archivos pueden leer solo otros archivos. Específicamente, un archivo puede leer otro archivo solo si el directorio principal del archivo de origen es un directorio ancestral del archivo de destino . Sin embargo, los directorios no se pueden cargar de esta manera.

     

Por ejemplo, si tiene un archivo foo.html que accede a otro archivo bar.html y ha navegado hasta él desde el archivo index.html , la carga solo se realizará si bar.html está en el mismo directorio que index.html o en un directorio contenido dentro del mismo directorio que index.html .

No pude encontrar ninguna documentación relevante para Chrome, pero el acceso entre archivos parece estar completamente bloqueado. Por ejemplo, Chrome no me permitió emitir una solicitud de origen cruzado para un URI de file: :

  

Error al cargar file:///tmp/malicious.html : las solicitudes de origen cruzado solo se admiten para esquemas de protocolo: http , data , chrome , chrome-extension , https .

Incluso al intentar que un documento file: accediera al DOM de un iframe con el mismo URI, falló:

  

DOMException no capturado: bloqueó un cuadro con origen "nulo" para que no acceda a un cuadro de origen cruzado.

Dicho esto, abrir archivos HTML no confiables localmente es aún más peligroso que cargarlos desde un sitio web. Aunque es posible que no puedan leer todos los archivos locales, aún podrían emplear ataques como XSSI ( inclusión de guiones entre sitios ) para hacer que otros archivos locales puedan filtrar información confidencial.

    
respondido por el Arminius 13.01.2018 - 01:09
fuente
1

No, esto no es posible, y con buena razón.

La ejecución de JavaScript sin privilegios en un navegador no tiene API para buscar el sistema de archivos. Además, las API como AJAX y el acceso a datos de lienzo no funcionarán para los archivos en el sistema de archivos, lo que evitará la lectura de archivos en rutas conocidas. Algunos navegadores van más allá, y ni siquiera cargarán indirectamente nada (HTML, imágenes, CSS, etc.) desde un directorio más alto que el archivo en sí.

Algunos navegadores pueden ofrecer una API de sistema de archivos para el contenido de privilegiado en las extensiones de un navegador (Firefox solía hacerlo), pero eso no sería accesible para el contenido web.

La única forma en que este podría ser posible es si el código tuviera una vulnerabilidad de navegador que se rompiera en el tiempo de ejecución de JavaScript y en cualquier espacio de arena del sistema operativo utilizado por el navegador. Sin embargo, tal vulnerabilidad probablemente funcionaría igual de bien sin descargarlo primero.

    
respondido por el Alexander O'Mara 13.01.2018 - 01:09
fuente

Lea otras preguntas en las etiquetas