5 minutos de lectura
Esta vulnerabilidad ocurre en aplicaciones web donde existe la posibilidad de subir un archivo sin que sea comprobado por un sistema de seguridad que frene peligros potenciales.
Le permite a un atacante subir archivos con código (scripts tales como .php o .aspx) y ejecutarlos en el mismo servidor.
Para conocer más especificaciones de esta vulnerabilidad, puedes consultar su ficha en la CWE (Common Weakness Enumeration, un sistema que enumera y categoriza las debilidades y vulnerabilidades comunes en los software y hardware).
¿Cuáles son los riesgos de Arbitrary File Upload Vulnerability?
La principales consecuencias de esta vulnerabilidad son:
- Sobrecarga del sistema o la base de datos a través de la subida excesiva de archivos
- Denegación de servicio (causar la inaccesibilidad a un recurso o servicio)
- Ejecución remota de código sobre el servidor
De los mencionados, el último es uno de los ataques de mayor impacto, ya que el agente malicioso logra subir un script al servidor web para ejecutar comandos en él de manera remota. Esto significa nada más y nada menos que poner en riesgo la disponibilidad, integridad y/o confidencialidad de los datos.
¿Cómo funciona una Arbitrary File Upload Vulnerability?
Veamos un ejemplo de sistema vulnerable1:
- Dentro de una web nos encontramos un panel que nos muestra las imágenes subidas al servidor y la posibilidad de subir una nueva imagen.
- Al seleccionar “Add a new picture” obtenemos un pequeño panel que nos permite subir archivos desde nuestro sistema local. Este panel está pensado para que un usuario suba archivos de imágenes únicamente.
- Un atacante podría intentar subir un archivo de código malicioso .php al panel para ver si logra ejecutar comandos en el servidor remoto.
- Tu sitio web debería tener algún tipo de mitigación para evitar estos ataques, para que cuando un atacante intente subir un archivo, instantáneamente arrojemos un mensaje de “archivo no permitido” o “No PHP”. Tal como arroja esta página:
- Sin embargo, un atacante no se quedará con los brazos cruzados cuando vea que no se lo dejaste sencillo: pondrá a prueba los sistemas de defensa con múltiples técnicas para ver si alguna da en el clavo.
Veamos qué sucedería si un atacante, en vez de usar la extensión .php del archivo, usa la extensión .pHp (es decir, cambia la h minúscula por una H mayúscula).
Esta vez el sistema fue vulnerado porque su sistema de protección hizo una comprobación por lista negra. Es decir, en este caso, solo comprueba que la extensión del archivo no figure en la lista configurada previamente (una de ellas, el .php que no permitió en el primer caso).
Sin embargo, como la extensión .pHp no estaba en la lista, la aplicación permite subir el archivo y ahora el usuario puede ejecutar libremente el código del lado servidor.
¿Cómo se ve esta vulnerabilidad en el código?
Este es un ejemplo de cómo se vería el código de una web vulnerable:
En este caso, no existe ninguna restricción con la posibilidad de subir un archivo: el fragmento de código permite subir cualquier tipo de archivo, dejando un entorno sin protección.
En cambio, se puede mitigar el riesgo usando herramientas como en este otro fragmento.
Agregando estas líneas evitamos que el archivo a subir sea demasiado grande o esté vacío, y únicamente apruebe dos tipos de archivos (lista blanca).
Si bien, este agregado no resuelve todos los problemas, se puede decir que el código está mejor preparado que el caso anterior.
Remediación
En resúmen, para remediar esta vulnerabilidad debemos tener en cuenta los siguientes métodos:
- Siempre utilizar filtros de listas blancas (white list) para aceptar ciertas extensiones y nombres de archivo. Si es posible, renombrar los archivos al alojarlos.
- Se recomienda solo aceptar caracteres alfanuméricos y un único punto para la extensión.
- Limitar el tamaño mínimo y máximo del archivo subido para evitar ataques de denegación de servicio.
- El directorio donde se alojarán los archivos no debe tener permisos de ejecución.
Cómo puede ayudar Hackmetrix
Los casos en los que puede aparecer esta vulnerabilidad son diversos y, hasta la fecha, no existe una herramienta automatizada que permita detectarla.
Una vez que logres corregir los errores en el código, es recomendable solicitar ayuda externa para realizar pruebas de intrusión minuciosas y efectivas.
En Hackmetrix contamos con un equipo especializado que te ayudará a poder detectar estas fallas y prevenir que futuros agentes maliciosos se aprovechen de ellas.
Conclusión
La vulnerabilidad Arbitrary File Upload puede brindarle el control de tus sistemas a un agente malicioso y afectar su correcto funcionamiento.
Evitar estos riesgos es de suma importancia para una organización ya que podría poner en peligro los datos almacenados (propios y de clientes) y generar una brecha costosa para el negocio.
Por otro lado, para detectar esta vulnerabilidad se requiere del trabajo de una persona calificada que analice, evalúe e interprete la información, por este motivo, es recomendable realizar pruebas de intrusión periódicas para detectarlas de forma temprana.
De todas formas, ahora conoces los métodos de remediación que te ayudarán a resolver este tipo de errores y a tenerlos en cuenta en la escritura del código.
Referencias
https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload1
https://www.vulnhub.com/entry/pentester-lab-from-sql-injection-to-shell,80/