fix(deps): update micronaut.version [security] - #10325
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the Micronaut dependency version to 3.10.6 across multiple pom.xml files. The reviewer identified that this version does not fully resolve a known infinite loop DoS vulnerability in the Netty-based HTTP Client (GHSA-387m-935m-c4vw), and recommended upgrading to version 3.10.7 or higher instead.
| <maven.compiler.target>11</maven.compiler.target> | ||
| <maven.compiler.source>11</maven.compiler.source> | ||
| <micronaut.version>3.10.4</micronaut.version> | ||
| <micronaut.version>3.10.6</micronaut.version> |
There was a problem hiding this comment.
The update to 3.10.6 does not fully address all security vulnerabilities mentioned in the PR description. Specifically, the infinite loop DoS vulnerability in the Netty-based HTTP Client (GHSA-387m-935m-c4vw) is only patched in Micronaut version 3.10.7 or higher. Please upgrade to 3.10.7 to ensure all vulnerabilities are resolved.
| <micronaut.version>3.10.6</micronaut.version> | |
| <micronaut.version>3.10.7</micronaut.version> |
| <maven.compiler.target>11</maven.compiler.target> | ||
| <maven.compiler.source>11</maven.compiler.source> | ||
| <micronaut.version>3.10.3</micronaut.version> | ||
| <micronaut.version>3.10.6</micronaut.version> |
There was a problem hiding this comment.
The update to 3.10.6 does not fully address all security vulnerabilities mentioned in the PR description. Specifically, the infinite loop DoS vulnerability in the Netty-based HTTP Client (GHSA-387m-935m-c4vw) is only patched in Micronaut version 3.10.7 or higher. Please upgrade to 3.10.7 to ensure all vulnerabilities are resolved.
| <micronaut.version>3.10.6</micronaut.version> | |
| <micronaut.version>3.10.7</micronaut.version> |
| <maven.compiler.target>21</maven.compiler.target> | ||
| <maven.compiler.source>21</maven.compiler.source> | ||
| <micronaut.version>3.10.3</micronaut.version> | ||
| <micronaut.version>3.10.6</micronaut.version> |
There was a problem hiding this comment.
The update to 3.10.6 does not fully address all security vulnerabilities mentioned in the PR description. Specifically, the infinite loop DoS vulnerability in the Netty-based HTTP Client (GHSA-387m-935m-c4vw) is only patched in Micronaut version 3.10.7 or higher. Please upgrade to 3.10.7 to ensure all vulnerabilities are resolved.
| <micronaut.version>3.10.6</micronaut.version> | |
| <micronaut.version>3.10.7</micronaut.version> |
This PR contains the following updates:
3.10.3→3.10.73.10.3→3.10.63.10.4→3.10.73.10.4→3.10.6Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Micronaut doesn't set a maximum redirect count for its HTTP Client, enabling infinite loop DoS
GHSA-387m-935m-c4vw
More information
Details
The Netty-based Micronaut HTTP Client does not impose a limit on HTTP redirections, potentially allowing an infinite redirect loop that could lead to a denial-of-service attack.
Patches
The following versions are patched:
Workarounds
No
Resources
Micronaut 5 Patch: micronaut-projects/micronaut-core@6e88a97
Micronaut 4 Patch: micronaut-projects/micronaut-core@f1dffff
Micronaut 3 Patch: micronaut-projects/micronaut-core@c06a271
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Micronaut: DefaultHttpClient follows redirects, forwarding Authorization, Cookie, and Proxy-Authorization headers
GHSA-q6gh-6v2r-hjv3
More information
Details
Impact
Patches
It has been patched for versions:
For Micronaut 5, versions equal or greater than 5.0.1 >=
For Micronaut 4, versions equal or greater than 4.10.24 >=
For Micronaut 3, versions equal or greater than 3.10.6 >=
Workarounds
No
References
Micronaut 5 Patch: micronaut-projects/micronaut-core@9770328
Micronaut 4 Patch: micronaut-projects/micronaut-core@70cab4b
Micronaut 3 Patch: micronaut-projects/micronaut-core@64e5397
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Micronaut has Unbounded
bundleCacheinResourceBundleMessageSourcethat Allows Memory Exhaustion viaAccept-LanguageHeaderCVE-2026-44242 / GHSA-3rfq-4wpf-qqw3
More information
Details
Summary
ResourceBundleMessageSourcemaintains two caches:messageCache(bounded at 100 entries viaConcurrentLinkedHashMap) andbundleCache(unboundedConcurrentHashMap). ThebundleCacheis keyed by(Locale, baseName)where the locale originates from the HTTPAccept-Languageheader. In applications that explicitly register aResourceBundleMessageSourcebean and serve HTML error responses, an unauthenticated attacker can exhaust heap memory by sending requests with large numbers of uniqueAccept-Languagevalues, each causing a new entry in the unboundedbundleCache. Unlike GHSA-2hcp-gjrf-7fhc and the siblingmessageCache(both bounded),bundleCachewas not updated to use a bounded cache implementation.Details
The
bundleCacheis initialized ininject/src/main/java/io/micronaut/context/i18n/ResourceBundleMessageSource.javaat line 150:The
resolveBundle()method at line 169 inserts intobundleCachewith no eviction policy:The attack path requires:
ResourceBundleMessageSourcebean (non-default, requires explicit user configuration).Accept: text/htmlto any URL that returns an error (e.g., 404 for any non-existent path).Accept-Languagevalue (e.g.,zz-AA,zz-AB, …).DefaultHtmlErrorResponseBodyProvider.error()callsmessageSource.getMessage(code, locale)→CompositeMessageSourcedelegates toResourceBundleMessageSource→resolveBundle(locale)inserts one entry per unique locale intobundleCache.For locales that don't match any bundle file,
ResourceBundle.getBundle()throwsMissingResourceExceptionandOptional.empty()is stored — a low-cost sentinel. For locales that DO match a bundle, a fullResourceBundleobject is retained in memory. In either case, the map itself and theMessageKeyobjects grow without bound.Note: the
messageCacheis bounded at 100 entries but does not preventbundleCachegrowth, asresolveBundle()is called directly (bypassingmessageCache) whenever amessageCachemiss occurs.PoC
Against a Micronaut application with a
ResourceBundleMessageSourcebean registered (e.g.,@Bean ResourceBundleMessageSource messages() { return new ResourceBundleMessageSource("messages"); }):Each unique
zz-XXXXtag creates one newbundleCacheentry. TheMessageKey(Locale + baseName) and map overhead cost approximately 100-200 bytes per entry. At 100,000 entries, heap consumption from the cache alone reaches roughly 20 MB — significant in resource-constrained deployments. If a locale matches a bundle file, retainedResourceBundleobjects cost substantially more per entry.Impact
ResourceBundleMessageSourcebean (not the default configuration).Accept: text/htmlheaders and control over theAccept-Languagevalue.Recommended Fix
Apply the same bounded-cache pattern used for the sibling
messageCache:The number of distinct resource bundle files is bounded at compile time; a limit of 50 entries is more than sufficient for any realistic i18n configuration while fully preventing unbounded growth.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
micronaut-projects/micronaut-core (io.micronaut:micronaut-http-client)
v3.10.7: Micronaut Core 3.10.7Compare Source
🚨 Security
Full Changelog: micronaut-projects/micronaut-core@v3.10.6...v3.10.7
v3.10.6: Micronaut Core 3.10.6Compare Source
Security 👮🏻♂️🚨
This release contains fixes for this security advisory:
*Unbounded
bundleCacheinResourceBundleMessageSourceAllows Memory Exhaustion viaAccept-LanguageHeaderFull Changelog: micronaut-projects/micronaut-core@v3.10.5...v3.10.6
v3.10.5: Micronaut Core 3.10.5Compare Source
What's Changed
Other Changes 💡
Full Changelog: micronaut-projects/micronaut-core@v3.10.4...v3.10.5
v3.10.4: Micronaut Core 3.10.4Compare Source
What's Changed
Bug Fixes 🐞
Other Changes 💡
DefaultClassPathResourceLoaderhandle URLs with formatjar:file:/{JAR_PATH}!/{PREFIX}!/{RESOURCE}gracefully by @guillermocalvo in #10092Docs 📖
Netty Upgrade
TCK ✅
@Bodynot being required in 3.9.x by @timyates in #9318New Contributors
Full Changelog: micronaut-projects/micronaut-core@v4.3.12...v3.10.4
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.