Search

Windows 메모장 앱 원격 코드 실행 CVE-2026-20841 취약점 분석

태그
PurpleHound
Windows
Property
image1.PNG
작성날짜
2026/02/13

1. 취약점 개요

CVE-2026-20841은 Windows Notepad 앱의 마크다운 렌더링 기능에서 발견된 원격 코드 실행 취약점이다. 마크다운 파일 내 하이퍼링크를 Ctrl+클릭할 때 URI 및 경로에 대한 검증 없이 ShellExecuteExW를 호출하여 임의의 URI 및 로컬 경로가 확인 대화상자 없이 실행된다.
Microsoft는 2026년 2월 Patch Tuesday(11.2510)에서 URI scheme 검증 로직을 추가하여 패치하였다.
Notepad는 Windows 10/11에 기본 설치되어 있으며 Microsoft Store를 통해 업데이트된다. 마크다운(.md) 파일을 렌더링하는 환경에서 취약점이 발현된다.
항목
내용
CVE ID
CVE-2026-20841
취약 구성요소
Windows Notepad App (Microsoft Store 버전)
취약점 유형
Remote Code Execution
CWE 분류
CWE-77 (Improper Neutralization of Special Elements used in a Command)
CVSS v3.1 Score
8.8 (High)
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
영향 범위
~ 11.2510 미만(파일 버전)
패치일
2026년 2월 10일
CWE-77 요소
취약점에서의 발현
보호 대상
ShellExecuteExW 호출 경로
입력 검증 부재
마크다운 링크의 URI scheme 미검증
비정상 결과
임의의 URI 및 경로 실행

2. 취약점 상세 분석

2.1. 패치 전 — 링크 클릭 핸들러 (sub_140170F60)

패치 전 버전에서는 마크다운 링크를 Ctrl+클릭할 때 URI scheme에 대한 검증 없이 ShellExecuteExW를 호출한다.
// case 4: 마크다운 링크 Ctrl+클릭 시 case 4: v31 = *((_QWORD *)Block + 10); v2 = sub_14005C0F0(Block, *(_QWORD *)(v31 + 40) + 80LL); sub_14005C9D0(v3 + 16, Block + 288, v3 + 80, v2); // ... // scheme 검증 없이 ShellExecuteExW 호출 *((_QWORD *)Block + 22) = L"open"; // lpVerb *((_QWORD *)Block + 23) = v16; // lpFile = 링크 URL 그대로 ShellExecuteExW((SHELLEXECUTEINFOW *)(Block + 160));
C
복사
[코드 1] 패치 전 sub_140170F60 — 검증 없이 ShellExecuteExW 호출
사용자가 마크다운 파일에서 임의의 URI scheme 또는 로컬 경로가 포함된 링크를 Ctrl+클릭하면 ShellExecuteExW가 해당 대상을 확인 대화상자 없이 실행한다. 예를 들어 search-ms:// URI가 포함된 링크를 클릭하면 Windows 검색이 즉시 실행되며 이를 악용해 원격 공유의 악성 파일을 사용자에게 노출시킬 수 있다.

2.2. 패치 후 — 링크 클릭 핸들러 (sub_14019A8C0)

패치 버전에서는 ShellExecuteExW 호출 전에 scheme 검증 함수 sub_1400E1310이 추가되었다. 이 함수가 false를 반환하면 실행 자체가 차단된다.
case 4: v2 = *((_QWORD *)Block + 10); v3 = v2; // [패치] scheme 검증 게이트 — false 반환 시 실행하지 않음 if ( !(unsigned __int8)sub_1400E1310(v2, *((_QWORD *)Block + 40) + 16LL) ) goto LABEL_62; // 검증 통과 시에만 ShellExecuteExW 실행 // ... *((_QWORD *)Block + 46) = L"open"; // lpVerb *((_QWORD *)Block + 47) = v18; // lpFile ShellExecuteExW((SHELLEXECUTEINFOW *)(Block + 352));
C
복사
[코드 2] 패치 후 sub_14019A8C0 — sub_1400E1310 검증 게이트 추가
핵심 변경점은 ShellExecuteExW 호출 전에 sub_1400E1310이라는 검증 게이트가 삽입된 것이다.

2.3. 검증 게이트 — sub_1400E1310

sub_1400E1310은 URL 문자열을 추출한 뒤 내부의 scheme 검증 함수 sub_14010B7E0을 호출하고 그 결과에 따라 두 가지 경로로 분기한다.
_BOOL8 sub_1400E1310(__int64 a1, __int64 *a2) { // URL 문자열 추출 sub_140008ED0(&v21); // 추출된 문자열의 실제 버퍼 포인터 설정 v5 = (char *)&v21; if ( v23 > 7 ) v5 = (char *)v21; v18 = v5; // scheme 검증 if ( (unsigned __int8)sub_14010B7E0(&v18) ) { v6 = 1; // 검증 통과 → 바로 실행 허용 } else { // 검증 미통과 → 사용자 확인 대화상자 표시 v6 = (sub_1400A8170(v11, &v13) == 1); } return v6; }
C
복사
[코드 3] sub_1400E1310 — URL 추출 및 scheme 검증 분기
v18에 URL 문자열의 실제 포인터가 설정된다.
동작 흐름은 다음과 같다.
sub_14010B7E0true: 검증을 통과한 scheme이므로 대화상자 없이 실행을 허용한다.
sub_14010B7E0false: 검증을 통과하지 못한 scheme이므로 사용자 확인 대화상자를 표시한다. 사용자가 "예"를 선택하면 실행 "아니오"를 선택하면 sub_1400E1310false를 반환하여 실행이 차단된다.
패치의 보안 효과 및 잔여 리스크는 다음과 같다.
검증 통과 scheme 제한: 검증을 통과한 scheme(https)만 대화상자 없이 실행된다.
사용자 승인 요구: 그 외 scheme은 사용자가 명시적으로 승인해야 실행되므로 패치 전처럼 클릭만으로 임의의 대상이 즉시 실행되는 상황은 차단된다.
잔여 리스크: 사용자가 대화상자에서 "예"를 선택하면 여전히 실행되므로 소셜 엔지니어링과 결합될 경우 위험이 존재한다.
또한, file:// scheme의 경우 대화상자를 거쳐 실행이 허용되더라도 대상 파일에 MoTW(Mark of the Web)가 설정되어 있으면 Windows가 별도의 파일 열기 경고를 추가로 표시한다. 이는 외부에서 다운로드된 파일에 대한 OS 수준의 방어 계층으로 사용자가 대화상자를 승인하더라도 MoTW가 설정된 악성 파일의 즉시 실행을 한 단계 더 억제한다.

2.4. scheme 검증 — sub_14010B7E0

sub_14010B7E0Windows.Foundation.Uri로 URL을 파싱한 뒤 파싱된 scheme에 따라 실행 허용 여부를 판정한다.
URI 파싱이 성공하면 scheme을 추출하여 순차적으로 판정한다. 먼저 scheme이 "file"(길이 4)인지 확인하고 해당하면 경로 검증 단계로 진입하여 원격 경로(UNC)가 감지되거나 정규화된 경로에 "file:" 접두사가 잔존하면 false를 반환한다. "file"이 아닌 경우 scheme이 "https"(길이 5)인지 확인하고 일치하면 true를 반환하여 대화상자 없이 기본 브라우저가 열린다. 이 두 조건 어디에도 해당하지 않으면 함수는 false를 반환한다. 즉 별도의 차단 목록이 존재하는 것이 아니라 "https"만 명시적으로 허용하고 나머지는 기본적으로 거부하는 구조이다.
scheme 비교에 사용되는 sub_140031870은 와이드 문자열 비교 함수로 반환값 0이 일치를 의미한다.
// scheme == "https" 판정 (함수 하단) v37 = v50 && *((_DWORD *)v50 + 1) == 5 // scheme 길이 == 5 && (unsigned int)sub_140031870(..., L"https", 5u) == 0; // "https" 일치 return v37;
C
복사
[코드 4] sub_14010B7E0 — https scheme 판정
"file" 판정은 함수 중간에서 "https" 판정은 함수 하단에서 각각 별도로 수행되며 두 판정 모두 scheme 길이를 먼저 비교한 뒤 문자열을 비교하는 구조이다. 따라서 "file"(길이 4)과 "https"(길이 5) 어디에도 해당하지 않는 scheme은 길이 비교 단계에서 탈락하여 false를 반환한다.

2.5. 패치 전후 동작 비교

항목
패치 전 (11.2508 이전)
패치 후 (11.2510)
https:// 링크
대화상자 없이 실행
대화상자 없이 실행 (변동 없음)
file:// 경로
대화상자 없이 즉시 실행
사용자 확인 대화상자 표시 (MoTW 설정 파일은 파일 열기 경고 추가)
그 외 URI scheme
대화상자 없이 즉시 실행
사용자 확인 대화상자 표시
검증 함수
없음
sub_1400E1310sub_14010B7E0
패치 전에는 모든 URI scheme 및 경로가 확인 대화상자 없이 ShellExecuteExW로 전달되어 공격자가 마크다운 파일에 악성 링크를 삽입하면 사용자의 Ctrl+클릭만으로 임의의 대상이 실행되었다. 패치 후에는 https://만 대화상자 없이 허용되며 나머지는 사용자의 명시적 승인을 요구한다.

3. 취약점 PoC 시연

시연 환경: Windows 11 x64, Notepad 11.2508 (패치 미적용) / Notepad 11.2510 (패치 적용)
시연 내용:
1.
패치 미적용(11.2508): 마크다운 링크 Ctrl+클릭 시 임의의 URI 및 로컬 경로가 확인 대화상자 없이 실행됨을 확인
2.
패치 적용(11.2510): https:// 링크만 대화상자 없이 실행되며 그 외 scheme은 사용자 확인 대화상자가 표시됨을 확인

4. 탐지 및 검증

4.1. 행위 기반 탐지

다음 조건을 만족하는 이벤트를 모니터링한다.
프로세스 생성: Notepad.exe에서 cmd.exe, powershell.exe, mshta.exe, wscript.exe 등의 자식 프로세스 생성
파일 실행: Notepad.exe에서 .bat, .cmd, .hta, .vbs, .lnk 파일에 대한 ShellExecuteExW 호출
비표준 URI: Notepad.exe에서 https:// 이외의 URI scheme에 대한 ShellExecuteExW 호출

4.2. PurpleHound 솔루션을 통한 검증

본 취약점과 같은 원격 코드 실행 공격에 대해 조직의 보안 인프라가 효과적으로 대응할 수 있는지 사전에 검증하는 것이 중요하다.
PurpleHound는 78ResearchLab에서 개발한 BAS(Breach and Attack Simulation) 솔루션으로 실전 기반 공격 시나리오를 재구성하여 기업이 보유한 보안 장비와 시스템이 실제 공격에 얼마나 효과적으로 대응 가능한지 검증할 수 있도록 지원한다. 북한 등 실제 위협 그룹이 사용하는 최신 공격 기술을 반영하며 모든 공격 시나리오는 실증 검증을 거쳐 탑재된다.
CVE-2026-20841 취약점 역시 PurpleHound에 공격 시나리오로 탑재되어 조직 내 엔드포인트 보안 솔루션 및 EDR이 해당 공격을 탐지·차단하는지 검증할 수 있다.

5. 권장 조치

2026년 2월 Microsoft 보안 업데이트 즉시 적용 (11.2510 이상)
외부에서 수신한 .md 파일에 대한 사용자 보안 인식 교육
EDR에서 Notepad.exe의 비정상적인 자식 프로세스 생성 모니터링 규칙 추가

6. 결론

CVE-2026-20841은 Windows Notepad의 마크다운 링크 Ctrl+클릭 시 URI scheme 검증 부재로 인해 ShellExecuteExW가 임의의 URI 및 경로를 확인 대화상자 없이 실행하는 원격 코드 실행 취약점이다.
패치 전에는 모든 URI scheme 및 경로가 확인 대화상자 없이 실행되었다. Microsoft는 11.2510 패치에서 sub_1400E1310sub_14010B7E0 검증 체인을 추가하여 https scheme만 대화상자 없이 실행을 허용하고 그 외 scheme은 사용자 확인 대화상자를 거치도록 변경하였다. file:// scheme의 경우 대화상자를 거치더라도 MoTW가 설정된 파일에 대해서는 OS 수준의 파일 열기 경고가 추가로 작동하여 방어 계층이 존재한다. 다만 사용자가 대화상자에서 실행을 승인할 경우 여전히 실행이 가능하므로 소셜 엔지니어링과 결합된 공격 시나리오에 대한 잔여 리스크는 남아 있다.

7. 참고 자료

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-20841
https://nvd.nist.gov/vuln/detail/CVE-2026-20841
https://cwe.mitre.org/data/definitions/77.html
https://github.com/BTtea/CVE-2026-20841-PoC