
El script está diseñado para detectar CVE-2024-23113, que es una vulnerabilidad de cadena de formato en el servicio FGFM de FortiGate (protocolo FortiGate a FortiManager) que se ejecuta en el puerto TCP 541. La vulnerabilidad se produce porque un atacante puede controlar una cadena de formato, lo que podría provocar una ejecución remota de código (RCE) u otros comportamientos no deseados. El servicio FGFM permite la comunicación entre los dispositivos FortiGate y FortiManager para la gestión de configuración, y una versión sin parchear tiene un manejo incorrecto de la entrada, lo que la hace susceptible a una explotación de cadena de formato. Cómo funciona el script
Configuración de la conexión de red:
El script primero establece una conexión SSL/TLS con el objetivo en el puerto 541.
Utiliza el objeto ssl.SSLContext con la verificación de certificados deshabilitada para establecer la conexión, ya que el dispositivo podría tener certificados autofirmados.
Construcción del payload:
Una vez conectado, el script crea un payload malicioso utilizando una explotación de cadena de formato (authip=%n). La directiva %n le indica al sistema que escriba el número de bytes emitidos hasta el momento en una variable, lo que puede potencialmente conducir a la corrupción de memoria.
El payload creado se envía al objetivo a través de la conexión establecida.
Lógica de detección:
El script luego verifica el comportamiento del objetivo en respuesta al payload.
Si la conexión se termina abruptamente y se genera una alerta SSL, sugiere que el objetivo es vulnerable porque activó los mecanismos de protección contra vulnerabilidades de cadena de formato (por ejemplo, _FORTIFY_SOURCE en glibc).
Si la conexión permanece abierta, es probable que el objetivo esté parcheado.
Instrucciones de uso
Ejecutar el script:
Ejecuta el script con Python 3 ejecutando:
sh
python check_vulnerability.py
Introduce el hostname/IP:
Se te pedirá que introduzcas un hostname o una dirección IP para comprobar si es vulnerable.
Si quieres detenerte, escribe exit.
Salida:
Si el objetivo es vulnerable, el script mostrará:
[!] Advertencia: es vulnerable!
Si el objetivo está parcheado, mostrará:
[+] <hostname> parece estar parcheado.
Requisitos
Python 3 instalado en la máquina que ejecuta el script.
Acceso de red al dispositivo objetivo, asegurando que el puerto 541 esté abierto.
El servicio FGFM debe estar ejecutándose en el dispositivo objetivo.