最近 Apache 官方一口气发布了五个安全公告(S2-070 到 S2-074),对应 CVE-2026-73631 到 CVE-2026-73635。很多人一看到又是 Struts 漏洞,第一反应可能是“又来远程代码执行了?”,但这次还真不一样,主要问题集中在拒绝服务(DoS)上。
简单来说,核心问题只有一个:框架在处理某些输入时,没有对资源消耗做出有效限制。
先看最关键的三个。
JSON 请求体无限读取(CVE-2026-73633)
如果你用了 JSON 插件,并且开启了从 JSON body 直接填充 Action 的功能,框架就会把整个请求体读进内存。问题在于,这个读取过程并没有真正的上限控制。之前配置的 JSON 长度限制居然管不住这个读取动作。结果就是,攻击者随便丢一个特别大的 JSON 包过来,服务器内存直接被吃光,其他正常请求全挂。
CSP 违规报告无限读取(CVE-2026-73634)
有些应用会专门开一个接口,用来收集浏览器发来的 Content Security Policy 违规报告。遇到的问题一模一样——框架把报告内容原样读进内存,没有设置上限。一个超大报告就能把堆内存打满。
本地化文本缓存无限膨胀(CVE-2026-73635)
如果没有固定配置 locale,框架会根据请求里的 locale 来查本地化文本,并且把结果缓存起来。攻击者不断换不同的 locale 发起请求,缓存就会一直涨,最后内存耗尽。
另外两个是 JSON 插件里的共享状态问题(CVE-2026-73631、CVE-2026-73632),主要影响 7.2.1 版本,可能导致数据串会话或者解析状态混乱,严重性相对低一点,但也建议一并修复。
这几个漏洞的共同特点很明显:不是逻辑绕过,也不是代码执行,而是资源消耗没有边界。在云环境和容器化部署越来越普遍的当下,内存一旦被打爆,服务就直接不可用,影响面其实不小。
影响范围覆盖挺广:从老旧的 2.x、2.5.x,到 6.0.0~6.10.0,再到 7.0.0~7.2.1 全都中招。用了 JSON 插件或者开启了相关功能的应用,风险会更高。
官方已经给出了解决方案:直接升级到 Struts 7.3.0,或者 6.x 分支升级到 6.11.0。这两个版本都已经修复了上述问题。
如果暂时升不了,也可以在反向代理或 Servlet 容器层面对相关接口做请求体大小限制,至少能挡一挡最明显的大包攻击。但治本还是得靠升级。
Struts 这些年漏洞确实不少,但这次提醒我们一个很实际的点:很多时候真正能把服务搞瘫的,不一定是高危 RCE,而是这种看起来“不起眼”的资源控制缺失。
建议大家尽快检查一下自己项目用的 Struts 版本,以及是否启用了 JSON 插件和 CSP 报告收集功能。有问题就升级。
|