
Le script est conçu pour détecter CVE-2024-23113, qui est une vulnérabilité de chaîne de format dans le service FGFM de FortiGate (protocole FortiGate vers FortiManager) fonctionnant sur le port TCP 541. La vulnérabilité se produit car un attaquant peut contrôler une chaîne de format, ce qui pourrait conduire à une exécution de code à distance (RCE) ou à d'autres comportements non intentionnels. Le service FGFM permet la communication entre les appareils FortiGate et FortiManager pour la gestion de la configuration, et une version non corrigée gère incorrectement les entrées, ce qui la rend susceptible à une exploitation par chaîne de format. Comment fonctionne le script
Configuration de la connexion réseau :
Le script établit d'abord une connexion SSL/TLS vers la cible sur le port 541.
Il utilise l'objet ssl.SSLContext avec la vérification des certificats désactivée pour établir la connexion, car l'appareil peut avoir des certificats auto-signés.
Construction de la charge utile :
Une fois connecté, le script fabrique une charge utile malveillante en utilisant une exploitation par chaîne de format (authip=%n). La directive %n indique au système d'écrire le nombre d'octets déjà émis dans une variable, ce qui peut potentiellement conduire à une corruption de la mémoire.
La charge utile fabriquée est envoyée à la cible via la connexion établie.
Logique de détection :
Le script vérifie ensuite le comportement de la cible en réponse à la charge utile.
Si la connexion est interrompue brusquement et qu'une alerte SSL est déclenchée, cela suggère que la cible est vulnérable car elle a déclenché les mécanismes de protection contre les vulnérabilités de chaîne de format (par exemple, _FORTIFY_SOURCE dans glibc).
Si la connexion reste ouverte, la cible est probablement corrigée.
Instructions d'utilisation
Exécuter le script :
Exécutez le script avec Python 3 en lançant :
sh
python check_vulnerability.py
Saisir le nom d'hôte / l'adresse IP :
Vous serez invité à saisir un nom d'hôte ou une adresse IP pour vérifier s'il est vulnérable.
Si vous souhaitez vous arrêter, tapez exit.
Sortie :
Si la cible est vulnérable, le script affichera :
[!] Warning: is vulnerable!
Si la cible est corrigée, il affichera :
[+] <hostname> appears to be patched.
Prérequis
Python 3 installé sur la machine exécutant le script.
Accès réseau à l'appareil cible, en s'assurant que le port 541 est ouvert.
Le service FGFM doit être en cours d'exécution sur l'appareil cible.