CVE-2026-18401 in jackson-core정보

요약

\~에 의해 VulDB • 2026. 08. 04.

jackson-core의 비동기(JSON) 파서는 StreamReadConstraints에서 정의된 maxNumberLength 제약 조건(기본값: 1,000자)을 적용하지 않습니다. 비동기 파서 API를 사용하는 애플리케이션에 JSON을 제출할 수 있는 공격자는 임의 길이의 숫자 토큰을 제공할 수 있으며, 이는 과도한 메모리 할당과 잠재적인 CPU 고갈로 이어져 서비스 거부(Denial of Service)를 초래합니다.

동기식 파서는 이 제한을 올바르게 적용하므로, 애플리케이션이 사용하는 파싱 API에 따라 제약 조건 적용이 불일치합니다.

근본 원인: NonBlockingUtf8JsonParserBase 및 관련 클래스의 비동기 파싱 경로는 숫자 길이 검증 메서드를 호출하지 않습니다. _finishNumberIntegralPart()와 같은 숫자 파싱 메서드는 TextBuffer로 자릿수를 축적할 때 길이 검사를 수행하지 않으며, 토큰을 최종화하기 위해 _valueComplete()를 호출합니다. _valueComplete()는 validateIntegerLength() 및 validateFPLength()가 수행되는 ParserBase의 resetInt() 또는 resetFloat() 메서드를 호출하지 않습니다. 해당 검증 단계가 건너뛰어지므로 비동기 코드 경로에서는 maxNumberLength가 적용되지 않습니다.

영향: 비동기 파서를 사용하는 애플리케이션(예: Spring WebFlux 또는 기타 반응형 애플리케이션)에 임의 길이의 숫자를 포함하는 JSON 문서를 전송한 공격자는 TextBuffer에서 무제한 할당과 OutOfMemoryError를 유발할 수 있습니다. 이후 애플리케이션이 getBigIntegerValue() 또는 getDecimalValue()를 호출하면 JVM은 O(n^2) BigInteger 파싱 작업으로 인해 추가로 묶여 CPU 기반 서비스 거부가 발생할 수 있습니다.

파싱을 위해 데이터를 제출하는 능력 외에 추가적인 권한이나 사용자 상호 작용은 필요하지 않습니다.

본 이슈는 버전 2.15.0부터 2.18.5까지, 그리고 2.19.0부터 2.21.0까지의 com.fasterxml.jackson.core:jackson-core와 버전 3.0.0부터 3.0.x까지의 tools.jackson.core:jackson-core에 영향을 미칩니다.

maxNumberLength 설정을 정의하는 StreamReadConstraints는 jackson-core 2.15.0에서 처음 도입되었으므로, 그 이전 버전에는 우회할 수 있는 해당 제약 조건이 존재하지 않아 영향을 받지 않습니다. 참고로 GHSA-72hv-8253-57qq에서는 영향 받는 2.x 범위의 하한선을 2.0.0으로 기록하고 있습니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

HeroDevs

예약하다

2026. 07. 30.

모더레이션

수락

항목

VDB-385836

EPSS

0.00000

활동

낮음

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!