提权漏洞一
测试环境
- 软件版本:Avira Phantom VPN version 2.15.2.28160
- 下载链接:https://package.avira.com/package/oeavira/win/int/avira_en_vpn__ws.exe
- 测试系统:Windows 10 1803 (x64)
- 漏洞类别:Avira VPN权限提升漏洞
漏洞描述
当用户在VPN设置菜单中修改配置信息时,Avira Phantom VPN服务会修改C:\ProgramData\Avira\VPN\VpnSharedSettings.backup
以及C:\ProgramData\Avira\VPN\VpnSharedSettings.config
的DACL。如果攻击者在C:\ProgramData\Avira\VPN\VpnSharedSettings.backup
设置硬链接(hardlink),就有可能覆盖任意文件上的DACL,最终将低权限用户提升至SYSTEM
权限。
漏洞分析
当用户通过VPN GUI修改配置时,VPN服务(即Avira.VPNService.exe
)就会调用Avira.VPN.Core.dll
中的AdjustSecurity()
函数来修改DACL,使通过身份认证的用户能将数据写入C:\ProgramData\Avira\VPN\VpnSharedSettings.backup
或者C:\ProgramData\Avira\VPN\VpnSharedSettings.config
中。当修改配置后(低权限用户可以执行该操作),该服务就会调用EnsureFileExists()
,确保系统中存在“共享的”VPN配置文件(C:\ProgramData\Avira\VPN\VpnSharedSettings.backup
以及C:\ProgramData\Avira\VPN\VpnSharedSettings.config
)。
如果配置文件不存在,目标服务就会创建该文件;如果配置文件存在,目标服务会继续调用StorageSecurity.AdjustSecurity()
函数。对于共享及私有配置文件,传入的StorageType
分别为AllUserAccess
或者Secure
。“私有”VPN配置文件对应的是Secure
存储类型,而共享型配置文件对应的是AllUserAccess
类型。
当目标服务调用AdjustSecurity()
函数时(传入配置文件的存储类型),就会适当调整文件对应的DACL,这就是存在问题的地方。对于“共享型”配置文件(StorageType
为AlluserAccess
),VPN服务会调用AdjustSecurity()
,授予每个人对该文件的完全控制权限:
这种操作非常危险,因为SetAccessControll()
会修改文件的DACL,而低权限用户可以控制该文件。那么,我们如何利用这一点呢?
首先,攻击者需要在C:\ProgramData\Avira\VPN\VpnSharedSettings.backup
上创建硬链接,将其指向某个文件,这里我们将其指向C:\Program Files (x86)\Avira\VPN\OpenVPN\phantomvpn.exe
,这样我们就能覆盖C:\Program Files (x86)\Avira\VPN\OpenVPN\phantomvpn.exe
的DACL。
执行该操作后,我们可以打开VPN应用,点击“Settings”标签页:
随后,取消设置“Send Diagnostic Data”,这样就会触发配置文件修改操作,进入目标代码路径。
此时,C:\Program Files (x86)\Avira\VPN\OpenVPN\phantomvpn.exe
的DACL已经被覆盖,任何用户都可以写入该文件。攻击者现在只需要复制一个恶意程序,替换该文件即可。
完成该操作后,攻击者需要尝试连接VPN就能执行该恶意程序,只需点击VPN GUI中的“Secure my Connection”按钮即可。
点击“Secure my Connection”按钮后,我们应该能看到以SYSTEM
权限运行的一些cmd.exe
进程。
披露时间
- 2018年9月28日:向Avira反馈漏洞
- 2018年10月1日:Avira确认漏洞报告
- 2018年12月4日:Avira复现该漏洞
- 2018年12月13日:修复该问题
提权漏洞二
测试环境
- 软件版本:Avira Phantom VPN
- 下载链接:https://package.avira.com/package/oeavira/win/int/avira_en_vpn__ws.exe
- 测试系统:Windows 10 1709 (x64)
- 漏洞类别:Avira VPN权限提升漏洞
漏洞描述
Avira Phantom VPN服务在检查更新时,会执行一些检查操作(服务启动时就会执行检查更新操作,因此系统启动时或者用户手动启动该服务都会执行这些操作)。开始更新时,VPN服务会将更新文件下载到C:\Windows\Temp\
的AviraVPNInstaller.exe
,而任何用户都可以写入该文件。随后,目标服务会检查文件是否经过签名,并且版本号是否高于已安装产品的版本。如果满足这些条件,那么目标服务就会以SYSTEM
权限运行下载的更新程序。攻击者可以使用经过签名的、有效的Avira可执行文件来替换AviraVPNInstaller.exe
,而这个Avira可执行文件会查找当前目录中的各种DLL。根据DLL的搜索顺序,攻击者有可能将DLL植入C:\Windows\Temp
目录中,最终提升至NT AUTHORITY\SYSTEM
权限。
漏洞分析
当Avira VPN服务(Avira.VPNService.exe
,版本号2.15.2.28160)启动时,会检查是否存在更新版本:
一番分析后,我们发现该VPN服务会使用C:\Windows\Temp
目录来更新程序:
大家可能都知道,经过身份认证的任何用户都可以向C:\Windows\Temp
目录中写入文件(但不能读取)。一旦更新文件已存在该目录中(C:\Windows\Temp\AviraVPNInstaller.exe
),目标VPN服务就会检查可执行文件的FileVersion
属性,判断该“更新”是否已安装到目标系统中:
如果该文件版本尚未安装到系统中,则目标服务会检查文件,确保该文件为有效文件,并且经过Avira签名:
如果该文件的确是Avira签名的有效文件,那么VPN服务就会运行这个“更新”包。由于低权限用户可以写入这个过程中涉及的文件,因此有可能劫持更新包,发起DLL侧加载(sideload)攻击。
为了劫持AviraVPNInstaller.exe
,攻击者需要满足如下3个条件:
1、AviraVPNInstaller.exe
必须带有Avira签名;
2、AviraVPNInstaller.exe
上的签名必须有效(对该文件的任何修改都会破坏签名有效性);
3、AviraVPNInstaller.exe
对应的版本号必须尚未安装到目标系统中。
这意味着我们需要滥用某个Avira签名文件,并且该文件版本号还要大于已部署的版本。
经过一番搜索后,我们发现ToastNotifier.exe
满足这些条件:
ToastNotifier.exe
来自于Avira Antivirus产品套装中,根据Antivirus平台上之前的一份漏洞报告,我们可以使用类似的方式来滥用这个文件。
为了利用该文件,我们只需要将ToastNotifier.exe
复制到C:\Windows\Temp\AviraVPNInstaller.exe
。由于所有条件都已满足,VPN服务就会在启动时以SYSTEM
权限运行该文件。攻击者可以通过重启操作、或者以管理员身份运行powershell,依次执行Get-Service AviraPhantomVPN | Stop-Service
以及Get-Service AviraPhantomVPN | Start-Service
来启动服务。一旦成功执行,ToastNotifier.exe
(现在是C:\Windows\Temp\AviraVPNInstaller.exe
)就会尝试从C:\Windows\temp
目录中加载一系列DLL:
为了将权限提升至SYSTEM
,我们只需要植入其中一个DLL即可,这里我们选择劫持cryptnet.dll
。这样VPN服务就会以SYSTEM
权限执行我们的AviraVPNInstaller.exe
程序,后者会以SYSTEM
权限加载cryptnet.dll
,这正是我们的恶意代码。最终,我们的低权限用户可以成功提升至SYSTEM
权限:
披露时间
- 2018年9月28日:将漏洞提交至Avira
- 2018年10月1日:Avira复现该漏洞
- 2018年12月13日:Avira修复该漏洞
发表评论
您还未登录,请先登录。
登录