Escenario de descarga de archivos reflejados

1

Estoy creando una aplicación web basada en Java que es intencionalmente vulnerable a la descarga de archivos reflejados (RDF). El Libro Blanco está aquí . Leo los requisitos de vulnerabilidad de descarga del archivo reflejado:

  • El usuario tiene control sobre el nombre del archivo (falta el nombre de archivo en el encabezado de disposición de contenido).
  • la aplicación utiliza los valores encontrados en la URL (u otros lugares controlados por el usuario) para crear el contenido del archivo. En otras palabras, algunos comentarios del usuario se "reflejan" en el contenido de la respuesta.
  • la respuesta se está descargando (en lugar de representarse en el navegador) y un archivo se 'crea sobre la marcha', es decir, mediante programación.

Tengo un servlet llamado FileDownload y no especifico el nombre de archivo en el encabezado de disposición de contenido:

   response.setHeader("Content-Disposition","attachment");

En una solicitud ordinaria ( http://localhost:8080/FileDownload ), obtengo un archivo llamado FileDownload como se esperaba (sin embargo, tiene una extensión .sql por razones que no entiendo)

El pdf dice,

  

Añadiendo una "/" al final de la parte de la ruta seguida de una deseada   nombre de archivo y la extensión es compatible con navegador cruzado.

pero no obtuve este comportamiento de inmediato, en su lugar no pudo encontrar ese recurso. Entonces, cambié mi web.xml desde

<url-pattern>/FileDownload</url-pattern>

a

<url-pattern>/FileDownload/*</url-pattern>

y que habilitó el comportamiento descrito anteriormente en la URL: http://localhost:8080/FileDownload/Setup.bat . Entonces, ¿el patrón url tiene que ser extra permisivo para que esto funcione?

El documento también afirma que todas las advertencias "Este tipo de archivo podrían dañar su computadora ..." se "descartan" si una de las siguientes cadenas aparece en el nombre del archivo: Instalar, Configurar, Actualizar, Desinstalar. No vi este comportamiento. ¿Se ha cambiado desde que se publicó el artículo?

El punto de RFD es abusar de la confianza de ciertos sitios y si puedo hacer que los archivos arbitrarios parezcan provenir de un sitio de confianza, puedo evitar ciertas advertencias. (¿Es mi navegador el que ya confía en ciertos sitios o es el usuario o ambos?)

Me sorprendió ver que los patrones de punto y coma, como

http://localhost:8080/FileDownload;/Install.bat

http://localhost:8080/FileDownload;/Install.bat;Install.bat 

funciona como se describe en el documento. Sin embargo, si puedo lograr el mismo resultado con http://localhost:8080/FileDownload/Install.bat , ¿en qué escenario necesitaría hacer el hack del punto y coma?

Para hacer que esto funcione, también tuve que configurar mi navegador para que descargue archivos automáticamente sin preguntarme dónde guardarlos.

    
pregunta mcgyver5 11.11.2014 - 20:45
fuente

1 respuesta

2
  

El punto de RFD es abusar de la confianza de ciertos sitios y si puedo hacer que los archivos arbitrarios parezcan provenir de un sitio de confianza, puedo evitar ciertas advertencias. (¿Es mi navegador el que ya confía en ciertos sitios o es el usuario o ambos?)

Creo que solo está pensado porque el usuario verá el archivo descargado y pensará "Oh, vino de www.google.com, así que debería estar seguro", y luego ejecutarlo. Pero podría estar equivocado.

  

Sin embargo, si puedo lograr el mismo resultado con http://localhost:8080/FileDownload/Install.bat , ¿en qué escenario necesitaría hacer el hack del punto y coma?

¿Usaste IE / Firefox? El documento indica en la sección 2.2.2 que el "truco" solo es necesario para Chrome / Opera. (Pero, una vez más, parece que lo resolvió sin usar un solo ";", que no se describió en el documento. Sin embargo, el documento sí indica "Por supuesto, el análisis de URL específico de la aplicación podría llevar a otros caracteres. aceptable como separadores en la parte de la ruta de la URL. ").

    
respondido por el user3653129 17.12.2014 - 00:39
fuente

Lea otras preguntas en las etiquetas