[하루한줄] CVE-2020-24581: D-Link 라우터의 의도적인 RCE 취약점

URL

CVE-2020-24581 D-Link DSL-2888A Remote Command Execution

Target

D-Link DSL-2888A AU_2.31_V1.1.47ae55 이전 버전

Explain

대만 D-link사의 통합 서비스 라우터 제품인 DSL-2888A 펌웨어에서 원격 코드 실행 취약점이 발견되었습니다. 보안 연구원들은 취약점이 발생하는 기능이 웹 인터페이스에서 정상적인 사용으로는 접근할 수 없어 의도적으로 숨겨진 기능이라고 분석했습니다.

해당 제품이 웹 서비스를 초기화할 때 cgi-bin컴포넌트가 로드됩니다. 취약점은 cgi-bin 디렉터리의 execute_cmd.cgi 파일에 존재하며 인증된 사용자가 execute_cmd.cgi에 접근 시 ajax.js에서 요청 쿼리의 두 번째 매개변수를 가져와 실행하는데, 이때 매개 변수에 대한 검증이 없어 임의 명령 실행이 가능합니다.

get : function(_dataType)
{
		var _url = this.url;
		if(_url.indexOf('?') == -1)
			_url += '?timestamp=' + new Date().getTime();
		else
			_url += "&timestamp=" + new Date().getTime();
		if(this.queryString.length > 0)
			_url += "&" + this.queryString;
		this.xmlHttp.open("GET", _url, true);
...

해당 취약점은 인증 우회 취약점인 CVE-2020-24579와 같이 악용되어 다음과 같이 인증되지 않은 사용자가 임의 명령을 실행할 수 있습니다.

  1. 아무 관리자 패스워드로 로그인 인증을 수행합니다.
  2. 내부적으로는 유효한 인증 세션이 이루어져 인증 페이지에 접근할 수 있습니다. (CVE-2020-24579)
  3. 이후 ls 명령어를 실행하는 poc는 다음과 같습니다.
http://[DeviceIP]/cgi-bin/execute_cmd.cgi?timestamp=1589333279490&cmd=ls