
MDT의 SCN-IP100.03 및 SCN-IP000.03 펌웨어 v3.0.3에 있는 DoS 취약점 CVE-2021-37740에 대한 PoC입니다. 이 버그는 펌웨어 v3.0.4에서 수정되었습니다.
CVE-2021-37740은 MDT의 KNXnet/IP Secure 라우터 SCN-IP100.03 및 인터페이스 SCN-IP000.03의 펌웨어 v3.0.3에 영향을 미치는 서비스 거부(DoS) 취약점입니다. 특수하게 조작된 KNXnet/IP Secure 프레임을 보내면 장치가 추가 요청에 응답하지 않게 되어 정상 작동을 복구하려면 재부팅이 필요합니다. 이 저장소는 버그를 트리거할 수 있는 방법을 보여주는 개념 증명을 포함하며, 이는 원래 조정된 취약점 공개를 위해 개발되었습니다.
공격자는 대상 장치와 TCP 연결을 설정한 후, 수정된 전체 길이 필드(값 0x0259 이상)를 포함하는 SESSION_REQUEST 프레임을 전송하여 취약점을 악용할 수 있습니다. 취약점의 영향을 받는 장치는 모든 연결에서 KNXnet/IP Secure 프레임에 더 이상 응답하지 않습니다. SESSION_REQUEST는 ISO 22510:2019에 명시된 대로 KNXnet/IP Secure 유니캐스트 프로토콜의 핸드셰이크 중에 전송되는 첫 번째 프레임입니다. 고정 길이는 46바이트여야 하며, 표준은 길이가 다른 프레임은 폐기하도록 요구합니다.
이 저장소에 제공된 스크립트를 실행하려면 Python 3가 필요합니다. healthcheck.py는 장치가 여전히 응답하는지 테스트하기 위한 것입니다. 대상 장치와 TCP 연결을 설정하고 KNXnet/IP Secure 유니캐스트 핸드셰이크를 시작하려고 시도합니다. 장치가 응답을 보내면 16진수로 stdout에 출력합니다. poc.py는 잘못된 SESSION_REQUEST 프레임을 전송하여 DoS 취약점을 트리거하려고 시도합니다. 장치가 취약한 경우, 대상 장치를 재부팅하지 않으면 이후의 healthcheck.py 실행은 응답을 반환하지 않습니다.
스크립트는 다음 명령으로 실행할 수 있으며, <IP 주소 삽입>을 실제 IP 주소(예: 192.168.2.137)로 바꿔야 합니다.
python3 healthcheck.py -t <IP 주소 삽입>
python3 poc.py -t <IP 주소 삽입>
Windows에서는 Python의 별칭을 python3 대신 python으로 변경해야 할 수 있습니다. 대상 장치가 제어 엔드포인트를 3671 이외의 포트에서 구현하는 경우 스크립트의 포트를 그에 맞게 조정해야 합니다.
MDT 펌웨어의 변경 로그에 문서화된 대로 취약점은 펌웨어 v3.0.4에서 수정되었습니다. 최신 펌웨어를 설치하면 문제가 해결됩니다. 펌웨어 업데이트 지침과 .hex 파일은 MDT 웹사이트에서 제공됩니다.
개념 증명은 MIT 라이선스에 따라 배포됩니다.
다운로드:
변경 사항: