Carga de archivos no restringida - firma de archivo compartida

1

Una aplicación java en la que estoy trabajando tiene un componente de carga de archivos, y quiero validar que solo se permiten ciertos tipos de archivos. Me doy cuenta de que la verificación de la extensión del archivo por sí sola no es lo suficientemente confiable, por lo que comencé a validar las firmas hexadecimales de los archivos cargados. He estado usando esto como referencia: enlace

Entonces, esta aplicación esperará algunos archivos OOXML, pero parece que cada uno de estos (docx, pptx, xlsx) tiene la misma firma hexadecimal (50 4B 03 04 14 00 06 00), Sin subencabezado para diferenciarlos.

¿Existe una buena manera de diferenciarlos o, si lo implementara, si la extensión del archivo es un archivo OOXML que aceptamos y la firma hexadecimal compartida es correcta, permítale pasar? ¿Hay algún problema de seguridad adicional por la implementación de este último?

    
pregunta Frostbyte 20.10.2017 - 17:56
fuente

1 respuesta

1

Todos los formatos de archivo OOXML son en realidad archivos zip con contenidos específicos. Eso hace que separarlos sea un poco complicado, a menos que esté preparado para abrirlos y examinar los contenidos.

Si se trata de un problema, depende de lo que esté haciendo con los archivos. Si no los almacena para descargarlos posteriormente y si implementa una buena separación entre las cargas de usuario y los archivos que ejecuta el servidor, es posible que no importe. Si está utilizando un servidor que acepta archivos .jar, y la carpeta de carga se considera ejecutable por el software del servidor, podría ser un gran problema: los archivos .jar también son archivos zip con contenido específico, por lo que puede permitir que los usuarios carguen su propio código del lado del servidor si no tienes cuidado.

Igualmente, abrir los archivos zip para verificar el contenido puede ser peligroso: por ejemplo, podrían expandirse en archivos grandes que llenan el almacenamiento del sistema. Sin embargo, si ya está extrayendo datos de los archivos, es posible que tenga protecciones contra este tipo de archivos maliciosos, por lo que es posible que no cause problemas.

Personalmente, me concentraría en garantizar que la función de carga no permita que se cargue ningún código ejecutable del servidor, ya sea colocando las cargas de archivos en un directorio que no permita la ejecución de los contenidos, haciendo cumplir los extensiones de archivo permitidas tanto para la carga como para la ejecución (¡asegurándose de que sean diferentes!), y potencialmente ejecutar algún tipo de AV en las subidas, asegurando que no sea vulnerable a los archivos zip creados de manera malintencionada.     

respondido por el Matthew 20.10.2017 - 18:17
fuente

Lea otras preguntas en las etiquetas