Avira VPN (2.15.2.28160) 通过不安全更新路径实现权限提升
产品版本: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”,并利用当前目录搜索顺序,在“C:\Windows\Temp”中放置DLL,从而提升至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侧加载。
要劫持“AviraVPNInstaller.exe”,需满足以下三个条件:
- “AviraVPNInstaller.exe”必须由Avira签名
- “AviraVPNInstaller.exe”上的签名必须有效(任何文件修改都会使签名失效)
- “AviraVPNInstaller.exe”的版本号需证明更新尚未在系统中安装
这意味着我们需要滥用一个Avira签名的文件,且其版本高于已部署版本。
经过一番搜寻,“ToastNotifier.exe”符合所有要求:
(若对ToastNotifier.exe的来源感到好奇,它来自Avira防病毒产品套件,曾在防病毒平台报告的漏洞中以类似方式被滥用)。
要利用此漏洞,我们只需将“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修复问题