[하루한줄] BrokenPrint: A Netgear stack overflow

URL

BrokenPrint: A Netgear stack overflow

Target

Netgear R6700v3 V1.0.4.118_10.0.90

Explain

Netgear R6700v3 라우터의 /usr/bin/KC_PRINT 서비스에서 stack buffer overflow 취약점이 발견되었습니다. 해당 취약점을 악용해 라우터의 관리자 권한으로 원격 코드 실행을 할 수 있습니다.

KC_PRINT 서비스는 HTTP 리퀘스트를 받으면 Content-Length 헤더로 부터 8 byte의 데이터를 읽습니다. 해당 8 byte에 따라 전체 HTTP content를 복사할 heap buffer를 할당 한 후 실행할 함수의 종류가 결정됩니다. 그중 함수 Response_Get_Jobs()는 stack buffer overflow 취약점이 존재합니다.


// copy_len equals maximum: 0xff00 + 0xff
// and a copy is made into command[] which is a 2048-byte buffer
copy_len = (recv_buf[offset] << 8) + recv_buf[offset + 1];
offset += 2;                           

if ( flag2 )
{
  // /!\ VULNERABILITY HERE /!\
  memset(command, 0, sizeof(command));
  memcpy(command, &recv_buf[offset], copy_len);// VULN: stack overflow here
  ...

위의 코드는 함수 Response_Get_Jobs()의 일부입니다. memcpy()를 통해 2048 byte크기의 배열 command[]copy_len 만큼의 데이터를 복사합니다. 문제는 copy_len을 임의의 크기로 조작할 수 있어서 stack overflow가 가능합니다.