漏洞描述
Thales SafeNet Sentinel HASP LDK是一个软件保护和许可管理解决方案,用于帮助软件开发者保护其应用程序免受盗版和未经授权使用,由Thales SafeNet公司开发并提供支持。
该工具的msi安装程序在执行修复模式/fa时,存在DLL劫持漏洞。导致本地普通用户可以劫持%temp%下的安装程序,以system权限执行任意代码,实现本地权限提升。
影响范围
Thales SafeNet Sentinel HASP LDK < 9.16
复现环境
操作系统:Win7x64 sp1
分析工具:Procmon、Procexp
初识MSI文件
MSI 文件是 Windows Installer 包的文件扩展名,它通常用于安装、升级和卸载 Windows 程序。MSI 文件包含了程序安装所需的所有信息,如文件、注册表项、启动服务等。
MSI 文件运行时,Windows Installer 服务会以系统权限启动msiexec.exe 程序。然后msiexec.exe 将根据 MSI 文件中指定的安装步骤和条件,可能会多次以系统权限或用户权限启动其他程序或脚本来完成安装或卸载操作。这些额外的程序或脚本可能包含在 MSI 文件中,也可能来自外部引用。
漏洞分析
Windows Installer程序msiexec.exe,运行时支持多个参数。比如这个漏洞相关的参数:/fa,这是修复选项,表示强制重新安装所有文件,如下图所示。
下载安装包Sentinel HASP LDK,下载地址:https://archive.org/details/isocd-sentinel_ldk_msi_run-time_install_api.rar,此安装包的版本为6.25。根据公开的漏洞描述,尝试使用修复选项“/fa”执行安装程序,但是提示错误,如下图所示。
此错误提示执行修复选项前需要先安装。所以先双击安装包文件HASP_Setup.msi进行安装。
安装成功后,使用Procmon监控msiexec.exe的行为,然后再次执行修复选项。从Procmon监控日志中可以看出,执行修复选项时,msiexec.exe在%temp%目录下释放了haspdinst_x64.exe程序,并创建进程运行,如下图所示。
此时从procexp进程管理工具中可以看出,haspdinst_x64.exe进程的用户名为SYSTEM。
查看haspdinst_x64.exe加载DLL的监控日志,发现存在fltlib.dll,newdev.dll等DLL劫持,如下图所示。
利用haspdinst_x64.exe存在的DLL劫持,可以实现本地权限提升。
复现步骤
isocd-sentinel_ldk_msi_run-time_install_api.rar安装包解压后双击HASP_Setup.msi文件进行安装。
编写DLL劫持程序,在DllMain中将当前进程名,命令行参数,用户名等信息记录到C:\users\Public\poc.txt文件中,如下图所示。
编译成功后将得到的DLL文件重命名fltlib.dll,复制到%temp%目录下,运行修复选项命令:msiexec.exe /fa HASP_Setup.msi,如下图所示。
从生成的文件C:\users\Public\poc.txt可以看出,运行haspdinst_x64.exe时的用户为SYSTEM,提权漏洞复现成功,如下图所示。
当然也可以在DllMain中创建cmd进程,利用此漏洞获取SYSTEM权限的cmd,如下图所示。
参考链接
https://www.ddpoc.com/DVB-2024-6338.html
https://github.com/ewilded/CVE-2024-0197-POC