https://hackyboiz.github.io/2021/05/27/idioth/2021-05-27/

 

hackyboiz

hack & life

hackyboiz.github.io

https://github.com/x41sec/advisories/blob/master/X41-2021-002/poc.py

 

GitHub - x41sec/advisories

Contribute to x41sec/advisories development by creating an account on GitHub.

github.com

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 도메인 이름의 유효성을 검사하고 압축을 해제하는 작업을 다음 두 단계로 처리합니다.

  1. 압축되지 않은 도메인 이름 크기인 len을 계산하고 128 포인터가 넘어가거나 버퍼의 범위를 벗어나는 부분을 버립니다.
  2. 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
블로그 이미지

wtdsoul

,