¿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.