abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-carp-vhid
类别: RCE 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
虚拟 IP 编辑将 POST 中的 CARP VHID 存储时未做 1-255 校验。Form_Select 选项仅为 HTML。CARP 应用对 VHID 执行了 escapeshellarg。堆叠 IP Alias 应用在 escapeshellarg 之外插值 vhid {$carpvip['vhid']}。CARP 状态将同一存储的 VHID 插值到双引号 grep 管道中;分号保持被引用,命令替换仍在 /bin/sh -c 下执行。所需权限为 VIP 编辑 + 应用,而非 Diagnostics: Command。
| ID | 暂无 CVE |
| 类别 | RCE |
| 可达性 | 远程(已认证 WebGUI) |
| CWE | CWE-78 |
| 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) CARP VHID |
| 认证 | 具有 VIP 编辑 + 应用权限的 WebGUI 会话(状态/小部件为后续触发点) |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我固定了公共 master 9363ac5。实验环境是一个 PHP gadget,由固定版本的 interface_carp_configure、堆叠 ipalias mwexec 和状态 exec 组成。回环地址 127.0.0.1:18830。
| 方法 | 汇聚点 | 权限 |
|---|---|---|
POST 一个非整数 VHID 的 carp VIP,然后在该 _vip{uniqid} 父级上应用堆叠 IP Alias | mwexec ifconfig ... alias {$gateway} {$vhid} (interfaces.inc:3238) | 完整性(实验验证): root shell。实验:ipalias-unescaped 写入了见证文件。同一 VHID 的 CARP 应用未写入任何内容(carp-escaped=yes)。 |
同一存储的 VHID,然后 GET status_carp.php 或渲染 carp_status.widget.php | exec grep 管道 (pfsense-utils.inc:794) | 完整性(实验验证): 双引号内的命令替换执行并写入了见证文件(status-sink=yes,status-subst=yes)。分号保持被引用。小部件触发点可以是另一个 GUI 会话。 |
| 同一 root shell | 主机文件系统 | 侦察(推断): config.xml、密钥。 |
Root shell 或破坏 ifconfig | CARP / alias 设备 | 可用性(推断): 接口 / CARP / 过滤器中断。 |
实验验证 vs 推断: carp-escaped、ipalias-unescaped 见证文件以及状态命令替换见证文件均为实验验证。文件系统侦察和过滤器中断是从 root PHP-FPM 推断得出。
需要: page-firewall-virtualipaddress-edit(保存)和 page-firewall-virtualipaddresses(应用)。状态汇聚点:page-status-carp 或任何带有 CARP 小部件的仪表盘。POST 上的 CSRF。
| 攻击面 | 实验 |
|---|---|
| CARP 应用本身 | 对 VHID 执行 escapeshellarg,carp-escaped=yes |
| CARP 密码 / advbase / advskew / 子网 | is_ipaddr / 已转义 |
| 未认证 | 关闭 |
| 无 HA 凭据时对同一对象执行 xmlrpc 应用 | SA-26_22 跳过列表 |
| Diagnostics: Command | 除非同时被授予,否则保持关闭 |
cd lab
./run.sh
回环地址 127.0.0.1:18830。Compose 项目 pfsense-carp-vhid。镜像标签 pfsense-carp-vhid:2.9.0-dev。见证文件 PFSENSE-CARP-VHID-WITNESS。最后一行:
SUCCESS PFSENSE-CARP-VHID carp-escaped=yes ipalias-unescaped=yes status-sink=yes PFSENSE-CARP-VHID-WITNESS
在保存时将 VHID 限制为 1-255 的整数范围。在堆叠 IP Alias 应用和状态 grep 中对 VHID 执行 escapeshellarg,与 CARP 应用已有的做法相同。
9363ac5b8651a1c7a333180425ce7719070f95f9firewall_virtual_ip.inc saveVIPinterfaces.inc 堆叠 ipalias mwexecpfsense-utils.inc CARP 状态 grep