[하루한줄] 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 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.