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 可执行文件(如 ToastNotifier.exe)覆盖 AviraVPNInstaller.exe,并通过在当前目录放置恶意 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”,随后加载恶意“cryptnet.dll”(即攻击者代码),实现从低权限用户到 SYSTEM 的提权:
披露时间线
- 2018年9月28日:向 Avira 提交漏洞;
- 2018年10月1日:Avira 复现问题;
- 2018年12月13日:Avira 修复漏洞。