
CVE-2024-23113을 탐지하는 Python 스크립트로, FortiGate FGFM 서비스(TCP/541)의 포맷 문자열 취약점을 SSL 연결과 조작된 페이로드를 사용하여 메모리 손상을 유발합니다.
이 스크립트는 FortiGate FGFM 서비스(FortiGate에서 FortiManager로의 프로토콜)의 TCP 포트 541에서 실행되는 포맷 문자열 취약점인 CVE-2024-23113을 탐지하도록 설계되었습니다. 이 취약점은 공격자가 포맷 문자열을 제어할 수 있기 때문에 발생하며, 이는 원격 코드 실행(RCE) 또는 기타 의도하지 않은 동작으로 이어질 수 있습니다. FGFM 서비스는 구성 관리를 위해 FortiGate 장치와 FortiManager 간의 통신을 허용하며, 패치되지 않은 버전은 입력을 부적절하게 처리하여 포맷 문자열 악용에 취약합니다. 스크립트 작동 방식
네트워크 연결 설정:
스크립트는 먼저 포트 541에서 대상에 대한 SSL/TLS 연결을 설정합니다.
장치가 자체 서명된 인증서를 가질 수 있으므로 인증서 검증을 비활성화한 ssl.SSLContext 객체를 사용하여 연결을 설정합니다.
페이로드 구성:
연결되면 스크립트는 포맷 문자열 악용(authip=%n)을 사용하여 악성 페이로드를 제작합니다.
%n 지시어는 시스템에 지금까지 출력된 바이트 수를 변수에 쓰도록 지시하며, 이는 잠재적으로 메모리 손상으로 이어질 수 있습니다.
제작된 페이로드는 설정된 연결을 통해 대상으로 전송됩니다.
탐지 로직:
그런 다음 스크립트는 페이로드에 대한 대상의 동작을 확인합니다.
연결이 갑자기 종료되고 SSL 경고가 발생하면, 이는 포맷 문자열 취약점 보호 메커니즘(예: glibc의 _FORTIFY_SOURCE)을 트리거했기 때문에 대상이 취약함을 나타냅니다.
연결이 열린 상태로 유지되면 대상이 패치된 것으로 간주됩니다.
사용 방법
스크립트 실행:
Python 3로 다음 명령을 실행하여 스크립트를 실행하세요:
sh
python check_vulnerability.py
호스트명/IP 입력:
취약한지 확인할 호스트명 또는 IP 주소를 입력하라는 메시지가 표시됩니다.
중지하려면 exit를 입력하세요.
출력:
대상이 취약한 경우 스크립트는 다음을 출력합니다:
[!] Warning: is vulnerable!
대상이 패치된 경우 다음을 출력합니다:
[+] <hostname> appears to be patched.
요구 사항
스크립트를 실행하는 시스템에 Python 3가 설치되어 있어야 합니다.
대상 장치에 대한 네트워크 접근이 가능해야 하며, 포트 541이 열려 있어야 합니다.
대상 장치에서 FGFM 서비스가 실행 중이어야 합니다.