[하루한줄] 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
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.