Avira VPN权限提升漏洞分析:不安全的更新路径导致DLL劫持

本文详细分析了Avira VPN 2.15.2.28160版本中的权限提升漏洞,该漏洞源于更新机制的不安全实现,允许低权限用户通过DLL劫持获得SYSTEM权限。文章涵盖漏洞原理、利用条件及时间线,适合安全研究人员参考。

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 权限运行更新二进制文件。攻击者可覆盖“AviraVPNInstaller.exe”为已签名的有效 Avira 可执行文件(版本高于已安装版本),该文件会在当前目录搜索多个 DLL。由于搜索顺序,可在“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”,需满足以下三个条件:

  1. “AviraVPNInstaller.exe”必须由 Avira 签名
  2. “AviraVPNInstaller.exe”的签名必须有效(任何文件修改都会使签名失效)
  3. “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 修复问题
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计