[하루한줄] CVE-2021-1675: Windows Spooler Service 원격 코드 실행 취약점

URL

PrintNightmare (CVE-2021-1675): Remote code execution in Windows Spooler Service

Target

  • Windows

Explain

PrintNightmare라는 이름의 Printer Spooler 원격 코드 실행 취약점의 세부 정보 및 PoC가 공개되었습니다.

취약점은 프린터 서버에 드라이버를 추가하거나 업데이트하는 과정에서 발생합니다. RpcAddPrinterDriver 함수는 프린터 드라이버를 추가할 때 Spooler Service에 대한 검사를 수행합니다.

1:		__int64 __fastcall SplAddPrinterDriverEx(.. unsigned int a4 ..){
2:		...
3:		
4:		if( !_bittest((const int *)&a4, 0xFu))
5:			v11 = a7;
6:		if(v11 && !(unsigned int)ValidateObjectAccess(0i64, 1i64, 0i64)
7:			return 0i64;
8:		return InternalAddPrinterDriverEx(lpString1, a2, a3, a4, (struct _INISPOOLER *)a5, a6, v11, 0i64);
9:		
10:		}

line 4와 5에서 a4는 유저 권한의 사용자가 제어할 수 있으며 해커는 이를 이용해 검사를 우회하고 악성 DLL을 타겟 서버에 설치할 수 있습니다. 또한 프린터 드라이버 정보 구조체의 pConfigFile이 UNC 경로가 허용된다는 점을 이용해 원격으로 타겟 서버에 로드할 수 있으며 드라이버 업그레이드의 백업 기능으로 액세스 충돌을 우회하고 로드된 악성 dll을 spooler service에 삽입할 수 있습니다.

UNC(Universal Naming Convention) : 네트워크 상의 공유 파일 경로 포맷 ex) \servername\sharename\path\filename

해당 취약점에 대해 Microsoft는 2021년 6월 8일 Patch Tuesday 릴리즈에서 패치했지만 패치가 취약점을 해결하지 못한 것으로 알려졌습니다.

Reference

https://twitter.com/cyb3rops/status/1410232292308664323?fbclid=IwAR29FyubigoMk4rEoNsoIg0hKmN-ecCWHuwADnf0kRQJkxcQlOBikWvJBG0