Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-42978-PoC-Research — CVE-2026-42978 — Windows 푸시 알림(WpnService)의 Use-After-Free 경쟁 조건. 패치 diff, 근본 원인 분석, TOCTOU 랩, Sysmon/ETW 탐지 규칙. | Kitploit
도구/GitHubGitHub/grizzzer/cve-2026-42978-poc-research
Vulnerability AnalysisExploitationForensicsBinary AnalysisLearning & EducationIncident ResponseLabs & Practice
GitHubgrizzzer/cve-2026-42978-poc-research

CVE-2026-42978-PoC-Research

CVE-2026-42978 — Windows 푸시 알림(WpnService)의 Use-After-Free 경쟁 조건. 패치 diff, 근본 원인 분석, TOCTOU 랩, Sysmon/ETW 탐지 규칙.

저장소 보기
2871023개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42978 PoC & Research — Windows Push Notifications Use-After-Free

Windows Push Notifications 서비스(WpnService)의 경쟁 조건(Race Condition) 취약점으로, NT AUTHORITY\SYSTEM 권한으로 실행됩니다. 로컬 접근 권한이 있는 공격자는 플랫폼 종료 중에 use-after-free를 유발하여 권한을 상승시킬 수 있습니다.

  • CVE: CVE-2026-42978
  • BDU: BDU:2026-08249
  • 유형: CWE-362(경쟁 조건), Use-After-Free
  • CVSS: 7.8(높음)
  • 영향: Windows 10, Windows 11, Windows Server 2016/2019/2022/2025
  • 패치: 2026년 6월 10일(Patch Tuesday)
  • 상태: 수정됨. 이 저장소는 방어적 연구 목적으로만 사용됩니다.

작동 원리

WpnService는 Windows 푸시 알림 서비스입니다. 세션 0에서 svchost.exe -k netsvcs -p 내부의 LocalSystem으로 실행됩니다. 모든 알림 전달(토스트, 타일, 배지)은 이 서비스를 통해 이루어집니다.

취약점은 wpncore.dll의 PresentationEndpointFacade 클래스에 있습니다. 이 클래스는 모든 알림 API 호출(토스트 전달, 세션 관리, 설정 조회 등)을 래핑하고 PresentationEndpointImpl에 위임합니다.

버그: 플랫폼 종료 중에 NotificationPlatform 개체가 소멸됩니다. 그러나 Facade 메서드는 종료가 진행 중인지 확인하지 않습니다. 플랫폼에 대한 포인터를 가져온 다음, 종료 스레드가 플랫폼을 해제하고, Facade는 댕글링 포인터를 사용합니다. 전형적인 use-after-free 경쟁 조건입니다.

취약한 코드(wpncore.dll 빌드 26100.8521에서 디컴파일)

// PresentationEndpointFacade::ToastUnblockAll — 취약
long ToastUnblockAll(PresentationEndpointFacade *this) {
    // 잠금 없음. 종료 확인 없음. 그냥 플랫폼 포인터를 가져와서 진행.
    NotificationPlatformHandle::Get(this + 0x50);
    if (platform == NULL) Throw_Hr(...);
    // 종료가 바로 여기서 플랫폼을 해제하면 — use-after-free
    return PresentationEndpointImpl::UnblockToastsForEachApp(...);
}

Ghidra disassembly of vulnerable ToastUnblockAll
Ghidra: 취약한 ToastUnblockAll — 플랫폼 접근 전 동기화 없음

패치된 코드(wpncore.dll 빌드 26100.8655)

// PresentationEndpointFacade::ToastUnblockAll — 패치됨
long ToastUnblockAll(PresentationEndpointFacade *this) {
    if (Feature_4097557817::IsEnabled()) {
        AcquireSRWLockShared(&Wns::s_platformLock);    // 1. 공유 잠금
        if (Wns::s_platformShutdown)                    // 2. 종료 가드
            Throw_Hr(E_APPLICATION_EXITING);
        NotificationPlatformHandle::Get(this + 0x50);
        // ... 작업 수행 ...
        ReleaseSRWLockShared(&Wns::s_platformLock);     // 3. RAII 해제
    } else {
        // 기능 플래그 꺼짐 — 롤백을 위해 이전 동작 유지
    }
}

수정은 세 가지를 추가합니다:

  1. AcquireSRWLockShared — 공유 readers-writer 잠금. 여러 API 호출이 동시에 실행될 수 있지만, 종료는 배타적 잠금을 획득하여 모두 차단합니다.
  2. s_platformShutdown 확인 — 종료가 이미 시작된 경우 E_APPLICATION_EXITING으로 즉시 중단합니다.
  3. RAII 잠금 해제 — 잠금은 wil::unique_storage 래퍼에 보관되므로 예외가 발생해도 해제됩니다.

기능 플래그 Feature_4097557817는 WIL(Windows Internal Library)을 통한 단계적 배포를 위한 것입니다. Microsoft가 수정 사항을 점진적으로 활성화하고 문제가 발생하면 비활성화할 수 있게 해줍니다.

수정 범위

이것은 단일 함수 버그가 아닙니다. 동일한 잠금+가드 패턴이 wpncore.dll의 49개 함수에 추가되었습니다:

카테고리함수
토스트 작업ToastUnblockAll, ToastCreateSession, ToastCloseSession, ToastRequestAllNotifications, ToastSuppress
타일 작업TileCreateSession, TileCloseSession, TileRequestResourceForeground
등록RegisterApplication, UnregisterApplication, RegisterHandler, UpdateRegistration, RegisterSystemApplication
설정ChangeAppSetting, QueryAppSetting, QueryGlobalSetting, RegisterSettingCallback, UnregisterSettingCallback
전달Deliver, GetPayloadForNotificationId, Submit, PostScheduledNotification
쿼리GetRegisteredHandler, GetRegisteredHandlersFromParent, GetSettingsFromHandler, GetAssetsFromHandler

플랫폼에 접근하는 모든 PresentationEndpointFacade::* 메서드에 동일한 수정이 적용되었습니다. 내부의 PresentationEndpointImpl::* 메서드는 변경되지 않았습니다. 문제는 Facade 계층에만 있었습니다.

영향

WpnService는 SYSTEM 권한으로 실행됩니다. 경쟁 조건에서 승리하면:

  1. 해제된 NotificationPlatform 개체의 메모리를 재확보하여 공격자 제어 데이터로 채울 수 있습니다(힙 스프레이)
  2. 댕글링 포인터에 대한 후속 가상 메서드 호출이 공격자 제어 주소로 점프합니다
  3. NT AUTHORITY\SYSTEM 권한으로 코드 실행

실제 악용(힙 스프레이, vtable 하이재킹, 코드 실행 달성)은 이 연구의 범위를 벗어납니다. 이 저장소는 근본 원인 이해와 탐지 구축에 중점을 둡니다.

TOCTOU 경쟁 조건 실습

lab/ 디렉터리에는 WpnService를 건드리지 않고 이 버그 유형을 재현하는 독립형 C 데모가 포함되어 있습니다. WpnService와 유사한 명명된 파이프 + 공유 메모리 아키텍처를 사용합니다.

작동 방식:

  • vulnerable_service.exe는 공유 메모리에서 메시지 길이를 읽고, 검증하고, 50ms 동안 대기한 다음, 길이를 다시 읽습니다(이중 페치).
  • race_attacker.exe는 안전한 길이를 설정하고 서비스를 트리거한 다음 즉시 공유 메모리를 오버플로 값으로 변경합니다.
  • 타이밍이 맞으면 서비스는 두 번째 페치에서 오버플로 값을 읽습니다 — 버퍼 오버플로.

로컬 변수로의 단일 페치 캡처인 수정 사항을 보려면 vulnerable_service.exe --patched를 실행하세요.

TOCTOU race condition demo
왼쪽: 서비스가 경쟁 조건 감지(5/5). 오른쪽: 공격자가 공유 메모리 값 변경.

빌드 및 실행

GCC(MinGW)가 필요합니다. lab/ 디렉터리에서:

build.bat

터미널 1:

vulnerable_service.exe

터미널 2:

race_attacker.exe 5

그런 다음 vulnerable_service.exe --patched와 비교하세요 — 동일한 공격, 경쟁 조건 0회 감지.

탐지

ETW 모니터(detection/etw_wpn_monitor.ps1)

7가지 지표를 확인하는 PowerShell 스크립트:

  1. WpnService 상태 및 PID
  2. 크래시/재시작 기록(실패한 악용은 크래시 추적을 남깁니다)
  3. Push Notifications Platform 이벤트 로그 버스트 감지
  4. WPN 관련 명명된 파이프
  5. 패치 확인(wpncore.dll 날짜 확인)
  6. WPN 모듈이 로드된 프로세스
  7. 알림 데이터 경로의 심볼릭 링크/정션 감사
powershell -ExecutionPolicy Bypass .\detection\etw_wpn_monitor.ps1

ETW monitor output
ETW 모니터: WpnService 실행 중(PID 6432), 크래시 없음, 시간당 100개 이벤트, 시스템 패치됨

Sysmon 규칙(detection/sysmon_wpn_race_detect.xml)

지속적 모니터링을 위한 6개 규칙 그룹:

규칙탐지 내용
WPN_EoP_ChildProcesssvchost(netsvcs)가 cmd/powershell/wscript 생성
WPN_PipeAccessWPN 관련 명명된 파이프에 대한 연결
WPN_FileCreation알림 데이터 디렉터리에 파일 생성
WPN_RegistryTamperingPushNotifications 키에 레지스트리 쓰기
WPN_ProcessAccesssvchost에 대한 PROCESS_ALL_ACCESS 핸들
WPN_ThreadInjectionsvchost에 CreateRemoteThread

설치:

sysmon64.exe -accepteula -i detection\sysmon_wpn_race_detect.xml

이벤트 뷰어

WpnService 활동은 Microsoft-Windows-PushNotifications-Platform/Operational에 기록됩니다. 주목해야 할 주요 이벤트:

  • 이벤트 1225: 전송 수준 WPN 명령
  • 빠른 이벤트 버스트(분당 20개 초과) — 가능한 경쟁 조건 스프레이
  • 오류/심각 이벤트 — 실패한 악용으로 인한 크래시 가능성

Event Viewer WPN event
이벤트 뷰어: PushNotifications-Platform 운영 로그, 이벤트 ID 1225

패치 디퓨징

wpncore.dll 디퓨징의 주요 발견:

  • .text 섹션이 18,432바이트 증가(49개 함수에 새 잠금/가드 코드)
  • .data 섹션이 96바이트 증가(새 Wns::s_platformLock 및 Wns::s_platformShutdown 전역 변수)
  • 새 임포트 없음 — AcquireSRWLockShared/ReleaseSRWLockShared는 이미 임포트 테이블에 있었습니다
  • 새 RAII 소멸자: ~unique_any_t<...ReleaseSRWLockExclusive...>는 잠금 래퍼 추가를 확인합니다

전체 보고서는 reports/에 있습니다.

관련 CVE

CVE-2026-42978은 2026년 6월에 수정된 9개의 WPN 관련 취약점 클러스터의 일부입니다:

CVE유형CWE
CVE-2026-42977EoP경쟁 조건
CVE-2026-42978EoP경쟁 조건
CVE-2026-42979EoP경쟁 조건
CVE-2026-42991EoP경쟁 조건
CVE-2026-42969정보 공개경쟁 조건
CVE-2026-42970정보 공개경쟁 조건
CVE-2026-42973정보 공개경쟁 조건
CVE-2026-26167EoP—
CVE-2026-32160EoP—

프로젝트 구조

도구 다운로드