基于响应时序安全检测 FortiGate SSL VPN 实例是否存在 CVE-2023-27997 漏洞。查看 Bishop Fox 博客上的完整文章,其中包含本工具背后方法的完整讲解。
CVE-2023-27997 是 FortiGate SSL VPN 组件中的一个基于堆的缓冲区溢出漏洞,已被证明可用于触发预认证 RCE。由于这是一个内存损坏错误,我们需要能够在不用崩溃 sslvpnd 进程且不断开活动用户连接的情况下检测到存在漏洞的版本。
该工具将向存在漏洞的 URL 路径发送 800 个请求。其中一半请求将具有无效长度,因此会被较新的 FortiGate 版本拒绝;这会在有效长度和无效长度的请求之间产生可测量的时间差(在我们测试设备上约为 250 微秒),我们可以通过一些数学计算来检测到这一差异。
请求大小和数据长度字段经过特意选择,以便在易受攻击的设备上,内存损坏只会影响堆中没有正在使用数据的区域。这保证了 SSL VPN 进程不会崩溃。
$ 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
扫描 https://<IP>:<PORT> 的 SSL VPN。目标可能会返回状态 Vulnerable、Patched 或 Unknown。扫描通常在 30 秒内完成,但由于发送大量请求,某些情况下可能需要长达 5 分钟。
$ python3 CVE-2023-27997-check.py <IP> <PORT>
在以下示例中,example.com:10443 存在 CVE-2023-27997 漏洞。
$ python3 CVE-2023-27997-check.py example.com 10443
Checking https://example.com:10443
Vulnerable
请注意,此工具依赖于通过互联网测量的时序信息,而互联网存在噪声。当结果可能错误时,工具会发出警告。
$ 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
如果您看到 WARNING: Low confidence results,请考虑使用地理位置尽可能靠近目标服务器的 VPS 来减少互联网噪声。
未经事先双方同意使用此工具攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,也不对由本程序引起的任何误用或损害负责。