
Script em Python para detectar CVE-2024-23113, uma vulnerabilidade de string de formato no serviço FGFM do FortiGate na porta TCP/541, usando conexão SSL e payload manipulado para desencadear corrupção de memória.
O script foi projetado para detectar a CVE-2024-23113, que é uma vulnerabilidade de string de formato no serviço FGFM do FortiGate (protocolo FortiGate para FortiManager) executado na porta TCP 541. A vulnerabilidade ocorre porque um atacante pode controlar uma string de formato, o que pode levar à Execução Remota de Código (RCE) ou outros comportamentos indesejados. O serviço FGFM permite a comunicação entre dispositivos FortiGate e o FortiManager para gerenciamento de configuração, e uma versão não corrigida possui tratamento inadequado da entrada, tornando-a suscetível a uma exploração de string de formato.
Configuração da Conexão de Rede:
O script primeiro estabelece uma conexão SSL/TLS com o destino na porta 541.
Ele utiliza o objeto ssl.SSLContext com a verificação de certificado desabilitada para estabelecer a conexão, pois o dispositivo pode ter certificados autoassinados.
Construção do Payload:
Uma vez conectado, o script cria um payload malicioso usando uma exploração de string de formato (authip=%n). A diretiva %n instrui o sistema a gravar o número de bytes enviados até o momento em uma variável, o que pode potencialmente levar à corrupção de memória.
O payload criado é enviado ao destino através da conexão estabelecida.
Lógica de Detecção:
O script então verifica o comportamento do destino em resposta ao payload.
Se a conexão for abruptamente encerrada e um alerta SSL for gerado, isso sugere que o destino é vulnerável, pois acionou os mecanismos de proteção contra vulnerabilidade de string de formato (por exemplo, _FORTIFY_SOURCE no glibc).
Se a conexão permanecer aberta, o destino provavelmente está corrigido.
Execute o Script:
Execute o script com Python 3 executando:
sh
python check_vulnerability.py
Insira o Hostname/IP:
Será solicitado que você insira um hostname ou endereço IP para verificar se é vulnerável.
Se desejar parar, digite exit.
Saída:
Se o destino for vulnerável, o script exibirá:
[!] Aviso: é vulnerável!
Se o destino estiver corrigido, exibirá:
[+] <hostname> parece estar corrigido.
Python 3 instalado na máquina que executará o script.
Acesso de rede ao dispositivo de destino, garantindo que a porta 541 esteja aberta.
O serviço FGFM deve estar em execução no dispositivo de destino.