CVE-2026-18401 漏洞概述 CNA: HeroDevs 标题: jackson-core: 非阻塞(异步)JSON 解析器中的数字长度约束绕过可能导致拒绝服务 描述: jackson-core 中的非阻塞(异步)JSON 解析器未强制执行 StreamReadConstraints 中定义的 maxNumberLength 约束(默认值:1000 个字符)。攻击者能够向使用异步解析器 API 的应用程序提交任意长度的 JSON,导致内存分配过多和潜在的 CPU 耗尽,从而引发拒绝服务。同步解析器正确强制执行此限制,因此限制的应用取决于应用程序使用的解析 API。 根本原因: 异步解析路径中的 NonBlockingUTF8JsonParserBase 及相关类从不调用数字长度验证方法。数字解析方法如 _finishNumberIntegerPart() 将数字累加到 TextBuffer 中而不进行任何长度检查,然后调用 _valueComplete() 来标记完成。_valueComplete() 不调用 resetInt() 或 resetFloat(),这些是在 ParserBase 中执行 validateIntegerLength() 和 validateFPLength() 的方法。由于验证步骤被跳过,maxNumberLength 在异步代码路径中从未强制执行。 影响: 攻击者向使用异步解析器(例如 Spring WebFlux 或其他响应式应用程序)的应用程序发送包含任意长数字的 JSON 文档,可能导致 TextBuffer 或 OutOfMemoryError 中的无界分配。如果应用程序随后调用 getBigIntegerValue() 或 getDecimalValue(),JVM 可能额外被 O(n^2) BigInteger 解析占用,导致基于 CPU 的拒绝服务。 无需特权或用户交互,除了提交用于解析的数据。 影响范围 CWE: CWE-770: 分配资源无限制或节流 CVSS: 6.9 (MEDIUM) 受影响产品: - Vendor: FasterXML - Product: jackson-core - 版本: 从 2.15.0 到 2.18.5 修复方案 修复版本: 2.15.0 至 2.18.5 版本已修复此问题。 参考链接: - GitHub Advisory - GitHub Patch Credits 发现者: sprabha7, rohan-repos 分析师: neilmadden-hazelcast, awsactran 修复开发者: pjfanning (PJ Fanning) 协调员: cowtowncoder (Tatu Saloranta)