[하루한줄]VoIPmonitor BoF to RCE

URL

VoIPmonitor is vulnerable to a buffer overflow when using the live sniffer

Target

VoIPmonitor 27.6

Explain

오픈소스 network packet sniffer인 VoIPmonitor에서 RCE취약점이 발견되었습니다.

char callidstr[1024] = "";
if(packetS->sipDataLen) {
    void *memptr = memmem(packetS->data_()+ packetS->sipDataOffset, 
        packetS->sipDataLen, "\r\n", 2);
    if(memptr) {
        memcpy(description, packetS->data_()+ packetS->sipDataOffset, 
            (char *)memptr - (char*)(packetS->data_()+ packetS->sipDataOffset));
        description[(char*)memptr - (char*)(packetS->data_()+ 
            packetS->sipDataOffset)] = '\0';
        printf("%s\n", description);
    }
    // ...
}

위는 함수 save_packet_sqp의 코드입니다. 변수 description은 1024 bytes 크기로 고정되어 있는 SIP request 값을 저장하는 배열입니다. description의 크기보다 큰 request를 보내 버퍼오버플로우가 가능합니다. Stack canary, RELRO 등 표준 memory corruption 보호 기법이 없으므로 버퍼오버플로우를 통한 원격코드 실행이 가능합니다.