Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pfsense-api-enroll-autoadd — pfSense Plus MIM API 工具包 b4acd7ca - 高危 - 远程 - 权限残留 - Paramiko AutoAddPolicy 注册 | Kitploit
工具/GitHubGitHub/abraxas/pfsense-api-enroll-autoadd
漏洞分析漏洞利用网络安全密码学渗透测试身份验证论文与研究红队实验室与实践
GitHubabraxas/pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

pfSense Plus MIM API 工具包 b4acd7ca - 高危 - 远程 - 权限残留 - Paramiko AutoAddPolicy 注册

1天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
分享

Abraxas Labs - pfsense-api-enroll-autoadd

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

类别: 权限残留 可达性: 远程

pfSense Plus MIM API(Netgate/pfsense-api)b4acd7ca - Netgate

example-add-devices.py 是将 Nexus 控制器注册到每台 pfSense 设备的文档化方式。它从不调用 load_system_host_keys()。它设置 paramiko.AutoAddPolicy(),然后 connect,再 exec_command(device_script)。注释说当设备已在 known_hosts 中时应去掉 AutoAdd。出厂默认是 AutoAdd。

首次接触 SSH 到新设备时会接受任何应答的主机密钥。密码或密钥认证会被提交给该对端。stdout 被 json.loads 解析后 POST /mim/devices 到真正的控制器。

这不是第三方 CE REST 包。这是官方 OpenAPI 加上为 pfSense Plus Nexus 多实例管理 生成的 Python 客户端。服务器仅限 Plus。实验环境是一个 Paramiko SSH 小工具。我没有与真实的 Plus 控制器通信。

ID暂无 CVE
类别权限残留(注册 SSH 上的 Paramiko AutoAddPolicy)
可达性远程(首次接触时位于设备 SSH 路径上)
CWECWE-322
CVSS高危:8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
产品Netgate/pfsense-api(Plus Nexus MIM 客户端工具包)
受影响main b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py
认证操作员运行官方示例;攻击者位于设备 SSH 路径上
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:19111。无 Plus 镜像。

AC:H 是首次接触 / 路径上。一台工作站的 known_hosts 中已有真实设备密钥 且 已移除 AutoAdd 行的,不属于此残留。

同一 pin 的残留:将 ControllerSummary 的 JSON 插值到注册 shell(G1)以及 示例强制 verify_ssl=False(G9)。系列中心:pfsense-api-nexus-mim。

攻击者能做什么

当操作员运行示例时,位于 pfsense_addresses 中首次接触 SSH 地址的路径上。AutoAdd 仍然开启。

方法汇聚点权限
在 pfsense_addresses 中首次接触的 SSH 地址上实施路径中间人攻击set_missing_host_key_policy(paramiko.AutoAddPolicy()) 然后 connect(example-add-devices.py:151-160)完整性(实验室验证): 未知主机密钥被接受。实验室:AutoAddPolicy 已连接(autoadd=yes)。RejectPolicy 失败(reject-control=yes)。
同一会话,应答 exec_command(device_script)stdout 被解析为 DeviceIdentity(example-add-devices.py:161-187)完整性(实验室验证): exec 返回的身份 JSON 包含 PFSENSE-API-ENROLL-AUTOADD-WITNESS(identity-json=yes)。
同一 MITM,读取 exec 载荷device_script 是遗留的 G1 对 ControllerSummary 的 curl -d侦察(从源码推断): 控制器身份密钥、Netgard vpn_pubkey / vpn_netkey / 监听地址。本实验室未转储。
同一 MITM,密码或密钥认证SSHUSER / SSHPASS 或 agent/密钥(example-add-devices.py:156-160)侦察(推断): 凭据或密钥被提交给伪造主机。实验室仅使用密码认证作为示例 SSHPASS 路径。
同一 stdout JSON,add_controlled_device.sync在真实控制器上 POST /mim/devices完整性(推断): 注册攻击者的 Noise/VPN 密钥和 address。此外,本实验室未执行握手。
MITM 作为 SSH 服务器客户端发送的任何 exec,以 SSHUSER 身份完整性 / 可用性(推断): 运行、丢弃或跳过注册脚本。只有在 MITM 转发时,才会在真实设备上发生 Unix 套接字调用。

实验室验证与推断: AutoAdd 连接、RejectPolicy 失败以及带见证的身份 JSON 是实验室验证的。控制器密钥转储、凭据窃取、伪造设备的 POST /mim/devices 以及运行真实的 Unix 套接字 curl 均从同一示例路径推断。

要求: 操作员针对主机密钥尚未固定的 SSH 地址运行官方示例,且 AutoAdd 保持开启。到该 SSH 的网络路径。AC:H 为首次接触 / 路径中间人。

保持关闭的相邻攻击面

攻击面原因
对同一未知主机使用 RejectPolicy实验室:reject-control=yes。Paramiko 拒绝该密钥。
在 known_hosts 中拥有真实设备密钥且移除 AutoAdd 行的工作站注释的预期模式。除非添加该调用,示例从不加载这些密钥。
HTTPS 控制器登录verify_ssl=False 是同级示例遗留(G9),不是此汇聚点。
真实防火墙上的 Unix 套接字 MIM仅当 MITM 转发 exec 时。本实验室从未与 /var/run/pfnet-controller.sock 通信。
生成的 Client 默认 verify_ssl=True库默认值不是遗留。示例强制为 False。
加上 RBAC / 实时 :8443本实验室是 Paramiko 小工具。我未与 Plus 控制器通信。
未认证的互联网到 8443登录仍会签发 JWT。不是此发现。
诊断 PHP/shell对舰队 JWT 的预期管理员权限。不是此发现。

我是如何发现的

在 CE WebGUI 遗留之后,我固定了 github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f。此树是 OpenAPI 加上为 Plus Nexus MIM 生成的 Python。我阅读了 example-add-devices.py 中的注册循环。主机密钥策略是 AutoAdd。密钥位于同一 exec 通道上。示例从未调用 load_system_host_keys()。

已记录的弯路:将 AutoAdd 视为仅限预期实验室(注释是选择退出,而非选择加入);假设 known_hosts 已加载;将此与 ControllerSummary shell 插值遗留混为一谈;实时实验室 Plus;声称这是对 :8443 的未认证 HTTPS。

Theatre:一个反向 shell。预言机是 RejectPolicy fail 加上 AutoAdd connect 加上带有 witness 的 identity JSON。

Lab

python3 pfsense-api-enroll-autoadd-Abraxas-Labs.py

或

cd lab
./run.sh

回环 SSH 127.0.0.1:19111。Compose 项目 pfsense-api-enroll-autoadd。CONTROL:RejectPolicy 拒绝未知主机。INJECT:官方示例 AutoAddPolicy、connect、注册脚本的 exec_command;stdout 是带有见证的 identity JSON。无实时 Plus 控制器。见证 PFSENSE-API-ENROLL-AUTOADD-WITNESS。运行后栈拆除。

SUCCESS PFSENSE-API-ENROLL-AUTOADD autoadd=yes reject-control=yes identity-json=yes PFSENSE-API-ENROLL-AUTOADD-WITNESS

修复方案

使用 paramiko.RejectPolicy() 或固定 known_hosts。在连接前调用 load_system_host_keys()(以及专用的 known_hosts 文件)。不要在官方示例中提供 AutoAddPolicy()。那条写着“如果所有 pfsense 设备都在 known_hosts 中,请注释掉此行”的注释才是预期模式。将其设为默认。

参考资料

  • github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f
  • example-add-devices.py
  • 系列中心:pfsense-api-nexus-mim
  • 相同固定版本:pfsense-api-enroll-json-ssh (G1) · pfsense-api-example-ssl-verify (G9)
  • CWE-322

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具