Memory leak in micronaut-core
### Impact
Sending an invalid Content Type header leads to memory leak in `DefaultArgumentConversionContext` as this type is erroneously used in static state.
### Patches
The problem is patched in Micronaut 3.2.7 and above.
### Workarounds
The default content type binder can be replaced in an existing Micronaut application to mitigate the issue:
```java
package example;
import java.util.List;
import io.micronaut.context.annotation.Replaces;
import io.micronaut.core.convert.ConversionService;
import io.micronaut.http.MediaType;
import io.micronaut.http.bind.DefaultRequestBinderRegistry;
import io.micronaut.http.bind.binders.RequestArgumentBinder;
import jakarta.inject.Singleton;
@Singleton
@Replaces(DefaultRequestBinderRegistry.class)
class FixedRequestBinderRegistry extends DefaultRequestBinderRegistry {
public FixedRequestBinderRegistry(ConversionService conversionService,
List<RequestArgumentBinder> binders) {
super(conversionService, binders);
}
@Override
protected void registerDefaultConverters(ConversionService<?> conversionService) {
super.registerDefaultConverters(conversionService);
conversionService.addConverter(CharSequence.class, MediaType.class, charSequence -> {
try {
return MediaType.of(charSequence);
} catch (IllegalArgumentException e) {
return null;
}
});
}
}
```
### References
Commit that introduced the vulnerability
https://github.com/micronaut-projects/micronaut-core/commit/b8ec32c311689667c69ae7d9f9c3b3a8abc96fe3
### For more information
If you have any questions or comments about this advisory:
* Open an issue in Micronaut Core
https://github.com/micronaut-projects/micronaut-core/issues
* Email us at [info@micronaut.io](mailto:info@micronaut.io)