https://hackyboiz.github.io/2021/05/27/idioth/2021-05-27/
https://github.com/x41sec/advisories/blob/master/X41-2021-002/poc.py
https://0day.today/exploit/36300
Target
- nginx 0.6.18 - 1.20.0
Explain
오픈 소스 웹 서버 프로그램 nginx의 ngx_resolver_copy()에서 DNS response를 처리하는 동안 발생하는 off-by-one으로 인해 heap 영역의 1-byte 메모리를 덮어쓸 수 있는 취약점이 발견되었습니다.
ngx_resolver_copy()는 DNS response에 포함된 DNS 도메인 이름의 유효성을 검사하고 압축을 해제하는 작업을 다음 두 단계로 처리합니다.
- 압축되지 않은 도메인 이름 크기인 len을 계산하고 128 포인터가 넘어가거나 버퍼의 범위를 벗어나는 부분을 버립니다.
- Output buffer를 할당하고 압축되지 않은 이름을 복사합니다.
이 과정에서 1번의 len과 2번에 압축되지 않은 이름의 크기가 달라 name->data에서 1 바이트를 벗어나 덮어쓸 수 있습니다.
nginx DNS response를 받기 위해 DNS request를 보낸 후, QNAME, NAME, RDATA 중 하나의 값을 통해 해당 취약점을 트리거할 수 있습니다. 또한 CNAME을 사용할 경우 재귀적으로 처리되어 ngx_resolve_name_locked()가 호출될 때 추가적인 OOB write가 가능하고 ngx_resolver_dup()과 ngx_crc32_short()를 통해 OOB read가 가능합니다.
해당 취약점의 POC 코드는 github에서 확인할 수 있습니다.
'CVE' 카테고리의 다른 글
CVE-2019-20372 (0) | 2022.05.19 |
---|---|
Apache cve 2021 (0) | 2021.11.26 |
cve-2021-41773 (0) | 2021.11.09 |
Zero To Logon, Domain (0) | 2021.08.25 |
MS Exchange Server 취약점 건 (0) | 2021.03.11 |