作者: Ashish Kunwar (@D0rkerDevil)
日期: 2026-10-17
CVE: CVE-2026-89282
CWE: CWE-427(不受控制的搜索路径元素)/ CWE-732(关键资源权限分配不正确)
CVSS 3.1: 7.3 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
修复版本: Apache Lounge 2.4.68-260920 Win64(2026 年 9 月 20 日)
Apache HTTP Server 的 Apache Lounge Windows 发行版(早于构建版本 2.4.68-260920)在安装时使用了不安全的默认 ACL,授予 BUILTIN\Users 对安装目录树的写权限(WD + AD),包括 C:\Apache24\bin\。结合标准 Windows DLL 搜索顺序——对于不在 KnownDLLs 注册表项中的 DLL,会优先从应用程序目录加载,而非 System32——任何本地标准用户都可以植入一个代理 DLL,在 Apache 服务重启时以 NT AUTHORITY\SYSTEM 身份执行任意代码。
本 PoC 演示了完整利用过程:低权限用户在 C:\Apache24\bin\ 中植入一个带有 71 个 PE 导出转发器的代理 VCRUNTIME140.dll。Apache 重启时,httpd.exe(以 LocalSystem 身份运行)加载该代理,代理将所有合法调用转发给真实 DLL,同时在 DllMain 中执行具有 SYSTEM 权限的载荷。Apache 继续正常运行——不崩溃、不中断服务。
Apache Lounge 的 Windows 安装程序在 C:\ 下创建 C:\Apache24\,而在 Windows 上该目录默认继承 Authenticated Users: Modify 权限。安装程序未加固这些 ACL。这使得任何本地用户都能将新文件写入以下目录:
| 目录 | 影响 |
|---|---|
C:\Apache24\bin\ | DLL 劫持 — 21 个可劫持的系统 DLL |
C:\Apache24\modules\ | 直接模块注入 |
C:\Apache24\conf\ | 配置篡改 |
C:\Apache24\htdocs\ | Web 内容修改 |
Apache24 服务以 LocalSystem(SYSTEM)身份运行,启动类型为 AUTO_START,因此从应用程序目录加载的任何 DLL 都会以最高 Windows 权限级别执行。
# Cross-compile from Linux/macOS (mingw-w64)
x86_64-w64-mingw32-gcc -shared -o VCRUNTIME140.dll vcruntime140_hijack.c vcruntime140.def \
-Wl,--enable-stdcall-fixup -s
# Or compile on Windows (MSVC)
cl /LD vcruntime140_hijack.c /link /DEF:vcruntime140.def /OUT:VCRUNTIME140.dll
REM Create hard link to the real DLL for export forwarding
mklink /H "C:\Apache24\bin\vcruntime140_orig.dll" "C:\Windows\System32\VCRUNTIME140.dll"
REM Plant the proxy DLL
copy VCRUNTIME140.dll "C:\Apache24\bin\VCRUNTIME140.dll"
植入的 DLL 会在下一次 Apache 服务重启时触发。在生产服务器上,这通常通过以下方式发生:
httpd -k restart)重启后,httpd.exe 会以 SYSTEM 身份加载我们的代理 DLL。DllMain 载荷会执行以下操作:
Administrators 组httpd.exe 加载的 21 个系统 DLL 不在 KnownDLLs 注册表项中,因此可以从 C:\Apache24\bin\ 目录进行劫持:
| DLL | KnownDLL | 可劫持 |
|---|---|---|
| VCRUNTIME140.dll | 否 | 是 — 已利用 |
| ucrtbase.dll | 否 | 是 |
| KERNELBASE.dll | 否 | 是 |
| bcrypt.dll | 否 | 是 |
| msvcp_win.dll | 否 | 是 |
| CRYPTSP.dll | 否 | 是 |
| rsaenh.dll | 否 | 是 |
| CRYPTBASE.dll | 否 | 是 |
| bcryptPrimitives.dll | 否 | 是 |
| mswsock.dll | 否 | 是 |
| napinsp.dll | 否 | 是 |
| DNSAPI.dll | 否 | 是 |
| IPHLPAPI.DLL | 否 | 是 |
| winrnr.dll | 否 | 是 |
| nlansp_c.dll | 否 | 是 |
| wshbth.dll | 否 | 是 |
| rasadhlp.dll | 否 | 是 |
| fwpuclnt.dll | 否 | 是 |
| ntdll.dll | 否 | 是 |
| win32u.dll | 否 | 是 |
| gdi32full.dll | 否 | 是 |
在默认的 Windows Server 2022 配置下,标准用户无法自行触发 Apache 重启。我们穷尽测试了 16 种以上的方法——全部失败:
TerminateProcess → ACCESS_DENIEDnet stop/start Apache24 → SDDL 拒绝交互式/服务登录的 RP/WP 权限sc stop Apache24 → 拒绝访问httpd -k restart → SCM 访问被拒绝SeShutdownPrivilege 权限schtasks /ru SYSTEM → 需要管理员权限触发来自常规服务器维护,这在任何生产系统上都是不可避免的。
立即(手动):
icacls "C:\Apache24" /remove:g "BUILTIN\Users" /T
icacls "C:\Apache24" /grant "BUILTIN\Users:(OI)(CI)(RX)" /T
永久修复: 更新至 Apache Lounge 2.4.68-260920 或更高版本,该版本附带修正后的安装程序 ACL。
纵深防御: 部署进程缓解策略,将 DLL 加载限制为已签名的二进制文件。
| 文件 | 描述 |
|---|---|
vcruntime140_hijack.c | 代理 DLL 源代码 — DllMain 载荷 + 概念验证 |
vcruntime140.def | 导出转发定义(71 个导出 → vcruntime140_orig.dll) |
deploy_hijack.bat | 自动化部署脚本 |
| 日期 | 事件 |
|---|---|
| 2026-09-20 | Apache Lounge 发布 2.4.68-260920,包含 ACL 修复 |
| 2026-09-22 | CERT/CC 发布 CVE-2026-89282 |
| 2026-10-16 | 独立发现 + 完整 PoC(本工作) |
| 2026-10-17 | 确认为 CVE-2026-89282 的重复项;公开发布 |
本 PoC 仅出于教育和授权安全测试目的发布。MIT 许可证。
由 @D0rkerDevil 独立发现并记录。完整利用链在得知 CVE-2026-89282 之前已开发完成。