Your attack surface isn't just port 443
CVE-2023-46604 is a perfect-10 RCE in Apache ActiveMQ. The exploit isn't a web request; it's a single message to the broker on port 61616, a port most web-focused scanning and firewalling never considers. The broker then fetches a remote XML file and runs whatever's in it.
Most vulnerability management is quietly built around HTTP. The scanners crawl web ports, the WAFs inspect web traffic, the exposure reviews ask “what websites do we have facing the internet.” CVE-2023-46604 doesn’t live there. It’s a remote code execution flaw in Apache ActiveMQ, a message broker, and the way you exploit it is to send a single crafted message to the broker’s OpenWire protocol on TCP port 61616. Not a URL. Not an HTTP request. A binary protocol message to a port that a web-centric security program tends to forget exists. Apache rated it CVSS 10.0; NVD scored it 9.8. Either way it’s about as bad as a number gets, and it’s unauthenticated.
That’s the lesson worth extracting, beyond patching one product: the internet-facing attack surface is not just your web servers.
What the bug is
ActiveMQ’s OpenWire protocol marshaller deserializes incoming data unsafely (CWE-502). An attacker sends an OpenWire EXCEPTION_RESPONSE packet that instructs the broker to instantiate an arbitrary class from its classpath. The class of choice is ClassPathXmlApplicationContext, part of the Spring Framework bundled with ActiveMQ, because it will load an XML application-context file from a URL the attacker supplies. The attacker hosts an XML file that defines a Spring bean which runs shell commands, the broker fetches it over HTTP, and the commands execute. So the only thing the attacker has to send the broker is “go load this XML from my server,” and the broker does the rest. Apache’s advisory lists the fixed versions: 5.15.16, 5.16.7, 5.17.6, and 5.18.3. CISA added it to the Known Exploited Vulnerabilities catalog on November 2, 2023, with a November 23 deadline and the ransomware flag.
Exploitation was immediate and broad. Rapid7 tied early activity to the HelloKitty ransomware family, whose source code had leaked weeks earlier; Trend Micro documented the Kinsing cryptomining and rootkit crew using it; and Cybereason observed exploitation as early as October 11, more than two weeks before the October 27 public disclosure. A trivial, reliable, perfect-score RCE on a service thousands of organizations exposed to the internet is exactly the kind of bug that draws a crowd.
Why the non-HTTP framing matters
The reason this CVE is instructive is that ActiveMQ is representative of a whole category of exposed services that aren’t web servers: message brokers, databases, caching layers, RPC and management protocols, directory services, and the various daemons that infrastructure software listens on. They run on their own ports, speak their own protocols, and frequently end up reachable from more of the network, or the internet, than anyone intended, because the people who stood them up were thinking about functionality, not exposure, and the people doing security reviews were looking at the web tier.
A few consequences fall out of that:
- Your asset and exposure inventory has to cover all ports, not just 80 and 443. If your external scanning only profiles web services, a broker on 61616, a database on 1433 or 5432, or a Redis on 6379 is an invisible hole. Enumerate listening services by port across your perimeter, not just web apps.
- Deserialization RCE is as devastating on a broker as on a web app, often more so. Message brokers sit at the center of application data flows and run with service privileges. A deserialization bug there is a clean unauthenticated RCE with a privileged vantage point, and the bundled-Spring gadget made this one a two-line exploit.
- “It’s internal” is doing a lot of unverified work. Many of these services were designed for trusted internal use and never hardened for exposure. Confirm what’s actually reachable rather than assuming a broker is safely behind the firewall.
What to do
- Patch ActiveMQ to a fixed release (5.15.16, 5.16.7, 5.17.6, 5.18.3, or later; 6.x is also fixed). Given a perfect-score, actively-exploited, ransomware-associated RCE, this is emergency-grade.
- Get port 61616 off the internet. There is essentially never a reason for an OpenWire broker port to be world-reachable. Restrict it to the application hosts that legitimately need it. This is the control that would have neutralized the entire campaign for most victims.
- Inventory your non-HTTP exposure. Run an external port scan that covers the full range, not just web ports, and reconcile every listening service against a reason it should be reachable. Brokers, databases, and admin protocols on odd ports are the usual surprises.
- Hunt on exposed brokers for the exploitation signature. Look for the ActiveMQ/Java process spawning shell commands or
cmd/powershell, outbound HTTP fetches of XML from unfamiliar hosts (theClassPathXmlApplicationContextretrieval), and the cryptominer or ransomware payloads that followed. Exploitation predated disclosure, so a long-exposed broker should be checked, not assumed clean.
The reframe is a prompt for your next exposure review: list everything facing the internet by port and protocol, and notice how much of it isn’t a website. CVE-2023-46604 is a reminder that attackers don’t limit themselves to the web tier, and neither should your defense. A perfect-10 RCE was sitting on a message-queue port that a lot of security programs never looked at, and the crews exploiting it found those brokers faster than their owners did. We track these non-web entries deliberately, because the catalog is full of bugs in services that don’t answer on 443, and those are the ones the web-shaped tools miss.
Sources
- CISA Known Exploited Vulnerabilities Catalog
- NVD CVE-2023-46604 — 2023-10-27
- Apache ActiveMQ CVE-2023-46604 announcement — 2023-10
- Rapid7: Suspected exploitation of Apache ActiveMQ CVE-2023-46604 — 2023-11-01
- Trend Micro: CVE-2023-46604 exploited by Kinsing for cryptominers and rootkits — 2023-11
- Cybereason: Beware of the messengers, exploiting the ActiveMQ vulnerability — 2023-11
Share
Related field notes
-
Your ERP is on the internet, and it's the system that cuts the checks
Security programs treat ERP as 'internal.' Oracle E-Business Suite exposes web modules to the internet by design, and CVE-2022-21587 turned one into unauthenticated code execution on the system that runs payroll, purchase orders, and the general ledger.
-
Apache HTTP Server 2.4.49: a path-traversal fix that needed a second fix
CVE-2021-41773 was a path traversal in Apache httpd 2.4.49 that could leak files and, with CGI enabled, reach RCE. The 2.4.50 fix was incomplete, so CVE-2021-42013 followed days later. Two CVEs, one bug, a textbook patch-the-patch.
-
Insecure deserialization isn't a Java problem. Ask Ruby's YAML.load.
CVE-2022-47986 is a pre-auth RCE in IBM Aspera Faspex from a single call to YAML.load on data an unauthenticated user controls. It's the Ruby version of the deserialization footgun, and ransomware crews used it to move onto Linux.
One email, every weekday morning.
You're in. Check your inbox.