CVE-2026-78384 Apache CXF CompressionUtils 解压缩资源耗尽漏洞
影响攻击者可触发堆内存耗尽导致拒绝服务
Apache CXF 的 CompressionUtils.inflate() 在解压攻击者可控的 DEFLATE 数据时未限制输出大小,少量精心构造的压缩数据即可在堆上膨胀至数 GB。该缺陷可通过 JWE 解密(zip=DEF,如 JoseSessionTokenProvider 配合 RSA-OAEP 密钥包装)以及 SAML 重定向/POST 绑定令牌解压路径触达,且解压发生在信任校验之前或独立于信任校验。
影响范围
Apache CXF 受影响版本,官方修复版本为 4.2.4、4.1.9、3.6.13;具体受影响版本区间暂无公开信息。
漏洞详情
漏洞类型为不受控制的资源消耗(解压缩炸弹/内存耗尽)。成因是 inflate() 解压时未设置输出大小上限,攻击者提交约 KB 级的压缩载荷即可解压出数 GB 数据占用堆内存。利用方式为向使用 JWE(zip=DEF)或 SAML 绑定解压的接口发送恶意压缩数据,解压在校验信任前执行,从而绕过前置校验直接消耗资源。
利用条件与风险
利用前提是目标应用使用 Apache CXF 并暴露 JWE 解密或 SAML 绑定解压相关接口,攻击者无需认证即可发送恶意载荷;实战中可造成服务内存耗尽、响应缓慢甚至进程崩溃,形成拒绝服务。
修复建议
官方已修复,建议升级至 4.2.4、4.1.9 或 3.6.13;修复版本新增可配置的最大解压大小上限(默认 10 MiB,通过 org.apache.cxf.compression-max-inflated-size 系统属性设置),超限时抛出 DataFormatException。临时缓解可限制相关接口访问、对请求体大小设限或调整该属性阈值。
CompressionUtils.inflate() decompressed attacker-controlled DEFLATE data with no output-size cap. A small (~KB) crafted payload could expand to gigabytes on the heap. Reachable via JWE decryption when zip=DEF (e.g. JoseSessionTokenProvider with RSA-OAEP key wrap) and via SAML redirect/POST binding token inflation — in both cases decompression happens before/independent of trust validation.
Fix: Added a configurable maximum inflated-size cap (default 10 MiB, org.apache.cxf.compression-max-inflated-size system property) to CompressionUtils.inflate(); aborts with DataFormatException once exceeded.
Users are recommended to upgrade to versions 4.2.4 or 4.1.9 or 3.6.13, which fix this issue.