Qué tener en cuenta al validar la carga de archivos

0

Uno de los mecanismos de seguridad clave para el software de aplicación es la validación de entrada, que puede proteger la integridad del sistema y frustrar los ataques comunes de inyección y denegación de servicio.

La mayoría de Internet puede acordar que las declaraciones preparadas pueden validarse contra SQLi, y las bibliotecas de desinfección (que no son vulnerables) emparejadas con la codificación de salida pueden mitigar XSS. Sin embargo, encontré que las recomendaciones para la validación de cargas de archivos a menudo están en desuso y / o son ambiguas.

Para proporcionar un contexto para nuestro sistema:

  • Se ejecuta en IIS 10 (Windows Server 2016), que aloja una aplicación .NET.
  • La aplicación tiene un punto final que está contactando a un servicio externo, desde el cual recibe imágenes.

Para los controles de protección, tenemos HTTPS autenticados mutuamente (basados en una configuración reforzada de TLS 1.2) y tenemos una lista blanca de direcciones IP permitidas para nuestro contacto para el punto final (redundante con la verificación de certificados, pero nuestro objetivo es la defensa) a fondo). Ahora, cuando se trata de la carga del archivo, actualmente estamos examinando las siguientes validaciones:

  • Lista blanca de números mágicos: actualmente tenemos la comprobación de números mágicos, y no estamos seguros de cuán fácil es falsificar este valor. ¿Agregaría validaciones para extensiones o MIME agregaría algo a este paso?
  • Verificación del tamaño del archivo y de la longitud del nombre del archivo: limitamos el tamaño de estos datos para evitar DoS.
  • Independientemente del nombre de la imagen original, se le cambia el nombre siguiendo la convención interna del sistema, en teoría para evitar ataques de inyección a través del nombre.
  • La imagen es escaneada por un antivirus antes de cualquier otra manipulación.

¿A nuestra cadena de validación le faltan pasos importantes? Ya que estamos trabajando con imágenes, he oído hablar de volver a codificarlas para eliminar ataques, pero no he podido encontrar ningún detalle sobre este tema.

    
pregunta Nikola Luburić 19.12.2018 - 09:52
fuente

1 respuesta

0

Creo que no te estás perdiendo algo y, en mi opinión, no hay forma de testificar que una imagen está 100% limpia a menos que la analices a mano, diría que agregue la validación MIME (en el lado del cliente y del servidor ) es un paso que hay que hacer antes de validar contra el número mágico, esto eliminará algunos scriptd para niños :)

Ahora, si realmente desea reducir su superficie de ataque, primero puede volver a codificar la imagen en un formato simple / pobre / trivial , en un entorno de espacio aislado con un privilegio mínimo y sin acceso a llamadas innecesarias. Una vez que obtenga el archivo recodificado, puede volver a codificarlo a un formato más común (png / jpeg ..) En esta etapa, puede confiar en la entrada ya que proviene de su sistema, y usar stream o quizás memorystream para convertir su imagen. (¡Intenta atraparlo todo!)

    
respondido por el Soufiane Tahiri 19.12.2018 - 11:32
fuente

Lea otras preguntas en las etiquetas