文章总结: 该文档分析了BlackHatUSA2026上展示的企业Java平台预认证RCE漏洞。核心发现是一个通用攻击模式:利用路由分发差异绕过内部API的安全假设,最终通过反序列化或模板注入实现远程代码执行。具体案例包括BonitaBPM的路径解析差异加XStream反序列化链,以及ApacheOFBiz的硬编码JWT密钥加Groovy模板注入。防御建议包括统一安全控制、审计路由配置、加强密钥管理和加固执行sink。 综合评分: 88 文章分类: 漏洞分析,红队,渗透测试,安全建设,应用安全
当中间件变成漏洞:企业 Java 预认证 RCE 深度分析
原创
AIxSec69 AIxSec69
AIxSec69
2026年8月11日 22:21 美国
在小说阅读器读本章
去阅读
#
来源:Black Hat USA 2026 Briefings
标题:Pre-auth RCE in Enterprise Java: When Middleware Becomes the Exploit
作者:Lidor Ben Shitrit & Assaf Levkovich(Vulnerability Researchers, Novee Security)
适合读者:Java 安全研究者、企业安全团队、渗透测试人员、应用安全工程师
简介:审计 4 个企业级 Java 平台后发现一个通用攻击模式:路由分发将请求导向内部中间件 → 内部 API 缺乏与外部 API 同等的安全控制 → 执行 sink(反序列化、模板注入)被滥用。本次演讲展示两条完整预认证 RCE 链:Bonita BPM 的路径解析差异 + XStream 反序列化,Apache OFBiz 的硬编码 JWT 密钥伪造 + Groovy 模板注入。
◆ ◆ ◆
企业 Java 平台有一个常见的设计假设:某些 API 端点只在内部使用,不需要与面向公众的 API 同等强度的安全控制。但当路由层的分发逻辑出现差异时,这个假设就变成了攻击面。
Novee Security 的两位研究员 Lidor Ben Shitrit 和 Assaf Levkovich 在 Black Hat USA 2026 上展示了对 4 个企业 Java 平台的审计成果:从约 12 个漏洞中提炼出一个通用攻击模式,并在 Bonita BPM 和 Apache OFBiz 上实现了两条完整的预认证 RCE 链。
▲ 攻击链总览:BadBonita + SSOnOf(a)biz(来源:Black Hat USA 2026 Slides)
通用攻击模式:路由 → 内部面 → 执行 Sink
研究者总结的漏洞模式分为三步:
1. 路由分发(Routing):外部请求通过 URL 路由进入应用。但 Java Web 框架中的路径规范化差异(如 ..; 序列的解析不一致)可以让请求”穿越”到内部 API 区域。
2. 内部攻击面(Internal Surface):内部 API(如 Bonita 的 /serverAPI/)的设计假设是只被本地或受信组件调用,因此缺少 CSRF 保护、使用较弱的认证机制(如仅 BASIC auth),甚至完全依赖”不可达”作为安全控制。
3. 执行 Sink(Execution Sink):一旦进入内部 API,就到达了反序列化入口、模板引擎、表达式求值器等执行敏感操作的代码路径。这些 sink 本身可能不是漏洞,但”不可达”的假设被打破后,它们就变成了 RCE 入口。
▲ 外部 API vs 内部 API 的攻击面差异(来源:Black Hat USA 2026 Slides)
Case 1:BadBonita — Bonita BPM 预认证 RCE
Bonita BPM 是一个开源业务流程管理平台。其架构中有两个 API 面:
– /API/ — 面向公众的 REST API,要求 session 认证 + CSRF token
– /serverAPI/ — 内部 API,仅 BASIC auth,无 CSRF 保护
绕过链条分为三步:
Step 1 — 路径解析差异:Bonita 的 URL 过滤器使用路径规范化来匹配排除列表。但通过 ..; 序列(parser differential),请求可以绕过过滤器对 /serverAPI/ 的访问控制,使得外部请求能够触及内部 API。
Step 2 — 调度器差异:多个 servlet 映射到重叠的 URL 空间时,Servlet 容器的调度优先级可能导致请求被转发到非预期的处理器。攻击者利用这种调度差异,绕过仅剩的认证检查。
Step 3 — XStream 反序列化:/serverAPI/ 内部端点接受 XML 输入并使用 XStream 进行反序列化。XStream 的 AnyTypePermission.ANY 配置允许任意类型,结合 Commons Collections 4(CC4)gadget chain,最终通过 Groovy 的 eval() 实现代码执行。
▲ 反序列化 → RCE:XStream + CC4 gadget chain(来源:Black Hat USA 2026 Slides)
Case 2:SSOnOf(a)biz — Apache OFBiz 预认证 RCE
Apache OFBiz 是一个开源企业 ERP 套件,包含电商、库存管理、HR 等模块。这里的攻击路径完全不同,核心在于 JWT 签名密钥管理:
Step 1 — 硬编码 JWT 签名密钥:OFBiz 的 SSO 模块使用 JWT 进行跨系统认证。研究者发现签名密钥硬编码在代码仓库中(security.properties 文件中的 X509 密钥对)。获得此密钥后,可以伪造任意用户的 SSO token。
Step 2 — JWT 伪造 → 管理员权限:伪造一个包含管理员权限 JWT,向 /ajaxSetUserPreference 端点发送请求,将 javaScriptEnabled 标志设为 Y。这一步需要管理员 session。
Step 3 — Groovy 模板注入:javaScriptEnabled 标志控制 OFBiz 的 MacroFormRenderer 中 Groovy 模板的执行。设置此标志后,攻击者可以向 Groovy 模板注入点(通过 JWT 的 JWT\_CALLBACK 参数)提交恶意代码,触发 eval() 执行。
值得注意的是,OFBiz 有一个针对 Groovy 的 deny-list 过滤器(拦截 java、import、class、process 等关键词),但研究者发现正则表达式的大小写处理存在缺陷——Process(首字母大写)可以绕过 process[^\w] 的匹配。
▲ 三个中间件 · 两个请求 · 一个签名密钥(来源:Black Hat USA 2026 Slides)
▲ 一个 GET 请求承载全部攻击载荷(来源:Black Hat USA 2026 Slides)
为什么这种模式普遍存在?
两个案例看似完全不同——一个是路径解析 + 反序列化,另一个是 JWT 伪造 + 模板注入——但共享同一个结构性问题:
**内部中间件功能被打包进同一个 Web 应用,通过”不可达”假设作为安全边界,但路由层的细微差异打破了这一假设。**
研究者指出,这不是个别产品的缺陷,而是企业 Java 平台在架构演进中积累的设计债务:为了快速交付功能,内部管理端点常常复用了外部 API 的 Servlet 映射和依赖链路,安全控制在事后以过滤器形式追加,但过滤器的生效范围受限于 URL 解析的一致性——而 URL 解析在 Java 生态中从来不是一致的。
防御建议
– 统一安全控制:不要假设内部端点”不可达”。对同一 Web 应用中的所有端点实施统一认证和授权检查。
– 审计路由配置:检查 Servlet 映射、过滤器和路径规范化逻辑,特别关注多个框架共存时的调度优先级差异。
– JWT 密钥管理:将签名密钥存储在安全的位置(HSM、密钥管理服务),不在代码仓库中硬编码。
– Sink 加固:即使认为某个反序列化入口或模板引擎是内部使用的,也应该应用类型白名单和沙箱限制。
写在最后
这场演讲的价值在于方法论的普适性。两位研究员没有止步于报告两个 RCE——他们提炼了一个可以在其他企业 Java 平台上复用的审计框架:找路由分发差异 → 找内部 API 面 → 找执行 sink → 串成 RCE 链。对于任何需要审计 Java Web 应用的安全团队,这个框架比两个 CVE 编号更有长期价值。
▲ 防御建议与总结(来源:Black Hat USA 2026 Slides)
◆ ◆ ◆
原文链接:https://www.blackhat.com/us-26/briefings/schedule/#pre-auth-rce-in-enterprise-java-when-middleware-becomes-the-exploit-51813
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:AIxSec69 AIxSec69 AIxSec69《当中间件变成漏洞:企业 Java 预认证 RCE 深度分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论