abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-assign-if-add
类别: RCE 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
interfaces_assign.php 的 Add 操作存储 $_POST['if_add'] 时未校验其是否属于 $portlist。Submit 仅重映射 $portlist 中的端口。wireless_regex 为 /^(ath|...)[0-9]+/,末尾无 $。ath0;w 可匹配。Clone 加上 get_wireless_modes 会插值进入 ifconfig。
| 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) |
| 认证 | WebGUI 会话,需 page-interfaces-assignnetworkports then GET interfaces.php?if=optN |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我固定了公共 master 分支 9363ac5。实验环境是该固定版本 sink 的 PHP gadget,回环 HTTP 位于 127.0.0.1:18920。
系列文章:https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 方法 | Sink | 权限影响 |
|---|---|---|
| POST interfaces_assign.php if_add,然后 GET interfaces.php?if=optN | 未锚定的 wireless_regex,随后 interface_wireless_clone ifconfig | 完整性: 实验环境已验证:Add 将 ath0;w 存储为 opt1;GET interfaces.php?if=opt1 执行了 clone ifconfig;额外的 w 写入了见证文件。 |
| 同一遗留问题 | 同一 sink | 侦察: 推断:root shell 可读取主机文件。 |
| 同一遗留问题 | 同一 sink | 可用性: 推断:可对已分配端口执行恶意 ifconfig。 |
前置条件: page-interfaces-assignnetworkports then GET interfaces.php?if=optN。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
前置条件: page-interfaces-assignnetworkports then GET interfaces.php?if=optN。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
Submit 对非 portlist 的 if_add 进行重映射不会执行命令。诊断:不需要 Command。
除非该页面也被授权,否则不需要 Diagnostics: Command。
cd lab
./run.sh
回环 127.0.0.1:18920。Compose 项目 pfsense-assign-if-add。见证文件 PFSENSE-ASSIGN-IF-ADD-WITNESS。仅回环:127.0.0.1:18920。Compose 项目 pfsense-assign-if-add。见证文件 PFSENSE-ASSIGN-IF-ADD-WITNESS。固定代码行的 PHP gadget。运行结束后栈会被拆除。
最后一行:
SUCCESS PFSENSE-ASSIGN-IF-ADD control-no-exec=yes trigger-exec=yes PFSENSE-ASSIGN-IF-ADD-WITNESS
要求 if_add 必须属于 $portlist。用 $ 锚定 wireless_regex。对 clone 名称使用 escapeshellarg。
9363ac5b8651a1c7a333180425ce7719070f95f9