POC详情: 16e90e8bfa8ab598c4d6395e46c22162526d4b9d

来源
关联漏洞
标题: Notepad++ 安全漏洞 (CVE-2025-49144)
描述:Notepad++是中国台湾侯今吾(Don Ho)个人开发者的一款开源的纯文本编辑器。 Notepad++ 8.8.1及之前版本存在安全漏洞,该漏洞源于安装程序存在不安全可执行文件搜索路径导致权限提升。
描述
This is my reproduce PoC for CVE-2025-49144
介绍
## 1. Overall
**CVE-2025-49144** là 1 lỗ hổng **local privilege escalation** trong **installer** của **Notepad++ 8.8.1** do **uncontrolled executable search path** (binary planting).

Trong quá trình cài đặt, installer gọi `regsvr32` **không chỉ định đường dẫn tuyệt đối**, dẫn đến việc ưu tiên tìm trong thư mục hiện tại. Kẻ tấn công chỉ cần đặt một `regsvr32.exe` độc hại cùng file Installer để mã độc được thực thi với đặc quyền cao (admin/SYSTEM tùy ngữ cảnh). 

Lỗi đã được vá ở **8.8.2** bằng cách gọi `regsvr32` từ system dir. 


## 2. Analysis

Chuỗi hành vi cốt lõi được nêu rõ trong advisory Github như sau:

> Installer gọi:
> `ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_01.dll"'`
>
> thay vì chỉ định tuyệt đối:
> `ExecWait '$SYSDIR\regsvr32.exe /u /s "$INSTDIR\NppShell_01.dll"'`

Để hiểu rõ hơn bug, ta tìm hiểu 1 chút về
điểm mấu chốt là **search order** của Windows: khi không có đường dẫn tuyệt đối, theo Microsoft, Windows sẽ dò theo chuỗi ưu tiên sau (dừng lại ngay khi thấy file khớp, và tự thêm .exe nếu thiếu):

- Thư mục chứa chính tiến trình gọi (application directory – nơi file .exe của installer đang nằm)

- Current directory của tiến trình cha (thường cũng chính là thư mục bạn đang chạy – rất hay trùng Downloads)

- System32 (`%SystemRoot%\System32`)

- System (16-bit)

- Windows directory (`%SystemRoot%`)

- Các thư mục trong PATH (theo thứ tự từ trái sang phải)
### 2.1. Phân tích flow thực thi
```
TLDR:
1. Đặt crafted regsvr32.exe vào thư mục Downloads.

2. Tải và chạy Notepad++ 8.8.1 installer từ cùng thư mục (double-click + chấp nhận UAC).

3. Vì installer gọi regsvr32 không chỉ định đường dẫn, Windows theo search order sẽ chạy regsvr32.exe trong thư mục của installer trước C:\Windows\System32.

4. Kết quả: crafted regsvr32.exe được thực thi với quyền của installer (elevated).

5. Nếu payload có bước lấy token SYSTEM (token duplication) thì attacker có thể spawn shell NT AUTHORITY\SYSTEM; nếu không, payload vẫn chạy với quyền admin của user hiện tại.
```
Đầu tiên, installer Notepad++ 8.8.1 chạy `ExecWait 'regsvr32 /u /s "$INSTDIR\NppShell_01.dll"'` để unregister shell extension cũ.

Tiếp theo, search order kích hoạt binary mà attacker đã planting từ trước:
vì không chỉ định đường dẫn tuyệt đối của binary, Windows dò theo thứ tự mình đã giải thích qua như trên, do đó, nếu có sẵn file `regsvr32.exe` “giả” trong cùng thư mục chạy installer (ví dụ `Downloads`)thì nó sẽ được gọi trước bản nằm trong `C:\Windows\System32\`.

Và vì quyền của installer được elevate qua UAC nên binary mà nó kích hoạt cũng sẽ kế thừa quyền đó.

-> Tới đây, ta cơ bản đã thành công hiểu concept của bug và đã leo quyền thành công.

Trong quá trình mình research, đôi lúc mình có thấy ảnh chụp thể hiện đã lấy được quyền SYSTEM trong PoC thì mình muốn nói thêm rằng, để lấy được quyền `nt authority/system`, ta cần thiết kế binary chuyên cho việc lấy quyền SYSTEM, chứ nếu không làm gì thêm thì ta chỉ lấy được quyền của user chạy installer thôi.

Về phía mình, khi đã có quyền admin, mình thực hiện thêm một bước nữa trong payload để đạt được shell ở mức cao hơn: duplicate token từ một tiến trình chạy dưới SYSTEM (winlogon.exe), rồi gọi `CreateProcessWithTokenW` để khởi tạo một tiến trình cmd.exe mới được gán token đó -> kết quả là một shell chạy dưới NT AUTHORITY\SYSTEM. Đây là phần mở rộng của payload (giai đoạn 2) chứ không phải hành vi mặc định của ExecWait hay reverse shell đơn thuần.

Và để tránh làm treo installer, payload được thiết kế detached / self-reexec: tiến trình cha (được installer gọi) sẽ duplicate token và spawn một tiến trình con độc lập chạy dưới SYSTEM, rồi thoát ngay. Installer thấy `regsvr32.exe` đã kết thúc và tiếp tục cài đặt bình thường, trong khi shell SYSTEM của attacker vẫn tồn tại và có thể tương tác qua listener.


## 3. PoC
Video: 
https://youtu.be/ehYVZ1ZQtAs

## 4. Appendix

1. Source code `regsvr32.c`: https://github.com/havertz2110/CVE-2025-49144/blob/main/regsvr32.c

2. Link tham khảo
- https://www.cyberproof.com/blog/cve-2025-49144-notepad-privilege-escalation-vulnerability-detection-analysis-and-practical-defenses/

- https://github.com/notepad-plus-plus/notepad-plus-plus/security/advisories/GHSA-9vx8-v79m-6m24

- https://github.com/notepad-plus-plus/notepad-plus-plus/security/advisories/GHSA-g5rj-m8mm-cgw6
文件快照

[4.0K] /data/pocs/16e90e8bfa8ab598c4d6395e46c22162526d4b9d ├── [5.0K] README.md ├── [5.7K] regsvr32.c └── [129K] regsvr32.exe 0 directories, 3 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。