[하루한줄] CVE-2020-1034: Windows Kernel EoP

URL

Explicit Is Always Good? Read the Story of CVE-2020-1034

Target

  • Windows 8
  • Windows 10
  • Windows Server 2012
  • Windows Server 2019

Explain

지난 9월 커널 권한 상승 취약점에 대한 패치가 포함되었습니다. 해당 패치에 영향을 받는 모듈은 ntoskrnl.exe입니다.

EtwpNotifyGuid에서 cmp [rdi+0Ch], r12b를 수행하는데 r12b의 초기화 값은 4이지만 1로 리셋이 됩니다. byte ptr[rdi+0Ch]가 1의 값과 같다면 rdi+18h 값은 새로 생성된 UmReplyObject의 주소로 설정됩니다. twpQueueNotification에서 UmReplyObject가 참조된 부분을 찾으면 bl의 값은 0이고 rbp+0Ch가 0이 아닐 시 rbp+18h는 객체의 포인터를 읽습니다.

rbp+0ChEtwpNotifyGuid에서는 1과 비교하여 UmReplyObject를 만들지 여부를 결정하지만 마지막 비교에서 0과 비교하여 일관성 없는 비교가 됩니다.

만약 비교한 값이 1이나 0이 아닐 경우 객체 주소가 임의의 값으로 사용되고 ObfReferenceObject가 호출되어 ptr[[InputBuffer + 0x18]-0x30] ++연산이 수행되어 임의 주소 증가가 이루어집니다. 따라서 Windows 10 RS4 이상의 커널에서 프로세스 토큰의 권한 필드를 조작할 수 있습니다.