Pritunl 漏洞概述
Pritunl VPN 客户端服务容易受到在 Windows 上以 SYSTEM 身份写入的任意文件的攻击。这是由于 Pritunl ProgramData 文件夹的目录权限不安全。由于特权 Pritunl VPN 服务以 SYSTEM 身份执行命令而无需指定可执行文件的完整路径,因此可以利用任意文件写入进行完全特权升级。
其影响是将权限提升到 Windows 上的 SYSTEM。
受影响的产品摘要
供应商:Pritunl
产品:Pritunl VPN Client
确认漏洞版本:1.2.3019.52
固定版本:1.2.3019.52a
产品链接:https://client.pritunl.com/#install确认漏洞平台:Windows
任意文件写入系统技术细节
用户将 V** 配置文件导入 Pritunl VPN Client 后,会在“%APPDATA%pritunlprofiles[profile_ID].ovpn”中写入一个文件。当用户尝试连接到配置文件时,VPN 配置文件会清除危险的OpenVPN 指令,然后由Pritunl VPN 服务写入“%PROGRAMDATA%Pritunl[profile_ID].ovpn”。写入文件后,Pritunl VPN 服务充当 openvpn.exe 可执行文件的包装器,并以 SYSTEM 身份执行 OpenVPN,在“–config”参数中提供经过清理的配置文件。
由于默认情况下任何用户都可以在 %PROGRAMDATA%Pritunl* 中创建新文件,因此可以使用匹配的配置文件 ID 并在尝试连接到profile Pritunl VPN 服务最终将使用修改后的配置文件执行 openvpn.exe。
即使 openvpn.exe 使用“–security-script 1”标志执行,阻止执行外部命令,这仍然允许使用“log”OpenVPN 指令,它将日志输出作为 SYSTEM 写入任何指定的文件,并且它可以控制日志输出的部分内容。
导入名为“privesc”的配置文件后,可以使用以下 PowerShell 命令并在循环运行时重复单击 privesc 配置文件上的“连接”来完成。
代码语言:javascript复制$profile_id = (( Select - String '{"name":"privesc"' $env : APPDATA pritunl profiles* ) .filename )。拆分('。' )[ 0 ];而(1 ){ “client`ntls-client`ndev TUN`nlog`” C :\程序文件(x86 )\ Pritunl \ipconfig 。bat `"` nath -用户- pass `nca `"INJECTED CONTENT`"" | 添加内容“ ProgramDataPritunl$profile_id "}
利用文件写入实现完全权限提升
可以利用以 SYSTEM 身份写入的任意文件通过以下方式获得以 SYSTEM 身份执行的命令。
每次使用 Pritunl VPN Client 进行连接尝试时,以 SYSTEM 身份运行的 Pritunl VPN 服务都会调用“ipconfig”命令。执行“ipconfig”的命令行是在没有指定可执行文件的完整路径的情况下完成的。由于此命令是从“C:Program Files {x86)Pritunl”的工作目录执行的,因此可以利用上面的任意文件写入漏洞将命令写入“C:Program Files {x86)Pritunl ipconfig.bat”。然后,通过尝试使用 Pritunl VPN 客户端再次连接,该批处理文件将作为 SYSTEM 执行。
结论
披露时间表
虽然这是我们在 V** 客户端中的众多发现之一(更多即将发布),但这是唯一一个开源的。
这也是一个很好的提醒,虽然开源软件确实提供了透明度优势,但它并不是安全的灵丹妙药。
感谢 Zachary Huff 和 Pritunl 团队在披露后提供的快速补丁。