
Detectar com segurança se uma instância FortiGate SSL VPN é vulnerável a CVE-2023-27997 com base no tempo de resposta.
Detecte com segurança se uma instância do FortiGate SSL VPN é vulnerável ao CVE-2023-27997 com base no tempo de resposta. Veja o artigo completo no blog da Bishop Fox, incluindo uma explicação completa da metodologia por trás desta ferramenta.
O CVE-2023-27997 é um estouro de buffer baseado em heap no componente SSL VPN do FortiGate que foi demonstrado ser explorável para RCE pré-autenticação. Como se trata de um bug de corrupção de memória, podemos detectar versões vulneráveis sem travar o processo sslvpnd e desconectar usuários ativos.
Esta ferramenta enviará 800 requisições para o caminho da URL vulnerável. Metade das requisições terá um comprimento inválido e, portanto, serão rejeitadas por versões mais recentes do FortiGate; isso cria uma diferença de tempo mensurável (cerca de 250 microssegundos em nossos dispositivos durante testes) entre requisições com comprimentos válidos e inválidos, que podemos detectar usando um pouco de matemática.
Os campos de tamanho da requisição e comprimento dos dados são escolhidos especificamente para que, em dispositivos vulneráveis, a corrupção de memória afete apenas áreas do heap onde não há dados em uso. Isso garante que o processo SSL VPN não trave.
$ git clone https://github.com/BishopFox/CVE-2023-27997-check
$ cd CVE-2023-27997-check
$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install -r requirements.txt
Escaneie o SSL VPN em https://<IP>:<PORT>. O alvo pode retornar com status Vulnerable, Patched ou Unknown. O escaneamento geralmente é concluído em menos de 30 segundos — mas devido ao grande número de requisições enviadas, pode levar até 5 minutos em algumas circunstâncias.
$ python3 CVE-2023-27997-check.py <IP> <PORT>
No exemplo a seguir, example.com:10443 é vulnerável ao CVE-2023-27997.
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
Vulnerable
Observe que esta ferramenta depende de informações de tempo medidas pela internet, que estão sujeitas a ruído. A ferramenta avisará quando os resultados podem estar incorretos.
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Patched
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
WARNING: Low confidence results.
Unknown
Se você estiver vendo WARNING: Low confidence results, considere tentar reduzir o ruído da internet usando um VPS que esteja o mais geograficamente próximo possível do servidor alvo.
O uso desta ferramenta para atacar alvos sem consentimento mútuo prévio é ilegal. É responsabilidade do usuário final obedecer todas as leis locais, estaduais e federais aplicáveis. Os desenvolvedores não assumem nenhuma responsabilidade e não se responsabilizam por qualquer uso indevido ou dano causado por este programa.