漏洞概述
AWS VPN应用程序存以 SYSTEM 身份写入任意文件,这可能导致提权和信息泄露漏洞。该漏洞可能导致用户的 Net-NTLMv2 哈希被VPN 配置文件中的 UNC 路径泄露。这些漏洞已确认影响版本 2.0.0,并已在版本 3.0.0 中修复。
要修复漏洞,请升级到可在此处下载的3.0.0 版本。
受影响的产品
供应商:Amazon Web Service (AWS)
产品:AWS VPN Client (Windows)
确认漏洞版本:2.0.0
固定版本:3.0.0
CVE-2022-25166:任意文件写入
在 Amazon AWS VPN Client 2.0.0 中发现了一个问题。在验证 VPN 配置文件期间存在 TOCTOU 竞争条件。这允许在 AWS VPN Client 服务(作为 SYSTEM 运行)处理文件之前将 AWS VPN Client 允许参数列表之外的参数注入到配置文件中。低级用户(例如 log)可以注入危险的参数,这将导致可在日志文件中写入任意内容。
CVE-2022-25165:UNC 路径导致信息泄露
在为指令(如 "auth-user-pass")引用文件路径时,可以在OpenVPN配置文件中包含一个UNC路径。当此文件被导入 AWS VPN 客户端并且客户端尝试验证文件路径时,它会在路径上执行打开操作并将用户的 Net-NTLMv2 哈希泄漏给外部服务器。
AWS VPN客户端介绍
AWS VPN Client 是一个桌面应用程序,可用于连接到 AWS Client VPN。
官网网站介绍为:
AWS Client VPN 的客户端是免费的。您可以将您的计算机直接连接到 AWS Client VPN 以获得端到端的 VPN 体验。该软件客户端与 AWS Client VPN 的所有功能兼容。
复现:任意文件写入漏洞
AWS VPN 客户端安装一个 Windows 服务,以管理员身份运行,充当自定义 OpenVPN 客户端可执行文件的包装器。低权限用户可以使用 AWS VPN 客户端尝试使用导入的 OpenVPN 配置文件连接到 VPN。
有一些已知的危险 OpenVPN 指令会在 VPN 连接期间执行,例如:运行命令或将日志文件写入特定目录等操作。AWS VPN 客户端尝试禁止在配置文件中使用的 OpenVPN 指令的操作,但是限制不全,导致可以在执行 OpenVPN 可执行文件之前执行的。这使得在配置文件被检查后,OpenVPN可执行文件可通过条件竞争来执行,在文件中注入不允许的指令。
您可以在下面看到由 AWS VPN 服务生成的日志文件,其中显示了从成功验证配置到执行 OpenVPN 客户端之间的时间。
接着可以很容易使用Powershell脚本监控日志文件,并在成功验证配置文件后,在OpenVPN可执行文件处理之前立即将恶意指令写入配置文件。
此时便可以写入不允许执行指令,就像在配置文件中正常添加一条允许指令这么简单,此时便可以轻易的进行权限提升了。注意:AWS VPN 服务使用“–script-security 1”标志启动 OpenVPN 可执行文件,这会阻止执行外部二进制文件或脚本。
尽管我们不能直接运行命令,但仍然可以使用“log”指令将日志输出重定向到我们选择的任何路径或文件。由于执行是以SYSTEM用户的身份进行的,这就给了我们一个写文件的特权。在最简单的情况下,这可以用来写一个批处理脚本到一个管理员的根目录。
CVE-2022-25166 相关脚本可以查看我的github
复现:UNC路径导致信息泄露
AWS VPN客户端对作为VPN配置文件导入客户端的配置文件进行验证的过程中,其中一个验证步骤是当任何文件路径被提供给接受文件路径作为参数的指令时,检查文件路径是否存在。
接受文件路径的有效指令的一些示例是:
auth-user-pass
AWS VPN Client 的验证是通过对路径执行文件打开操作以确保其存在来完成的。
AWSVPNClient.Core.dll 包含 OvpnConfigParser.cs,它主要用“CheckFilePath”方法来检查文件路径是否有效。如上图代码中可发现:函数中调用了File.Open()。
重点来了!
此时我们可以通过提供一个包含 UNC 路径作为文件路径的文件来利用。当文件在导入前经过验证时,它将打开 UNC 路径并将用户的 Net-NTLMv2 哈希发送到外部服务器。
CVE-2022-25166 相关脚本可以查看我的github