← 목록으로

CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승

[CVE] CVE 분석 · 작성: 2026-07-19 19:39:08 · 수정: 2026-07-21 23:17:42 · 조회 15

취약점 개요

패치 분석

패치는 (1) 드라이버 설치 요청에 대한 권한 상승 없는 우회 플래그 조합 차단, (2) SPLREG_COPY_FILES_POLICY 기본값을 신뢰된 경로로만 복사가 이뤄지도록 강화, 두 지점으로 요약된다.

1) RpcAddPrinterDriverEx() — 권한 검증 우회 플래그

Before

DWORD RpcAddPrinterDriverEx(handle, DRIVER_CONTAINER *driver, DWORD flags) {
    if (flags & APD_INSTALL_WARNED_DRIVER) {
        // "이미 검증된 드라이버"로 간주 — 관리자 권한 재확인을 건너뜀
        goto InstallDriver;
    }
    if (!IsAdmin(handle)) return ERROR_ACCESS_DENIED;
InstallDriver:
    return CopyDriverFilesAndInstall(driver);
}

특정 플래그 조합(APD_INSTALL_WARNED_DRIVER 등)이 세팅되면 관리자 권한 확인 분기를 아예 건너뛰는 경로가 존재했다.

After

DWORD RpcAddPrinterDriverEx(handle, DRIVER_CONTAINER *driver, DWORD flags) {
    // 우회 플래그 조합과 무관하게 항상 관리자 권한을 재검증
    if (!IsAdmin(handle)) return ERROR_ACCESS_DENIED;
    if (!IsTrustedDriverSource(driver->szDriverPath)) return ERROR_ACCESS_DENIED;
    return CopyDriverFilesAndInstall(driver);
}

플래그 값과 무관하게 권한 검사를 강제하고, 드라이버 파일의 출처(경로)를 검증하는 로직이 추가됐다.

2) SPLREG_COPY_FILES_POLICY — 신뢰되지 않은 경로 복사 허용

Before

if (policy == COPY_FILES_ALLOW_ANY) {
    CopyFile(driver->szDriverPath, LOCAL_DRIVER_DIR);  // UNC 경로 등 임의 출처 허용
}

After

if (policy == COPY_FILES_RESTRICTED && !IsLocalOrSignedSource(driver->szDriverPath)) {
    return ERROR_ACCESS_DENIED;  // 기본 정책을 제한 모드로 강화
}

재현 결과 (공격 흐름)

  1. 낮은 권한 도메인 계정으로 대상 시스템(스풀러 서비스가 켜진 서버, 특히 도메인 컨트롤러)에 RPC 접속
  2. RpcAddPrinterDriverEx()를 호출하며 공격자가 통제하는 SMB 공유 경로의 DLL과, 검증 우회 플래그 조합을 파라미터로 전달
  3. 패치 전 스풀러(SYSTEM 권한)가 검증 없이 수락 → DLL을 로컬 드라이버 디렉터리로 복사
  4. 스풀러가 이 DLL을 자기 프로세스 컨텍스트로 로드 — 로드 시점에 DLL의 초기화 루틴이 SYSTEM 권한으로 실행
  5. 도메인 컨트롤러가 대상이었다면 곧바로 도메인 관리자 권한에 준하는 지속성 확보로 이어짐

영향 및 체이닝

참고자료

CVE 분석 카테고리의 글 (5/8)

  1. CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행
  2. CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건
  3. CVE-2014-0160 (Heartbleed): OpenSSL 하트비트가 새어나간 메모리
  4. CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점
  5. CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승
  6. CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점
  7. CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득
  8. CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE
← CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점 CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점 →