title: Apache ActiveMQ: Deserialization vulnerability on Jolokia that allows authenticated users to perform RCE
description: Once an user is authenticated on Jolokia, he can potentially trigger arbitrary code execution.
In details, in ActiveMQ configurations, jetty allows
org.jolokia.http.AgentServlet to handler request to /api/jolokia
org.jolokia.http.HttpRequestHandler#handlePostRequest is able to
create JmxRequest through JSONObject. And calls to
org.jolokia.http.HttpRequestHandler#executeRequest.
Into deeper calling stacks,
org.jolokia.handler.ExecHandler#doHandleRequest is able to invoke
through refection.
And then, RCE is able to be achieved via
jdk.management.jfr.FlightRecorderMXBeanImpl which exists on Java version above 11.
1 Call newRecording.
2 Call setConfiguration. And a webshell data hides in it.
3 Call startRecording.
4 Call copyTo method. The webshell will be written to a .jsp file.
The mitigation is to restrict (by default) the actions authorized on Jolokia, or disable Jolokia.
A more restrictive Jolokia configuration has been defined in default ActiveMQ distribution. We encourage users to upgrade to ActiveMQ distributions version including updated Jolokia configuration: 5.16.6, 5.17.4, 5.18.0, 6.0.0.
problem types: CWE-502 Deserialization of Untrusted Data
affected:
{
collectionURL: https://repo.maven.apache.org/maven2
defaultStatus: unaffected
packageName: org.apache.activemq:apache-activemq
product: Apache ActiveMQ
vendor: Apache Software Foundation
versions:
lessThan: 5.16.6, status: affected, version: 0, versionType: semver
lessThan: 5.17.4, status: affected, version: 5.17.0, versionType: semver
status: unaffected, version: 5.18.0
status: unaffected, version: 6.0.0
}
metrics:
other: [
content: {'text': 'Medium'}
type: Textual description of severity
]