410 字
2 分钟
卸载管理器 v0.0.7 发布:安全加固轮次 F11–F14

v0.0.7 以攻击视角重新审计 F1–F10 落地代码,发现并修复 4 处报告未覆盖或 F4 漏网的漏洞。

安全修复#

F11 残留/目录删除防 junction 跟随(高危)#

deleteResidualFiles / deleteDirectory 原先使用 fs::remove_all,而 isProtectedPath 只比对字符串路径。若残留目录是 junction/符号链接,指向 C:\Windows\System32 等系统目录,remove_all 会跟随 junction 进入目标目录递归删除,造成灾难性误删。

修复:删除前用 fs::weakly_canonical 解析真实路径并重查 isProtectedPath;新增 isReparsePoint() 基于 GetFileAttributesW(FILE_ATTRIBUTE_REPARSE_POINT) 判定重解析点,仅 fs::remove 删除链接本体,绝不进入目标目录递归。

F12 安装器自解压路径穿越(中危)#

自解压安装器原先 dest = target + "\\" + fe.rel,未校验 ..、绝对路径或 UNC。恶意或破损负载可把文件写出安装目录之外(如 C:\Windows\System32)。

修复:dest 经 GetFullPathNameW 解析后,严格校验落点必须位于 target\ 之内,越界文件跳过不写。

F13 MSI 卸载走完整路径(中危)#

MSI 卸载原先调用裸 msiexec.exe。便携目录用户可写,可被植入同名恶意 msiexec.exe 劫持(F4 漏网项)。

修复:改为 System32\msiexec.exe 完整路径。

F14 自卸载防 junction 跟随(中危)#

自卸载原先使用 PowerShell Remove-Item -Recurse -Force,会跟随 junction 删除系统目录,与 F11 同源。

修复:改用 cmd /c rmdir /s /q(不遍历 junction),PowerShell/cmd 均走 System32 完整路径。

验证#

  • 主程序 cmake --build 重编 registry.cpp + mainwindow.cpp + appicon.rc → EXIT 0。
  • uninst.cpp / installer_base.exe 重新编译链接 → EXIT 0。
  • 便携 zip 重建,内置 uninstaller.exe 校验为 v0.0.7。

下载#

卸载管理器 v0.0.7 发布:安全加固轮次 F11–F14
https://cai-zhi-huang.github.io/blog/posts/2026-08-26-uninstaller-v007/
作者
CZH
发布于
2026-08-26
许可协议
CC BY-NC-SA 4.0