abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-ipsec-login-banner
类别: RCE 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
IPsec 移动登录横幅仅经过长度检查后存储,随后未加引号地写入 strongswan.conf,作为 charon.plugins.attr.28672。strongSwan 在遇到 } 时结束未加引号的值。一个 Form_Input 安全的横幅(无换行符)可以关闭 attr / plugins 并打开 charon.start-scripts。在该页面上应用即执行 strongswanrc restart。charon 在启动时会对 start-scripts 路径执行 popen。所需权限为 page-vpn-ipsec-mobile,而非 IPsec 高级 / 诊断:命令。
| ID | 暂无 CVE |
| 类别 | RCE |
| 可达性 | 远程(已认证 WebGUI) |
| CWE | CWE-74 |
| CVSS | 高危: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) IPsec login_banner |
| 认证 | 具有 page-vpn-ipsec-mobile 的 WebGUI 会话 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我固定了公共 master 9363ac5。实验环境固定了 ipsec_strongswan_confgen 以及真实的 /usr/lib/ipsec/charon。回环地址 127.0.0.1:18850。未使用 include 前缀。
| 方法 | 汇聚点 | 权限 |
|---|---|---|
POST vpn_ipsec_mobile.php 保存,携带 login_banner_enable 以及一个关闭 attr/plugins 并打开 charon.start-scripts 的横幅,然后 POST 应用 | ipsec_strongswan_confgen 未加引号的 key = {$value}(ipsec.inc:1378-1384);charon 对 start-scripts 执行 popen | 完整性(实验环境已证实): 真实 charon 加载了生成的配置并对 start-scripts 路径执行了 popen(charon=yes)。对照横幅 Welcome 保持在 attr 内(control-no-scripts=yes)。 |
| 同样的 popen | 主机文件系统 | 侦察(推断): config.xml、密钥。 |
无效的 strongswan.conf 或 IPsec 重启 | charon | 可用性(推断): IPsec 隧道中断或无法启动。应用本身已会重启 IPsec。 |
实验环境已证实 vs 推断: control-no-scripts、生成的配置中的 start-scripts,以及真实 charon popen 均为实验环境已证实。文件系统侦察由该 popen 推断而来。注入块之后的虚拟节吸收了 confgen 的三个闭合符,使文件保持为有效的设置树。
要求: 具有 page-vpn-ipsec-mobile 的 WebGUI 会话。CSRF 令牌。在同一页面上先保存再应用。不需要 page-all、page-vpn-ipsec-editphase1 或 IPsec 原始配置文本区域。
| 攻击面 | 实验环境 |
|---|---|
对照横幅 Welcome | 保持在 attr 内,无 start-scripts |
| 未认证 / 无令牌的 CSRF | 关闭 |
OpenVPN config.ovpn | 不同的遗留问题(G2) |
| P1 HTML XSS | SA-26_14 跳过列表 |
page-vpn-ipsec-editphase1 | 不需要 |
| 诊断:命令 | 除非同时被授予,否则保持关闭 |
此页面上的 IPsec 移动 dns_domain 已使用 is_domain()。
cd lab
./run.sh
回环地址 127.0.0.1:18850。Compose 项目 pfsense-ipsec-login-banner。镜像标签 pfsense-ipsec-login-banner:2.9.0-dev。见证字符串 PFSENSE-IPSEC-LOGIN-BANNER-WITNESS。最后一行:
SUCCESS PFSENSE-IPSEC-LOGIN-BANNER control-no-scripts=yes start-scripts=yes charon=yes PFSENSE-IPSEC-LOGIN-BANNER-WITNESS
在 ipsec_strongswan_confgen 中对 login_banner 加引号 / 转义。在保存时拒绝 } # 和换行符(HTML 控件已经是单行 Form_Input)。此页面上 DNS 域已存在 is_domain();横幅需要同类检查。
9363ac5b8651a1c7a333180425ce7719070f95f9vpn_ipsec_mobile.phpipsec.inc ipsec_strongswan_confgen / ipsec_setup_strongswancharon.start-scripts