🔍 CVE-2026-44241

7.5
CVSS Score
HIGH
2026-05-12
2026-10-26 14:10
✅ 완료

🇰🇷 한글 설명

Micronaut Framework의 TimeConverterRegistrar가 @Format 어노테이션 패턴과 Accept-Language 헤더의 로케일을 결합한 키로 DateTimeFormatter 인스턴스를 상한 없는 ConcurrentHashMap에 캐싱합니다. 공격자가 BCP 47 private-use 확장(en-x-a001 등)을 포함한 고유한 로케일 태그를 인증 없이 반복 전송하면 캐시가 무한히 증가하여 힙 메모리가 고갈되고 JVM이 충돌할 수 있습니다.

💡 쉬운 설명

웹 요청에 임의로 만든 언어 설정 값을 계속 보내면 서버가 그 값마다 기억 공간을 계속 늘려 결국 메모리가 가득 차 서버가 멈춥니다. 이 취약점은 로그인 없이도 공격할 수 있습니다.

🇺🇸 원문 (English)

Micronaut Framework is a JVM-based full stack Java framework designed for building modular, easily testable JVM applications. From 4.3.0 to before 4.10.22, 3.10.6, and 3.8.14, TimeConverterRegistrar caches DateTimeFormatter instances in an unbounded ConcurrentHashMap<String, DateTimeFormatter> whose key is derived from the @Format annotation pattern concatenated with the locale from the HTTP Accept-Language header. Because Locale.forLanguageTag() accepts arbitrary BCP 47 private-use extensions (en-x-a001, en-x-a002, …), an unauthenticated attacker can generate an unlimited number of unique cache keys by sending requests with novel locale tags, growing the cache until heap memory is exhausted and the JVM crashes. This vulnerability is fixed in 4.10.22, 3.10.6, and 3.8.14.

📍 영향받는 시스템

Micronaut Framework 4.3.0 이상 4.10.22 미만, 3.10.6 미만, 3.8.14 미만 버전을 사용하는 Java 애플리케이션

⚔️ 공격 벡터

인증되지 않은 공격자가 @Format 어노테이션이 적용된 엔드포인트에 고유한 Accept-Language 값(예: en-x-a001, en-x-a002 ...)을 대량으로 전송하여 캐시를 무한히 증가시켜 힙 메모리 고갈과 JVM 크래시를 유발

🛡️ 대응 방법

Micronaut을 4.10.22, 3.10.6, 3.8.14 이상으로 업그레이드하고, 가능하면 Accept-Language 값을 허용 목록으로 제한하거나 요청 속도 제한을 적용

🔧 검증 코드

출력된 micronaut-core 버전이 4.3.0~4.10.21, 3.8.x 중 14 미만, 3.9.x 또는 3.10.x 중 6 미만이면 취약한 것이므로 업그레이드가 필요하며, 결과가 없으면 빌드 파일에서 버전을 직접 확인해야 합니다.

Shell / Script
grep -rE 'micronaut-core[^ ]*[:=]\s*["]?[0-9]+\.[0-9]+\.[0-9]+' --include='*.gradle' --include='*.gradle.kts' --include='pom.xml' . 2>/dev/null

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H