[하루한줄] CVE-2020-17087: Windows kernel cng.sys pool-based buffer overflow

URL

Windows Kernel cng.sys pool-based buffer overflow in IOCTL 0x390400

Target

  • Windows 10 1903(64-bit)
  • Maybe since at least Windows 7

Explain

윈도우 커널 암호화 드라이버인 cng.sys에서 권한 상승이 가능한 취약점이 발견되었습니다. 해당 취약점은 IOCTL 0x390400 처리 중 cng!CfgAdtpFormatPropertyBlock 함수에서 16-bit integer truncation에 의해 발생했습니다.

CONST USHORT DestinationSize = (USHORT)(6 * SourceLength);
PWCHAR OutputBuffer = BCryptAlloc(DestinationSize);

for (USHORT i = 0; i < SourceLength; i++) {
	*OutputBuffer++ = "0123456789abcdef"[*SourceBuffer >> 4];
	*OutputBuffer++ = "0123456789abcdef"[*SourceBuffer & 0xF];
	*OutputBuffer++ = ' ';
	SourceBuffer++;
}

SourceLength의 값이 0x2AAB보다 크거나 같으면 NonPagedPool에 비정상적으로 작은 버퍼가 할당되고 binary-to-hex 변환 루프에 의해 오버 플로우가 발생합니다. 윈도우 10 1903에서 테스트되었지만 윈도우 7부터 취약점이 존재하는 것으로 예상되며 현재 취약점이 악용되고 있다고 합니다.