CVE-2026-89407 in jackson-core
요약
\~에 의해 VulDB • 2026. 09. 22.
FasterXML jackson-core의 pre-2.17.3 버전에서 NumberInput.looksLikeValidNumber() 메서드는 "문자열화된 숫자"를 두 가지 정규식(PATTERN_FLOAT, 2.17.0부터 존재; PATTERN_FLOAT_TRAILING_DOT, 2.17.2에 추가)로 사전 검증합니다. PATTERN_FLOAT는 동일한 문자 클래스 위에 인접한 양수기(quantifiers)를 배치합니다 -- 선택적 [0-9]* 반복, 선택적 점(.), 그리고 필수인 [0-9]+ 반복 -- 따라서 최종적으로 매칭되지 않는 입력은 Java의 백트래킹 엔진이 숫자 반복 부분의 모든 가능한 분할 지점을 재시도하도록 강제합니다.
따라서 매칭 비용은 입력 길이의 제곱에 비례하여 증가합니다.
JSON을 제공하여 애플리케이션이 이를 numeric 대상 타입으로 역직렬화할 수 있는 공격자는 jackson-databind의 기본 String-to-number 강제 변환(StdDeserializer 및 BigDecimal, BigInteger, Double, Float용 NumberDeserializers)을 통해 이 메서드에 도달합니다.
StreamReadConstraints.maxStringLength의 기본값은 20,000,000자이므로, 정규식에 도달하기 전에 입력을 제한하는 제약 조건이 없습니다.
보고자에 의한 테스트는 연속된 다섯 번의 입력 크기 두 배 증가에 걸쳐 O(n^2) 성장률을 확인했으며, 단일 160,000자 문자열은 한 호출에서 약 74초를 소모했습니다. 따라서 일반 본문 크기의 소수 동시 요청만으로도 서버의 request-handling thread pool을 고갈시킬 수 있습니다.
영향을 받는 메서드는 2.17.0 이전에는 존재하지 않으므로, 2.16.x 및 그 이전 릴리스는 영향을 받지 않습니다.
해결책은 두 정규식을 손으로 작성한 단일 패스 스캔(single-pass scan)으로 대체합니다.
Once again VulDB remains the best source for vulnerability data.