pfSense CE 2.9.0-DEVELOPMENT - 高危 - 远程 - RCE - OpenVPN 向导 CRLF
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-openvpn-wizard-crlf
类别: RCE 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
OpenVPN 向导将 Default Domain / NetBIOS scope 复制到 dns_domain / netbios_scope 时没有进行 is_domain() 检查,随后 openvpn_add_dhcpopts() 将它们写入一个已经带有 script-security 3 的服务器 config.ovpn。一个引号加 LF 即可闭合 push "dhcp-option ..." 行,并添加包括 up 在内的服务器指令。所需权限为 Wizard Subsystem,而非 OpenVPN advanced。这是 SA-26_07 的同类问题,后者仅点名了 vpn_openvpn_server.php。
| ID | 暂无 CVE |
| 类别 | RCE |
| 可达性 | 远程(已认证 WebGUI) |
| CWE | CWE-74 / CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 产品 | pfSense CE |
| 受影响版本 | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) OpenVPN 向导 |
| 认证 | 具有 page-pfsensewizardsubsystem 的 WebGUI 会话 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我固定了公共 master 9363ac5。实验环境为固定版本的向导分配加上 openvpn_add_dhcpopts,然后在 tun0 上运行 OpenVPN 2.6.14。回环地址 127.0.0.1:18820。如果 2.9.0-RELEASE 已修复该辅助函数,那么这与 SA-26_07 是同一个 SA。
| 方法 | 汇聚点 | 权限 |
|---|---|---|
完成 OpenVPN Remote Access 向导;将 Default Domain(或 NetBIOS scope)设置为一个能闭合 push 行并添加 up 的值 | openvpn_add_dhcpopts 写入服务器 config.ovpn(openvpn.inc:697-738),且带有 script-security 3(:905) | 完整性(实验证明): OpenVPN 2.6.14 在 tun0 上执行了该 up 并写入了见证文件(up-exec=yes)。对照值 example.com 保持为单个 DOMAIN push。 |
| 同一主机命令 | OpenVPN up 以守护进程用户身份执行(在 pfSense 上为 root) | 侦察(推断): 主机文件系统、config.xml、密钥。 |
| 破坏 OpenVPN 配置或主机命令 | OpenVPN 服务器 | 可用性(推断): OpenVPN / 防火墙中断。 |
实验证明 vs 推断: 向导分配、dhcpopts up、script-security 3、对照干净、以及 tun0 up-exec 均为实验证明。文件系统侦察是从 up 进程推断的。CCD blob 中的相同投毒未被执行(ccd-up-ignored=yes)。
要求: 具有 page-pfsensewizardsubsystem 的 WebGUI 会话。CSRF token。不需要 page-openvpn-server 或 page-openvpn-server-advanced。
| 攻击面 | 实验 |
|---|---|
对照域名 example.com | 单个 DOMAIN push,control-clean=yes |
CCD up(OpenVPN 2.6 子集) | ccd-up-ignored=yes |
| 未认证 / 无 token 的 CSRF | 关闭 |
OpenVPN custom_options | 预期的 advanced 权限 |
| 诊断:Command | 除非同时被授予,否则保持关闭 |
cd lab
./run.sh
回环地址 127.0.0.1:18820。Compose 项目 pfsense-openvpn-wizard-crlf。镜像标签 pfsense-openvpn-wizard-crlf:2.9.0-dev。见证 PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS。最后一行:
SUCCESS PFSENSE-OPENVPN-WIZARD-CRLF wizard-assign=yes dhcpopts-up=yes script-security-3=yes control-clean=yes up-exec=yes PFSENSE-OPENVPN-WIZARD-CRLF-WITNESS
在向导的 defaultdomain / nbtscope 变为 dns_domain / netbios_scope 之前,对其应用 is_domain()(或剥离 CR/LF/引号),与 IPsec mobile 已有的做法相同。在 openvpn_add_dhcpopts() 内部进行净化,以覆盖所有调用方,包括向导。
9363ac5b8651a1c7a333180425ce7719070f95f9openvpn_wizard.incopenvpn.inc openvpn_add_dhcpoptsfd301381(不在此公共代码树中)