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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-32202 — CVE-2026-32202에 대한 기술 분석으로, Windows Explorer에서 조작된 .lnk 제어판 애플릿 항목을 통한 제로클릭 NTLM 자격 증명 강제 유출 취약점입니다. | Kitploit
도구/GitHubGitHub/f0xox/cve-2026-32202
Vulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPenetration TestingPapers & ResearchRed Teaming
GitHubf0xox/cve-2026-32202

CVE-2026-32202

CVE-2026-32202에 대한 기술 분석으로, Windows Explorer에서 조작된 .lnk 제어판 애플릿 항목을 통한 제로클릭 NTLM 자격 증명 강제 유출 취약점입니다.

저장소 보기
2개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

제로클릭 강제 인증: 조작된 .lnk가 포함된 폴더를 보면 아이콘 렌더링 중 UNC 해석이 트리거되어, 피해자가 공격자가 지정한 외부 연결을 하도록 강제하고 이를 통해 피해자의 Net-NTLMv2 자격 증명이 유출(및 릴레이 가능)됩니다. 이는 CVE-2026-21510의 불완전한 패치로 인해 발생했습니다. Microsoft가 추가한 신뢰 검증은 ShellExecuteExW 호출 시점, 즉 호출 시에만 작동했지만, 피해는 이미 CControlPanelFolder::GetUIObjectOf 시점에 발생하며, 이는 어떤 ShellExecute 신뢰 검증보다도 먼저 호출됩니다.


Explorer는 아이콘을 가져오기 위해 CControlPanelFolder::GetUIObjectOf를 호출 -> CControlPanelFolder::GetModuleMapped -> PathFileExistsW(modulepath) -> GetFileAttributesW(modulepath). modulepath가 UNC 경로인 경우, 외부 SMB 연결이 이루어집니다. 호출이 필요 없으며, 파일이 존재하는지 질의하는 것만으로 원격 stat이 트리거되고, 이것이 SMB 연결을 강제합니다. SMB 리다이렉터는 임의의 서버(TCP/445)에 연결을 열어 자동 NTLM 인증을 트리거하고 피해자의 Net-NTLMv2 해시를 유출합니다. 0click, 아이콘을 보는 것만으로 트리거됩니다.

root@kitploit:~
LinkTargetIDList
 . IDListSize = 0xXXXX
 . ITEMIDLIST =
   . [SHITEMID]                                                      - Item #1  (binds CControlPanelFolder)
       cb = 0x14 0x00
       abID[0] = 0x1F                                                - (CLSID (GUID) shell item)
       abID[1] = 0x80                                                - (sort order index, hint, not part of the GUID)
       abID[2..17] = 20 20 EC 21 EA 3A 69 10 A2 DD 08 00 2B 30 30 9D - (Control Panel CLSID)

   . [SHITEMID]                                                      - Item #2  (All Control Panel Items view of CControlPanelFolder)
       cb = 0x14 0x00
       abID[0] = 0x1F
       abID[1] = 0x80
       abID[2..17] = 68 06 EE 26 0A A0 D7 44 93 71 BE B0 64 C9 86 83 - (All Control Panel Items CLSID)

    . [SHITEMID]                                                      - Item #3  (CPL item parsed by CControlPanelFolder::GetUIObjectOf at render)
        cb = 0xXX 0x00                                                - > 0x18 required; _IsUnicodeCPLWorker: cb must exceed 24
        +0x02 ..                                                      - header bytes; +0x07 signature masked 0x00 or 0xFF (sub_18037D040 Gate 0)
        +0x08  WORD = 0                                               - (checked by _IsUnicodeCPLWorker)
        +0x0A  WORD = 0                                               - (checked)
        +0x0C  BYTE = 0                                               - (checked)
        +0x0D  BYTE = 0x6A                                            - Unicode-CPL type tag; flips parsing to the wide path
        +0x14  WORD                                                   - wide offset (WCHARs) to string #2, ex. display name
        +0x16  WORD                                                   - wide offset (WCHARs) to string #3
        +0x18  WCHAR[]                                                - wide string #1 = module path, attacker UNC goes here

Control Panel 애플릿 항목 유형에는 모듈 경로를 위한 필드가 있습니다. 모듈 경로는 .cpl 모듈의 경로입니다. Shell Item #3에는 유니코드 Control Panel 애플릿 항목(_IDCONTROLW)이 포함되어 있습니다. 이 항목은 셸 항목 클래스 유형 바이트(abID[0])로 식별되지 않는다는 점에 유의하세요. 대신, _IsUnicodeCPLWorker가 다음 다섯 가지 조건을 모두 확인하면 원시 바이트가 _IDCONTROLW로 처리됩니다:

  • cb > 0x18
  • +0x08 == 0
  • +0x0A == 0
  • +0x0C == 0
  • +0x0D == 0x6A - Unicode-CPL tag. the other 4 are structural

이 술어가 바로 코드가 +0x18을 모듈 경로로 읽을 수 있게 하는 것입니다. _IsUnicodeCPLWorker는 원시 항목 바이트를 보고 이 다섯 가지 조건을 확인하며, 통과하면 동일한 포인터를 _IDCONTROLW*로 캐스팅하여 반환합니다.

root@kitploit:~
struct _IDCONTROLW{
    /* +0x00 */ WORD   cb;              // item size; _IsUnicodeCPLWorker requires cb > 0x18
    /* +0x02 */ BYTE   bClassType;      // abID[0] in SHITEMID terms (shell-item type indicator)
    /* +0x03 */ BYTE   unk_03;          // (high bytes of the +0x04 dword; +0x07 masked 0x00/0xFF in sub_18037D040 Gate 0)
    /* +0x04 */ BYTE   unk_04;
    /* +0x05 */ BYTE   unk_05;
    /* +0x06 */ BYTE   unk_06;
    /* +0x07 */ BYTE   bSig07;          // (dword@+0x04 & 0xFF000000) must be 0x00 or 0xFF
    /* +0x08 */ WORD   mustBeZero_08;   // checked == 0 by _IsUnicodeCPLWorker
    /* +0x0A */ WORD   mustBeZero_0A;   // checked == 0
    /* +0x0C */ BYTE   mustBeZero_0C;   // checked == 0
    /* +0x0D */ BYTE   bUnicodeTag;     // == 0x6A : the Unicode-CPL tag (the thing "confirmed")
    /* +0x0E */ BYTE   unk_0E[6];       // unknown (spans to +0x13)
    /* +0x14 */ WORD   offString2;      // WCHAR offset (into payload) to string #2 — e.g. display name
    /* +0x16 */ WORD   offString3;      // WCHAR offset to string #3
    /* +0x18 */ WCHAR  szModule[];      // string #1 = module path  <-- attacker UNC; GetModule copies from base+24 verbatim
};
도구 다운로드