[하루한줄] 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)할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.