[하루한줄] CVE-2020-17140 : SMB uaf to info disclosure

URL

Windows SMB Information Disclousure Analysis

Target

Windows 7 ~ Windows 10

svr2.sys 드라이버

Explain

patch Tuesday(2020.12.08)에서 CVE-2020-17140가 패치되어 Write-up이 공개되었습니다. CVE-2020-17140은 SMB2_SET_INFO 패킷의 처리 로직에서 발생하는 use after free로 커널 메모리를 노출시키는 취약점입니다.

SMBv2 이후부터 LEASE라는 새로운 caching mechanism이 도입되었고 클라이언트는 SMB2_CREATE_REQEUST_LEASE_V2 패킷을 보내 공유 파일에 lease를 생성하고, SMB2_SET_INFO 패킷을 보내 공유 파일의 lease를 수정할 수 있습니다.

srv2.sys 드라이버는 SMB2_SET_INFO 패킷을 받으면 srv2!Smb2UpdateLeaseFileName를 호출해서 lease 이름을 수정하는데, new lease name이 기존의 old lease name보다 길 경우 새로운 메모리(newFileBuf)를 할당해 old lease name을 백업합니다.

if ( *(_BYTE *)(v6 + 114) )
	ExFreePoolWithTag(oldFileBuf, 0);
if ( v11 )
	memmove(newFileBuf, oldFileBuf, 2i64 * v11);

old lease name을 담고 있던 oldFileBuf를 할당 해제한 후에 newFileBuf에 복사하기 때문에 use after free가 발생합니다. oldFileBuf를 해제한 후 댕글링 포인터의 상태에 따라 kernel info leak 또는 BSoD로 이어질 수 있습니다.