
Script Python per rilevare CVE-2024-23113, una vulnerabilità di formato stringa nel servizio FGFM di FortiGate su TCP/541, utilizzando connessione SSL e payload appositamente creato per innescare la corruzione della memoria.
Lo script è progettato per rilevare CVE-2024-23113, che è una vulnerabilità di formato stringa nel servizio FGFM di FortiGate (protocollo FortiGate-to-FortiManager) in esecuzione sulla porta TCP 541. La vulnerabilità si verifica perché un attaccante può controllare una stringa di formato, che potrebbe portare a Remote Code Execution (RCE) o altri comportamenti indesiderati. Il servizio FGFM consente la comunicazione tra dispositivi FortiGate e FortiManager per la gestione della configurazione, e una versione non patchata ha una gestione impropria dell'input, rendendola suscettibile a un exploit di formato stringa.
Configurazione della connessione di rete:
Lo script configura prima una connessione SSL/TLS al target sulla porta 541.
Utilizza l'oggetto `ssl.SSLContext` con verifica del certificato disabilitata per stabilire la connessione, poiché il dispositivo potrebbe avere certificati auto-firmati.
Costruzione del payload:
Una volta connesso, lo script crea un payload malevolo utilizzando un exploit di formato stringa (`authip=%n`). La direttiva `%n` dice al sistema di scrivere il numero di byte finora emessi in una variabile, che potrebbe portare a corruzione della memoria.
Il payload creato viene inviato al target tramite la connessione stabilita.
Logica di rilevamento:
Lo script quindi controlla il comportamento del target in risposta al payload.
Se la connessione viene bruscamente terminata e viene sollevato un alert SSL, suggerisce che il target è vulnerabile perché ha attivato i meccanismi di protezione della vulnerabilità di formato stringa (ad esempio `_FORTIFY_SOURCE` in glibc).
Se la connessione rimane aperta, il target è probabilmente patchato.
Esegui lo script:
Esegui lo script con Python 3 eseguendo:
sh
python check_vulnerability.py
Inserisci Hostname/IP:
Ti verrà chiesto di inserire un hostname o un indirizzo IP da verificare se è vulnerabile.
Se vuoi fermarti, digita exit.
Output:
Se il target è vulnerabile, lo script restituirà:
[!] Warning: <hostname> is vulnerable!
Se il target è patchato, restituirà:
[+] <hostname> appears to be patched.
Python 3 installato sulla macchina che esegue lo script.
Accesso di rete al dispositivo target, assicurandosi che la porta 541 sia aperta.
Il servizio FGFM deve essere in esecuzione sul dispositivo target.