pritunl漏洞是什么
Pritunl 是一款基于 OpenVPN 协议的分布式企业 VPN 服务,旨在帮助企业整合数据中心与 AWS、GCP、Azure 等云环境,通过站点到站点连接或远程用户访问实现跨环境协同。作为开源项目,它以 “OpenVPN 兼容性 + 云原生 scalability” 为卖点,成为许多企业替代商业 VPN 的选择。Pritunl 官方曾宣称其为 “最安全的 VPN 服务器”,但渗透测试人员的实际经验显示,这款工具存在两个足以威胁企业安全的漏洞 ——服务器端信息泄露与Windows 客户端特权提升。
一、服务器端漏洞:1.29.2145.25 版本的 “用户名枚举” 陷阱(CVE-2023-32731)
2023 年,安全研究人员发现 Pritunl 1.29.2145.25 及更早版本存在信息泄露漏洞,允许攻击者通过认证尝试枚举有效 VPN 用户名。
漏洞原理:“差异化错误提示” 的致命缺陷
当用户尝试登录 Pritunl 服务器时,系统对 “有效用户名 + 错误密码” 与 “无效用户名 + 任意密码” 的响应存在明显差异:
- 若用户名有效,服务器返回 “密码错误”;
- 若用户名无效,服务器返回 “用户不存在”(或类似提示)。
- 攻击者可通过自动化脚本(如 Python 的 requests 库)循环尝试不同用户名,快速筛选出系统中的有效用户列表。例如,使用以下伪代码:
import requests usernames = [“admin”, “user1”, “user2”] # 字典中的用户名 for user in usernames: data = {“username”: user, “password”: “random”} response = requests.post(“https://pritunl-server/auth”, data=data) if “密码错误” in response.text: print(f”有效用户:{user}”)
风险影响:后续攻击的 “敲门砖”
有效用户名是攻击者进行密码爆破、钓鱼攻击的基础。一旦获取到有效用户列表,攻击者可以:
- 使用字典攻击破解弱密码(如 “Password123”);
- 向目标用户发送钓鱼邮件(如 “您的 VPN 密码即将过期,请点击链接重置”);
- 结合其他漏洞(如客户端特权提升)发动更致命的攻击。
- 修复状态:已在后续版本修复
Pritunl 在 1.29.2145.30 版本中修复了该漏洞,通过统一错误提示(无论用户名是否存在,均返回 “认证失败”)防止枚举。当前最新稳定版本为 1.30.x,建议所有用户立即升级。
二、Windows 客户端漏洞
相较于服务器端的信息泄露,Pritunl Windows 客户端的任意文件写入漏洞更具破坏性 —— 它允许普通用户通过篡改配置文件,以 SYSTEM 权限执行命令,直接威胁企业终端安全。
技术背景:配置文件的 “清理 – 执行” 逻辑
当用户导入 VPN 配置文件时,文件会被写入%APPDATA%\pritunl\profiles\[profile_ID].ovpn。当用户尝试连接时,Pritunl 服务会 “清理” 配置中的危险指令(如script-security),再将其复制到%PROGRAMDATA%\Pritunl\[profile_ID].ovpn,随后调用openvpn.exe(路径为C:\Program Files (x86)\Pritunl\openvpn.exe)执行该配置。
问题出在 **%PROGRAMDATA%\Pritunl*目录的权限 **:默认情况下,该目录允许任意用户(包括普通用户)创建或修改文件。攻击者可利用这一点,向该目录写入恶意配置文件 —— 只要 ID 匹配,Pritunl 服务就会使用修改后的配置执行openvpn.exe。
利用关键:“log” 指令的 “合法滥用”
虽然 Pritunl 服务以–security-script 1参数执行openvpn.exe(禁止外部命令执行),但仍允许使用log指令 —— 该指令可将日志输出写入指定文件,且日志内容的部分的可控制。例如,攻击者可构造如下配置:
client tls-client dev TUN log “C:\Program Files (x86)\Pritunl\ipconfig.bat” # 日志写入目标文件 auth-user-pass ca “恶意内容” # 日志中会包含此内容
当openvpn.exe执行该配置时,会将日志(包含 “恶意内容”)写入ipconfig.bat。而 Pritunl 服务在执行openvpn.exe时,会调用ipconfig命令(用于获取网络信息)—— 由于未指定完整路径(如C:\Windows\System32\ipconfig.exe),系统会优先执行C:\Program Files (x86)\Pritunl\ipconfig.bat(即攻击者写入的恶意文件)。
利用流程:从 “文件写入” 到 “特权提升”
1、导入配置文件:用户导入名为 “privesc” 的配置文件,获取其profile_ID(可通过Select-String ‘{“name”:”privesc”}’ $env:APPDATA\pritunl\profiles\*提取)。
2、循环写入恶意配置:使用 PowerShell 脚本不断向%PROGRAMDATA%\Pritunl\[profile_ID].ovpn写入包含log指令的配置:
$profile_id = ((Select-String ‘{“name”:”privesc”}’ $env:APPDATA\pritunl\profiles\*).filename).split(‘.’)[0] while ($true) { $content = @” client tls-client dev TUN log “C:\Program Files (x86)\Pritunl\ipconfig.bat” auth-user-pass ca “`@echo off & net user attacker P@ssw0rd /add & net localgroup administrators attacker /add” “@ $content | Out-File -FilePath “C:\ProgramData\Pritunl\$profile_id.ovpn” -Force Start-Sleep -Seconds 1 }
3、触发执行:用户反复点击 “连接” 按钮,Pritunl 服务会读取恶意配置,将日志写入ipconfig.bat。当ipconfig被调用时,恶意脚本会以 SYSTEM 权限执行 —— 例如,添加管理员用户 “attacker”。
修复状态:后续版本的 “权限加固” 与 “路径修正”
Pritunl 在后续客户端版本(如 1.30.x)中修复了该漏洞,措施包括:
- 限制%PROGRAMDATA%\Pritunl*目录的写入权限(仅允许 SYSTEM 用户);
- 过滤log指令的路径(禁止写入系统目录);
- 调用ipconfig时指定完整路径(C:\Windows\System32\ipconfig.exe)。
二、应对策略
Pritunl 的漏洞暴露了开源软件的 “安全短板”——依赖社区发现漏洞,需企业主动防范。对于使用 Pritunl 的用户来说,以下措施可降低风险:
1. 及时更新:规避已知漏洞
服务器端:升级至 1.30.x 版本(修复了用户名枚举漏洞);
客户端:升级至最新版本(修复了文件写入漏洞)。
2. 权限加固:限制敏感目录权限
检查%PROGRAMDATA%\Pritunl*目录的权限,确保仅 SYSTEM 用户具有写入权限;
限制C:\Program Files (x86)\Pritunl\目录的写入权限,防止恶意文件替换。
3. 监控异常:识别攻击行为
监控 Pritunl 服务器的认证日志,及时发现频繁的用户名尝试(如 1 分钟内尝试 100 个用户名);
监控%PROGRAMDATA%\Pritunl*目录的文件变化,发现异常的配置文件修改。
4. 多因素认证:降低 “枚举 + 爆破” 风险
启用 MFA(多因素认证),即使攻击者获取了有效用户名,也无法仅凭密码登录。
Pritunl 的漏洞提醒我们:开源软件的安全性需 “社区监督 + 企业自我保护” 结合。企业在使用开源工具时,不能依赖 “开源即安全” 的误区,而应通过 “及时更新 + 权限加固 + 监控预警” 的三重防线,将漏洞风险降至最低。
