abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-pppoe-cron
类别: RCE 可达性: 远程
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
handle_pppoe_reset 使用了隐藏的 ptpid,却没有进行 is_numericint 校验。自定义的小时/分钟校验用的是 AND,而这里需要的是 OR。configure_cron 原样写入字段。这是 SA-26_06 的同类问题,而非 proxyuser。
| 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) |
| 认证 | 拥有 page-interfaces-ppps-edit 权限的 WebGUI 会话 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
我锁定了公开 master 分支 9363ac5。实验环境是针对该锁定代码点的 PHP gadget,在 127.0.0.1:18970 上提供回环 HTTP 服务。
系列文章:https://abraxaslabs.tech/research/pfsense-ce-leftovers
| 方法 | 汇聚点 | 权限 |
|---|---|---|
| POST interfaces_ppps_edit.php ptpid / pppoe_resethour | handle_pppoe_reset 随后 configure_cron 原样写入字段 | 完整性: 实验已证实:ptpid 中的换行符添加了一条额外的 root crontab 行;stub cron 执行了它。 |
| 同一遗留问题 | 同一汇聚点 | 侦察: 推断:以 root 身份执行额外 cron。 |
| 同一遗留问题 | 同一汇聚点 | 可用性: 推断:额外的周期性命令。 |
需要: page-interfaces-ppps-edit。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
需要: page-interfaces-ppps-edit。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。除非另有说明,POST 受 CSRF-magic 保护。WebGUI PHP-FPM 以 root 运行。
SA-26_06 是 System Proxy crontab。 #16128 是 PPP 客户端清理。
除非该页面也被授予权限,否则没有 Diagnostics: Command。
cd lab
./run.sh
回环 127.0.0.1:18970。Compose 项目 pfsense-pppoe-cron。见证 PFSENSE-PPPOE-CRON-WITNESS。仅回环:127.0.0.1:18970。Compose 项目 pfsense-pppoe-cron。见证 PFSENSE-PPPOE-CRON-WITNESS。针对锁定代码行的 PHP gadget。运行结束后栈会被拆除。
最后一行:
SUCCESS PFSENSE-PPPOE-CRON control-one-line=yes trigger-extra-root-line=yes stub-cron-ran-extra=yes PFSENSE-PPPOE-CRON-WITNESS
对 ptpid 使用 is_numericint。拒绝小时/分钟中的 CR/LF。对 crontab 字段加引号。
9363ac5b8651a1c7a333180425ce7719070f95f9