Problemas de seguridad con la carga de una imagen

3

Tenemos que implementar una función de carga de imágenes de perfil de usuario en nuestra aplicación web. El usuario puede subir su imagen de perfil.

Después de cargar la imagen, se guardará en una base de datos DB2 y se procesará solo para el usuario que subió la imagen después del inicio de sesión.

La pila de tecnología es J2EE, AIX, DB2.

Nuestro departamento de seguridad recibió una extraña queja de que esta función debe eliminarse porque el usuario puede cargar un virus y esto infectará el servidor.

No entiendo cómo un usuario cargará el virus. Al final del día, el virus es un programa que debe ejecutarse, ¿no?

Lo segundo: la plataforma es UNIX-AIX. Incluso si un usuario subió un malware, el servidor no se infectará, ¿no?

Lo último: existe la posibilidad de que el usuario se infecte con XSS en el caso de que se haya cargado un archivo JS en lugar de una imagen. Pero, puedo ver que, en nuestro caso, esto no es válido porque solo el usuario puede cargar la imagen y se procesará solo para el usuario.

¿Mi entendimiento es correcto?

    
pregunta Jimmy 18.04.2016 - 23:43
fuente

2 respuestas

2

Como mencionó Schroeder, es posible que haya descuidado algunos detalles aquí, lo que pone nervioso a su grupo de seguridad.

Hay varias clases de ataques que pueden preocupar al grupo de seguridad. Solo unos pocos, por ejemplo, que les pueden preocupar:

  • Carga de archivos: no menciona cómo se maneja esto. Algunas preguntas a considerar: ¿Hay suficiente espacio temporal en el disco, qué sucede con el archivo temporal después de la carga, puede el usuario especificar el nombre del archivo, cómo se determina y aplica el tamaño del archivo? Cualquiera y todos estos podrían ser vectores para un atacante. Lo más obvio sería decirle al servidor que el archivo es de un solo tamaño, hacer que el servidor asigne tanta memoria, luego enviar algo más grande y corromper la memoria del servidor, posiblemente obteniendo la ejecución del código.
  • Almacenar en la base de datos: ¿puede el usuario especificar un nombre de archivo o su nombre de usuario se agregó a la tabla de la base de datos y, de ser así, cómo se ve el SQL para almacenar esos valores? ¿Está limpiando la entrada, o está utilizando procedimientos almacenados, o el código hace algo como (pseudo-código) "db.store ($ picture_file, $ name, $ table_users)"? En el último caso, eso es muy malo y es probable que lo exponga a inyección de SQL . No es estrictamente un "virus", sino algo que le importaría a su departamento de seguridad.
  • Autorización de carga: ¿podría alguien más cargar un archivo en nombre de un usuario diferente (por ejemplo, podría adivinar un número de usuario en un parámetro de URL)? O bien, usted menciona XSS. ¿Qué sucede si el usuario es víctima de algún otro sitio a través de XSS para cargar una carga útil en su sitio?
  • Resistencia del sistema operativo AIX: ningún sistema operativo o versión específica de Unix es 100% seguro. Supongamos que el atacante lo intenta a usted (oa su usuario) y que ha hecho su tarea y ha creado un código de shell específico para AIX.

Básicamente, todo se reduce a que no tenemos suficientes detalles para realizar una auditoría de seguridad exhaustiva de la función, pero su equipo de seguridad sí. Los detalles importan y la lista de la pila de tecnología proporcionada no nos dice nada sobre el perfil de vulnerabilidad de su aplicación específica.

Un puede realizar una función de "carga de archivo de imagen" razonablemente segura para un servicio, pero nada en su publicación inicial sugiere paranoia excesiva por parte de su grupo de seguridad.

Hable con ellos, descubra específicamente lo que no les gusta de la función, y trabaje con ellos para proporcionar la funcionalidad que desea de una manera aceptable para ellos.

    
respondido por el JesseM 19.04.2016 - 01:35
fuente
1

Primero: tienes razón en que la imagen debería procesarse y que el servidor solo debe almacenar y suministrar el archivo al cliente que lo solicita (normalmente no es el servidor el que lo procesa). Pero, no sé cómo su sistema maneja las subidas.

Segundo: ¿qué sucede si su servidor procesa las imágenes cargadas y alguien carga un virus AIX? Ningún sistema operativo es perfectamente resistente al malware.

Por último: si su sistema hace lo que se supone que debe hacer, entonces, sí, un script JS solo afectaría a la cuenta del usuario que lo subió. La suposición aquí es que es el mismo usuario que ve la imagen que el que la carga. Considere una cuenta comprometida: un atacante podría cargar un script JS y obtener un acceso aún más profundo a la máquina del usuario válido. Esto podría resolverse fácilmente inspeccionando los encabezados de los archivos cargados para asegurarse de que se trata de una imagen y no de un script.

De los pocos detalles que proporciona, estoy de acuerdo en que es una queja extraña de su personal de seguridad, pero es posible que haya omitido un detalle importante y no todos los profesionales de la seguridad son perfectos. Está haciendo lo correcto al preguntar, pero no olvide plantear estas preguntas directamente con ellos.

    
respondido por el schroeder 19.04.2016 - 01:08
fuente

Lea otras preguntas en las etiquetas