¿Está sufriendo un ataque? Solicite respuesta a incidentes

info@angelforce.eu
Seguridad web

Cómo diseñar y probar cargas de archivos seguras

Lista de controles para funciones de carga de archivos, basada en la hoja de referencia de OWASP, con una tabla de pruebas para cada endpoint de carga.

También en:EnglishTürkçeDeutschFrançaisItalianoPolskiNederlandsEesti

Ilustración: Cómo diseñar y probar cargas de archivos seguras

Una función de carga de archivos segura depende de varios controles aplicados conjuntamente, y la OWASP File Upload Cheat Sheet los enumera. Este artículo repasa esa lista, señala los puntos que es fácil pasar por alto y la convierte en pruebas que puede ejecutar contra cada endpoint de carga.

Frente a qué se defiende

La hoja de referencia agrupa las amenazas bajo el concepto de "archivos maliciosos". La primera es un ataque contra el software que gestiona el archivo. Un atacante entrega un archivo que explota una vulnerabilidad en el parser o en el módulo de procesamiento, y la hoja de referencia cita como ejemplos el exploit ImageTrick y XXE.

La segunda es el phishing. La hoja de referencia utiliza como ejemplo un formulario de empleo, lo que significa que la carga se convierte en un medio para poner un archivo hostil ante las personas que lo abren.

La tercera es la disponibilidad. Las ZIP bombs, las XML bombs (el ataque billion laughs) y, sencillamente, los archivos enormes pueden llenar el almacenamiento del servidor y dañar su disponibilidad.

Valide antes de aceptar

La hoja de referencia establece una secuencia: aplicar validación de entrada antes de validar la extensión. A continuación se trabaja a partir de una lista de permitidos (allowlist).

  • Enumere las extensiones permitidas. Admita únicamente las seguras que requiera la función de negocio. Un formulario de foto de perfil no tiene motivo para aceptar nada más que unos pocos tipos de imagen.
  • Valide el tipo de archivo. No confíe en el Content-Type declarado, porque puede falsificarse. Valide el tipo de archivo y su firma antes de aceptar la carga.
  • Fije un límite de longitud del nombre de archivo y restrinja los caracteres permitidos si es posible.
  • Fije un límite de tamaño de archivo.

Si un archivo no supera cualquiera de estas comprobaciones, rechácelo.

Cuide el nombre y la ubicación

La hoja de referencia indica que se cambie el nombre de archivo proporcionado por el usuario por uno generado por la aplicación. Hágalo en todas las cargas, sea cual sea el tipo de archivo.

El lugar donde se almacena el archivo importa tanto como el archivo en sí. Almacene las cargas en un servidor distinto si le es posible. Si no lo es, guárdelas fuera del webroot.

Cuando los archivos deban ser accesibles públicamente, utilice un handler dentro de la aplicación que asocie un identificador con un archivo (someid con file.ext) en lugar de exponer la ruta de almacenamiento.

Hay otros dos puntos de la lista que se olvidan con facilidad:

  • Solo los usuarios autorizados deben poder cargar archivos.
  • Proteja la carga frente a ataques CSRF.

Analice y procese lo que conserva

La validación comprueba que un archivo tiene el aspecto correcto. La hoja de referencia añade un paso más: pasar el archivo por un motor antivirus o un sandbox, si hay uno disponible, para validar que no contiene datos maliciosos.

Para los tipos de documento aplicables, como PDF y DOCX, considere CDR (Content Disarm & Reconstruct) como un paso de procesamiento adicional.

La hoja de referencia señala también que todas las bibliotecas utilizadas deben estar configuradas de forma segura y mantenerse actualizadas. Dado que las vulnerabilidades de los parsers son una de las amenazas citadas, este es el punto que conviene asignar a una persona concreta con una fecha de revisión.

Pruebe cada endpoint

La hoja de referencia enumera controles, no casos de prueba. Cada fila de la tabla siguiente es una derivación propia a partir de su lista de comprobación, y la tercera columna indica de qué punto procede. Ejecute las pruebas contra todos los endpoints de carga, incluidas las herramientas de administración y los añadidos para un único cliente.

PruebaCómo es un resultado satisfactorioBase
Cargar un archivo de script renombrado con una extensión permitidaRechazado tras la validación del tipo de archivoDerivada: validar el tipo de archivo
Enviar un archivo no permitido con un Content-Type permitidoRechazado igualmenteDerivada: no confiar en la cabecera Content-Type
Enviar un nombre de archivo muy largoRechazado, o sustituido por un nombre generadoDerivada: límite de longitud del nombre, nombres generados
Cargar un archivo que supera el límite de tamañoDenegadoDerivada: límite de tamaño de archivo
Solicitar el archivo almacenado adivinando su rutaNo accesible salvo a través del handlerDerivada: ubicación de almacenamiento, handler de mapeo
Cargar sin sesión, o sin token CSRFDenegadoDerivada: usuarios autorizados, protección CSRF
Cargar una ZIP bomb o una XML bomb en un entorno de pruebasEl servicio sigue disponibleDerivada: amenaza a la disponibilidad

Como referencia más amplia, la OWASP Web Security Testing Guide se describe a sí misma como el recurso de pruebas de ciberseguridad por excelencia para desarrolladores de aplicaciones web y profesionales de la seguridad. El OWASP Application Security Verification Standard ofrece requisitos numerados con los que verificar. Si cita alguno en un ticket o informe, incluya la versión, por ejemplo v5.0.0-1.2.5, porque los identificadores pueden cambiar entre versiones del estándar.

Por dónde empezar

  1. Haga una lista de todos los endpoints que aceptan un archivo, incluidas las herramientas de administración, las funciones de importación y los plugins antiguos.
  2. Para cada uno, defina las extensiones permitidas, el tamaño máximo de archivo y la longitud máxima del nombre, y aplique la validación de entrada antes de la comprobación de la extensión.
  3. Sustituya los nombres de archivo proporcionados por el usuario por nombres generados. Traslade el almacenamiento a un servidor distinto o fuera del webroot, y sirva los archivos públicos mediante un handler que asocie ID con nombres de archivo.
  4. Añada validación del tipo y la firma del archivo, un paso de antivirus o sandbox y CDR para los tipos de documento que acepte. Compruebe que las bibliotecas de parsing están actualizadas y configuradas de forma segura.
  5. Convierta la tabla de pruebas en comprobaciones automatizadas y ejecútelas antes de cada versión. Si desea una revisión externa del resultado, nuestro servicio de pruebas de penetración puede probar los endpoints, y nuestro apoyo al desarrollo de software seguro puede ayudarle si la función aún está en fase de diseño. La guía de OWASP sobre carga de archivos sirve como lista de comprobación para la revisión en cualquiera de los dos casos.

Cómo podemos ayudarle

Pruebas de penetración

Atacamos sus redes, sus aplicaciones y a su personal como lo haría un adversario real, y le mostramos cómo cerrar cada brecha.

Contacte con nosotros
Equipo de AngelForce

Escrito por el equipo de AngelForce: consultores de seguridad con certificaciones CEH, LPT Master y CISA que prueban, supervisan y protegen los sistemas de organizaciones de toda Europa y Türkiye.

Redactado con ayuda de IA a partir de las fuentes públicas que se indican más abajo y revisado por el equipo de AngelForce antes de su publicación.

Fuentes

  1. cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
  2. owasp.org/projects/asvs
  3. owasp.org/projects/web-security-testing-guide

Artículos sobre Seguridad web

Cuéntenos qué necesita proteger

Describa su entorno y lo que quiere conseguir. Le responderemos por correo electrónico.

Contacte con nosotros
info@angelforce.eu

AngelForce OÜ · Tallinn, Estonia