今天小编分享的互联网经验:WPS Office从路径穿越到远程代码执行漏洞(CVE-2024-7262)分析与复现,欢迎阅读。
漏洞概述
WPS Office 程式 promecefpluginhost.exe 存在不当路径验证问题,允许攻击者在 Windows 上加载任意 Windows 库檔案。该漏洞已被 APT-C-60 攻击者利用,当用户打开 MHTML 格式的文档时,只需单击一个恶意制作的超链接,即可执行攻击者指定的恶意库檔案,实现远程代码执行。
影响范围
WPS Office 版本 12.2.0.13110-12.2.0.16412
复现环境
作業系統:Win10 10.0.18363.592 WPS Office 版本:WPS Office 12.2.0.13110
分析过程
WPS 程式安装后注册了一个名为 ksoqing 的自定义 URL 協定,系統資料庫路径为:计算机 HKEY_CLASSES_ROOTksoqingshellopencommand,其内容为 "C:Users【用户名】AppDataLocalKingsoftWPS Office12.2.0.13110office6wps.exe" /qingbangong "%1"。即访问以 ksoqing 开头的 URL 協定时,将启动 wps.exe 程式,并传递 /qingbangong 参数,%1 则被替换为以 ksoqing 开头的協定链接,一并作为 wps 启动的参数。
此时 wps.exe 程式解析参数 /qingbangong,并将 ksoqing 链接内容一并发送到 C:Users【用户名】AppDataLocalKingsoftWPS Office12.2.0.13110office6wpscloudsvr.exe
wpscloudsvr.exe 中的 qingbangong.dll 解析自定义 URL 链接内容。当 type 参数为 ksolaunch 时,将启动 launchname 参数指定的程式,参数使用 base64 编码。
launchname 参数指定的程式启动时,wpscloudsvr.exe 会将 URL 链接中的 cmd 参数使用 base64 解码,然后传递给它。
如果 launchname 参数指定的是 promecefpluginhost.exe,该程式启动后,将加载 ksojscore.dll,然后解析命令行中的 -JSCefServicePath。
这个参数可以指定一个檔案名,这个檔案会被 kso_qt::QLibrary::load 函数加载到内存执行。默认情况下,如果只是指定一个檔案名,会按照 DLL 搜索顺序搜索和加载这个檔案,比如加载同 EXE 目录下指定的 DLL 檔案。但是这个参数未做任何过滤,可以指定 ".." 包含目录的路径,存在路径穿越漏洞,可以加载任意指定的 DLL 檔案,最终实现任意代码执行。
使用路径穿越的漏洞可以加载指定 DLL 檔案,但这还不够。APT-C-60 攻击者使用 MHTML 格式的 xls 电子表格檔案,利用其特性,实现下载远程 DLL 檔案的目的。WPS 支持 MHTML 格式的文档,这种文档可以包含 HTML、CSS 和 JavaScript 等檔案,方便在浏览器中显示文档。
文档中可以使用 img 标签,指定远程 DLL 檔案。
当文档被打开时,wps 使用 _XUrlDownloadToCacheFile 函数下载檔案到 temp 目录下的 wpsINetCache 目录中。
下载后的檔案名,使用的是下载链接(UNICODE 编码)的 MD5 值。
最终配合上述路径穿越漏洞,在 -JSCefServicePath 参数中指定下载的檔案名,实现远程代码执行。这里还有一个小技巧,因为下载后的檔案名并没有 .dll 后缀,而在加载的时候如果没有指定 .dll 后缀,会自动补上该后缀再加载。为了避免在加载的时候找不到指定檔案导致失败,在 -JSCefServicePath 参数中指定下载的檔案名时,需要在檔案名最后额外加个 "."。
漏洞复现
新建 xls 格式的文档,添加超链接,超链接可任意,并另存为 MHTML 格式的文档。
根据远程 DLL 的下载链接,使用 poc.py 计算下载后的檔案名,并最终生成 ksoqing 協定链接。
将 ksoqing 链接替换导出的 MHTML 格式文档中的超链接。
再根据远程 DLL 的下载链接,添加 img 标签,实现远程下载 DLL 檔案。
开启远程 DLL 下载服务,然后打开 MHTML 文档,点击超链接,触发漏洞。
参考链接
ddpoc 链接:
https://www.ddpoc.com/DVB-2024-8279.html
https://nvd.nist.gov/vuln/detail/CVE-2024-7262