[하루한줄] CVE-2021-31802: NETGEAR Nightawk R7000 RCE

URL

NETGEAR Nightawk R7000 PreAuth RCE

Target

Netgear Nighthawk R7000 firmware <= 1.0.11.116

Explain

NETGEAR R7000 라우터에서 인증 절차를 무시하고 원격 코드를 실행할 수 있는 취약점이 발견되었습니다. 해당 취약점은 HTTP 요청을 처리하는 과정에서 user supplied data에 대한 검증 미흡으로 발생하고 이를 악용해 해커는 루트 권한의 원격 코드 실행을 할 수 있습니다. 유저는 Httpd의 /backup.cgi URL을 통해 파일을 업로드할 수 있습니다. 두 개의 변수로 해당 파일의 크기를 표현하는데 그중 하나는 HTTP POST Request Header의 Content-length 값을, 다른 하나는 HTTP POST Request Body의 Content-length 값을 사용합니다.

프로그램은 malloc을 호출해 파일의 데이터를 저장하기 위한 Content-length+600 크기의 청크를 할당합니다. HTTP POST Request Header의 Content-length는 유저가 제어할 수 있는 데이터이므로 임의 크기의 chunk를 할당할 수 있습니다. 그 후 memcpy를 사용해 할당된 청크에 파일 데이터를 옮기는데 HTTP POST Request Body의 Content-length 크기만큼 데이터를 복사합니다. 마찬가지로 HTTP POST Request Body의 Content-length는 유저 제어가 가능한 데이터로 heap overflow를 발생시킬 수 있습니다.