
El script está diseñado para detectar CVE-2024-23113, 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 la 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 maneja incorrectamente 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 potencialmente puede provocar 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:
A continuación, el script comprueba el comportamiento del objetivo en respuesta al payload.
Si la conexión se termina abruptamente y se genera una alerta SSL, esto 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:
Ejecute el script con Python 3 mediante:
sh
python check_vulnerability.py
Introduzca hostname/IP:
Se le pedirá que introduzca un nombre de host o una dirección IP para comprobar si es vulnerable.
Si desea detenerse, escriba exit.
Salida:
Si el objetivo es vulnerable, el script mostrará:
[!] Warning: is vulnerable!
Si el objetivo está parcheado, mostrará:
[+] <hostname> appears to be patched.
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.