[하루한줄] CVE-2020-28018: Unix 계열 메일 에이전트 RCE

URL

CVE-2020-28018 (Use-After-Free in Exim)

Target

Exim 4 <= 4.92.2

Explain

Unix 계열 운영 체제의 MTA(Mail Transfer Agent)인 Exim에서 use-after-free 취약점이 발견되었습니다. tls-openssl.c에 존재하는 해당 취약점을 통해 로컬 권한 상승 및 원격 코드 실행을 할 수 있습니다.

int tls_write(void * ct_ctx, const uschar *buff, size_t len, BOOL more)
{
	...

  corked = string_catn(corked, buff, len);
  
  ...

  if (more)
    return len;
  buff = CUS corked->s;
  len = corked->ptr;
  corked = NULL;

	...
}

위는 tls-openssl.c의 함수 tls_write() 일부 코드입니다. 함수 string_catn()gstring 구조체가 request 데이터를 담기에 충분한 메모리 공간을 가지고 있는지 검사하고 gstring_grow()를 호출해 새로운 청크를 할당한 후 gstring->s 필드에 저장합니다. string_catn()이 반환한 gstring 포인터를 corked에 저장하고 이후에 gstring에 접근해야 할 일이 생기면 corked를 사용합니다. 문제는 corked가 NULL로 초기화되는 루틴을 무시할 수 있어 corked->s가 해제된 이후에도 corked를 통해 접근(use-after-free)할 수 있습니다.