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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/abraxas/pfsense-api-unix-sock-noauth
权限提升漏洞分析漏洞利用信息收集网络安全渗透测试身份验证实验室与实践
GitHubabraxas/pfsense-api-unix-sock-noauth

pfsense-api-unix-sock-noauth

pfSense Plus MIM API 工具包 b4acd7ca - 高危 - 本地 - 权限残留 - unix sock enroll 无 JWT

查看仓库
21天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - pfsense-api-unix-sock-noauth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-unix-sock-noauth

pfsense-api-unix-sock-noauth

类别: 权限残留 可达性: 本地

pfSense Plus MIM API b4acd7ca - Netgate

github.com/Netgate/pfsense-api 是面向 pfSense Plus Nexus 多实例管理的公开 OpenAPI 及生成的 Python 代码。它不是 CE REST 软件包。官方注册示例使用 Bearer JWT 登录 HTTPS :8443,然后通过 SSH 将 POSIX 脚本推送到每台防火墙。该脚本与 /var/run/pfnet-controller.sock 通信时不带 Authorization。

curl --unix-socket /var/run/pfnet-controller.sock -H "Content-Type: application/json" -d "{controller JSON}" http://unix/api/mim/controllers
curl --unix-socket /var/run/pfnet-controller.sock http://unix/api/mim/device/identity

已弃用的回退端点 /api/system/controller 和 /api/system/mim/devid 相同:无 Bearer。HTTPS 登录仍会签发 JWT。该令牌不会应用于设备上的 sock。这是与 :8443 加 mim_* 组不同的信任边界。

Nexus MIM 系列的第 3 部分。在 G1 / G2 落地到设备后,此 sock 即为本地平面。

能够 connect(2) 该 sock 的本地进程可以在没有 JWT 的情况下注册控制器并导出设备身份。Plus 未被执行。真实 sock DAC 未知。

ID暂无 CVE
类别权限残留
可达性本地(connect(2) 到 /var/run/pfnet-controller.sock)
CWECWE-306
CVSS高:7.8 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H 如果 sock 模式允许另一个本地 uid 连接。诚实地说:DAC 未知,Plus 未被执行。
产品Netgate/pfsense-api(Plus Nexus MIM 工具包)
受影响公开 main b4acd7ca21dbca739a530403a1f62a7440f7726f(2026-05-25)
认证官方 unix-socket 注册 curl 上无认证
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:19121。Unix HTTP mock。无 Plus 镜像。

攻击者能做什么

攻击者是 pfSense 设备上任何能够 connect(2) 到 /var/run/pfnet-controller.sock 的进程。此示例中不是远程 TCP(仅 curl --unix-socket)。HTTPS :8443 JWT 和 mim_* 组不适用于此 fd。

实验环境已验证(对已发布注册协议的 mock)

方法接收点权限
官方 device_script POST 无 AuthorizationPOST http://unix/api/mim/controllers完整性: mock 接受了注册 JSON。命中日志 authorization_present=false。
官方 device_script GET 无 AuthorizationGET http://unix/api/mim/device/identity侦察: mock 返回了 DeviceIdentity 形状的 JSON,包括 PFSENSE-API-UNIX-SOCK-NOAUTH-WITNESS。
相同 GET 带 Authorization: Bearer lab-jwt相同身份路径实验环境对照: 401,witness 不在响应体中。区分存在与不存在。不是 Plus 结果。

在运行中的 Plus 守护进程上推断(二进制未在测试中)

这些是官方示例和 mim 标签放置在设备上的相同 OpenAPI 操作。仅作为协议验证,而非 Plus 200。

方法接收点权限
POST /mim/controllers(回退 POST /api/system/controller)带攻击者 ControllerIdentity(key、vpn_pubkey、vpn_listenaddr、vpn_netkey、cert)SetController完整性: 注册恶意控制器。规范:设备"将每 10 秒继续发出一次连接请求"(Netgard VPN 连接到攻击者)。
GET /mim/device/identity(回退 GET /api/system/mim/devid)GetDeviceIdentity侦察: 设备 Noise/VPN 公钥、address、controller_add curl 文本。
GET /mim/controllersGetControllers侦察: 列出控制器及设备信息(ControllerInfo.noise_secret、密钥)。
GET /mim/controllers/id/{key}GetMIMController侦察: 单条控制器记录。
DELETE /mim/controllers/id/{key}DeleteMIMController完整性 / 可用性: 注销真实控制器(key 十六进制或 base64-URL)。
POST /mim/device/pubkey 带攻击者 privkey / pubkeySetDevicePublicKey(DevicePublicKeyOption 包含 privkey)完整性: 替换设备 ED25519 身份。控制器握手随后信任攻击者密钥。

本身不会授予主机 root shell。授予 MIM 平面:设备信任谁作为控制器,以及如果 pubkey POST 被接受,则授予设备 Noise 私钥。

要求: 本地 connect(2) 到 /var/run/pfnet-controller.sock。DAC(mode、owner、group、SO_PEERCRED)不在公开客户端树中。如果守护进程绑定 0600 root,这已经是 root 本地(对能够看到 /var/run 的 helper、package 或 escape 而言是 confused deputy)。如果该 sock 可被其他 uid 访问,则按评分计为 CVSS 7.8。

保持关闭的相邻攻击面

  • 未经认证的远程 TCP 到 Nexus HTTPS :8443 上的 /mim/controllers。该端口被记录为 User Manager JWT。这个遗留物是 unix fd。
  • HTTPS POST /login 仍然签发 Bearer JWT。AuthenticatedClient 仍然将其发送到 CONTROLLER_URL+"/api"。
  • 生成的库默认 verify_ssl=True。路径参数对 ../ 进行百分号编码。
  • 所有 755 个操作上的 OpenAPI security: MISSING 是 schema 缺口,而非已证实的未认证 HTTPS 跳过。
  • 此实验环境是 unix HTTP mock。它不能证明 Plus 二进制文件接受了该请求。
  • 预期中的管理员 Diagnostics php/shell 基于超级用户 JWT。不是这个遗留物。

同一 pin,远程注册平面:pfsense-api-enroll-json-ssh 和 pfsense-api-enroll-autoadd。系列地图:pfsense-api-nexus-mim。

我是如何发现的

我固定了 Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f 并阅读了官方注册循环:login、GET /mim/controller/identity、stringify、unix-socket POST/GET 的 SSH exec、POST /mim/devices。HTTPS 使用 AuthenticatedClient(token=...)。sock curl 不使用。

错误方向:将缺失的 securitySchemes 视为未认证 HTTPS(login 也缺失它;示例总是先 Bearer)。假设 sock 是全局可写的(mode 不在此仓库中)。声称 Plus 200。此处证明的遗留物是已发布的注册协议。

表演:反向 shell。预言机是官方 curl 形态加上 identity body 中的见证者加上 Bearer 401 对照。

实验环境

python3 pfsense-api-unix-sock-noauth-Abraxas-Labs.py

或

cd lab
./run.sh

仅回环:127.0.0.1:19121。Compose 项目 pfsense-api-unix-sock-noauth。在 /var/run/pfnet-controller.sock 模拟 unix HTTP。见证 PFSENSE-API-UNIX-SOCK-NOAUTH-WITNESS。Docker unix-socket 模拟。无 Plus 镜像。

预期最后一行:

SUCCESS PFSENSE-API-UNIX-SOCK-NOAUTH auth-absent=yes identity-witness=yes bearer-401=yes PFSENSE-API-UNIX-SOCK-NOAUTH-WITNESS

修复方案

在 /var/run/pfnet-controller.sock 上要求设备 JWT 或 SO_PEERCRED。将套接字绑定为 0600 root。不得从未经身份验证的 unix 对端接受 POST /mim/controllers、POST /mim/device/pubkey 或身份 GET 请求。

参考资料

  • github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f
  • example-add-devices.py device_script(unix curl,无 Authorization)
  • pfapi_openapi.yml /mim/controllers、/mim/device/identity、/mim/device/pubkey
  • 系列文章:pfsense-api-nexus-mim
  • 远程平面:pfsense-api-enroll-json-ssh · pfsense-api-enroll-autoadd
  • CWE-306

许可证

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

下载工具