pfSense CE 2.9.0-DEVELOPMENT - 高危 - 远程 - 文件写入 - CP 文件管理器
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-cp-filemanager-write
类别: 文件写入 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
上传名称未经过 basename() 处理。已包含 captiveportal- 的名称会跳过前缀。file_put_contents("{$g['captiveportal_element_path']}/{$data['name']}"),其中 cpelements = /var/db/cpelements。captiveportal-.. 之后剩余的 ../ 仍可遍历至 /。
| ID | 暂无 CVE |
| 类别 | 文件写入 |
| 可达性 | 远程(除非另有说明,需已认证的 WebGUI) |
| CWE | CWE-22 |
| 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) |
| 认证 | 具有 page-services-captiveportal-filemanager 权限的 WebGUI 会话 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我锁定了公共 master 分支 9363ac5。实验环境是该锁定 sink 的 PHP gadget,在 127.0.0.1:19000 上提供回环 HTTP。
系列文章:https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 方法 | Sink | 权限 |
|---|---|---|
| POST services_captiveportal_filemanager.php 文件名 | file_put_contents cpelements/{$data['name']} | 完整性: 实验验证:名称 captiveportal-../../../../../oracle/... 跳过了前缀并写入 cpelements 之外。在此平台上,root PHP 写入即主机 RCE。 |
| 同一遗留问题 | 同一 sink | 侦察: 推断:覆盖 config.xml 或 www PHP。 |
| 同一遗留问题 | 同一 sink | 可用性: 推断:覆盖关键文件。 |
需要: page-services-captiveportal-filemanager。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
需要: page-services-captiveportal-filemanager。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
不含该子串的名称会被加上前缀,无法通过该方式逃逸。门户 jail 内已记录的 PHP 是另一项功能。
除非该页面也被授予,否则没有 Diagnostics: Command。
cd lab
./run.sh
回环 127.0.0.1:19000。Compose 项目 pfsense-cp-filemanager-write。见证 PFSENSE-CP-FILEMANAGER-WRITE-WITNESS。仅回环:127.0.0.1:19000。Compose 项目 pfsense-cp-filemanager-write。见证 PFSENSE-CP-FILEMANAGER-WRITE-WITNESS。锁定行的 PHP gadget。运行后栈会拆除。
最后一行:
SUCCESS PFSENSE-CP-FILEMANAGER-WRITE control-prefixed=yes prefix-no-escape=yes trigger-outside=yes PFSENSE-CP-FILEMANAGER-WRITE-WITNESS
对上传名称执行 basename()。始终添加前缀。拒绝 .. 。
9363ac5b8651a1c7a333180425ce7719070f95f9