
MikroTik RouterOS 서비스 거부 취약점
MikroTik RouterOS의 취약점으로 인해 인증되지 않은 원격 공격자가 라우터를 재부팅하도록 강제할 수 있습니다. 이는 IP 프로토콜 97을 사용하여 1바이트 크기의 패킷을 RouterOS의 IPv6 주소로 전송하여 수행됩니다. EoIPv6를 지원하는 모든 RouterOS 버전이 이 공격에 취약할 가능성이 있습니다. 이 공격은 대상 시스템에서 IPv6가 활성화되어 있고 최소 하나의 터널 인터페이스가 존재해야 합니다.
INPUT을 차단하는 IPv6 필터 규칙이 없어야 합니다.EoIPv6 (Ethernet over IPv6)는 MikroTik RouterOS의 레이어 2 터널링 프로토콜입니다. EoIPv6 프로토콜은 이더넷 프레임을 수정된 EtherIP (IP 프로토콜 97) 패킷으로 캡슐화합니다.
MikroTik의 EoIPv6 구현은 EtherIP의 12개 예약 비트를 사용하여 터널 ID를 저장합니다. MikroTik은 또한 EtherIP 헤더의 첫 번째 4비트와 두 번째 4비트를 서로 바꿉니다(스왑).
터널 ID를 검색하고 패킷의 유효성을 검증하기 위해 RouterOS는 프로토콜 97로 수신된 패킷에 대해 위에서 설명한 대로 비트를 스왑합니다. 이 과정은 시스템에 터널 인터페이스가 존재하는 한 (비활성화된 경우에도) 발생합니다. RouterOS는 이 과정 중에 페이로드 크기를 확인하지 않습니다. 따라서 프로토콜 97의 1바이트 패킷은 이를 중단시킵니다 (터널 ID를 구성하는 데 필요한 나머지 비트가 누락되기 때문).
RouterOS에서 IPv6 주소를 추가합니다:
/ipv6 address add interface=ether1 address=fd00::1/64 advertise=no
그리고 터널을 추가합니다 (모든 유형):
/interface ipip add remote-address=127.0.0.1
익스플로잇을 실행합니다 (리포지토리의 exploit.c):
./exploit fd00::1
RouterOS는 익스플로잇 실행 후 몇 초 이내에 자체 재부팅됩니다. 재부팅 후 다음 로그를 볼 수 있습니다:
jan/20/2018 10:28:36 system,error,critical router was rebooted without proper shutdown
RouterOS 6.39.3 (버그 수정 전용), 6.41 (현재), 6.42rc11 (릴리스 후보)을 테스트했으며, 작성 시점 기준으로 모두 이 공격에 취약합니다. 이 취약점은 EoIPv6를 지원하는 이전 버전의 RouterOS에도 존재할 가능성이 높습니다.
MikroTik 포럼의 이 스레드를 참조하십시오.