CVE-2026-34197

Apache ActiveMQ Improper Input Validation (CVE-2026-34197)

Detects exploitation of CVE-2026-34197, an improper input validation vulnerability (CWE-20/CWE-94) in Apache ActiveMQ that has been added to the CISA Known Exploited Vulnerabilities catalog. Successful exploitation may allow remote attackers to execute arbitrary code or inject malicious content via crafted messages or broker connections. ActiveMQ's OpenWire protocol and web console are common attack surfaces for this class of vulnerability.

Vulnerability Intelligence

KEV — Known Exploited

Affected Software

Vendor
Apache
Product
ActiveMQ

Weakness (CWE)

Timeline

Disclosed
April 16, 2026

CVSS

8.8
High (7.0–8.9)

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Write-up coming soon

What is CVE-2026-34197 Apache ActiveMQ Improper Input Validation (CVE-2026-34197)?

Apache ActiveMQ Improper Input Validation (CVE-2026-34197) (CVE-2026-34197) maps to the Initial Access and Execution and Persistence tactics — the adversary is trying to get into your network in MITRE ATT&CK.

This page provides production-ready detection logic for Apache ActiveMQ Improper Input Validation (CVE-2026-34197), covering the data sources and telemetry it touches: CommonSecurityLog, DeviceNetworkEvents, DeviceProcessEvents. The queries below are rated critical severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Initial Access Execution Persistence
Microsoft Sentinel / Defender
kusto
let activemq_ports = dynamic([61616, 61617, 8161, 8162, 5672, 1883, 61613]);
let suspiciousPatterns = dynamic(["classInfo", "ExceptionResponse", "../", "%2e%2e", "cmd.exe", "/bin/sh", "powershell", "wget", "curl", "ClassPathXmlApplicationContext"]);
union
(
  CommonSecurityLog
  | where TimeGenerated > ago(24h)
  | where DestinationPort in (activemq_ports) or SourcePort in (activemq_ports)
  | where Message has_any (suspiciousPatterns) or RequestURL has_any (suspiciousPatterns)
  | extend AttackVector = "network_request"
),
(
  DeviceNetworkEvents
  | where TimeGenerated > ago(24h)
  | where RemotePort in (activemq_ports) or LocalPort in (activemq_ports)
  | where InitiatingProcessCommandLine has_any (suspiciousPatterns)
  | extend AttackVector = "process_network"
),
(
  DeviceProcessEvents
  | where TimeGenerated > ago(24h)
  | where ParentProcessName in~ ("activemq.bat", "activemq", "java") or ProcessCommandLine has "activemq"
  | where ProcessCommandLine has_any (["cmd.exe", "powershell", "bash", "sh", "wget", "curl", "nc", "ncat", "/tmp/", "base64"])
  | extend AttackVector = "process_spawn"
)
| project TimeGenerated, AttackVector, DeviceName, AccountName, ProcessCommandLine, RemoteIP, RemotePort, AdditionalFields
| summarize Count=count(), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Vectors=make_set(AttackVector) by DeviceName, RemoteIP
| where Count >= 1

Detects Apache ActiveMQ exploitation attempts via CVE-2026-34197 by correlating suspicious network connections to ActiveMQ ports with process spawning anomalies and known malicious payload patterns in network traffic and process command lines.

critical severity medium confidence

Data Sources

CommonSecurityLog DeviceNetworkEvents DeviceProcessEvents

Required Tables

CommonSecurityLog DeviceNetworkEvents DeviceProcessEvents

False Positives

  • Legitimate ActiveMQ administrative tasks via CLI tools such as activemq-admin or management scripts
  • Authorized penetration testing or red team exercises targeting ActiveMQ brokers
  • Java process restarts or health-check scripts spawned by monitoring agents
  • Scheduled data pipeline scripts that use curl or wget to interact with ActiveMQ REST API

Sigma rule & cross-platform mapping

The detection logic for Apache ActiveMQ Improper Input Validation (CVE-2026-34197) (CVE-2026-34197) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: process_creation
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1ActiveMQ OpenWire Port Probe with Malicious Payload Pattern

    Expected signal: Network connection event to port 61616 from non-standard source; payload content containing 'ClassPathXmlApplicationContext' visible in network capture or IDS alerts

  2. Test 2Simulated Post-Exploitation Shell Spawn from Java Process

    Expected signal: Sysmon Event ID 1 or Linux audit execve showing bash/sh spawned with parent process containing 'java' in the image path; process command line containing 'id', 'hostname', or 'whoami'

  3. Test 3ActiveMQ Web Console Access with Path Traversal Attempt

    Expected signal: HTTP access log entries on port 8161 containing '../' path sequences and 'ClassPathXmlApplicationContext' in request body or destination parameter; network connection events to port 8161 from unexpected source


Response Playbook

Triage

  1. Confirm the targeted host is running Apache ActiveMQ and identify the version using 'activemq --version' or by inspecting the activemq.jar MANIFEST.MF — cross-reference with the vendor advisory to determine if the version falls within the affected range for CVE-2026-34197.
  2. Review Apache ActiveMQ broker logs (typically activemq.log or data/activemq.log) for anomalous connection patterns, repeated ExceptionResponse entries, unexpected ClassPathXmlApplicationContext references, or requests with path traversal sequences (../) originating from external IPs.
  3. Examine the process tree of the ActiveMQ JVM (java.exe / java) for any unexpected child processes such as cmd.exe, powershell.exe, bash, sh, wget, or curl — these indicate successful code execution following exploitation of the input validation flaw.
  4. Check network flow data for unusual outbound connections from the ActiveMQ host to external IPs on non-standard ports, which may indicate reverse shell or C2 callback activity following successful exploitation.

Containment

  1. Immediately isolate the affected ActiveMQ broker host from the network at the firewall or host-based firewall level to prevent lateral movement or further data exfiltration while preserving forensic state — do not shut down the process until memory can be captured.
  2. Block inbound access to all ActiveMQ service ports (61616, 61617, 8161, 8162, 5672, 1883, 61613) from untrusted network segments using firewall ACLs, and restrict the ActiveMQ web console (port 8161) to management VLAN only until the patch is applied and validated.

Evidence Collection

  1. Capture a full memory dump of the Java process running ActiveMQ using tools such as jmap, procdump (Windows), or /proc/<pid>/mem (Linux) before any remediation steps — heap analysis may reveal injected class objects or deserialized payloads.
  2. Preserve ActiveMQ broker logs, access logs, and OS-level authentication logs (Windows Event Logs / Linux auth.log) with original timestamps and file integrity hashes (SHA-256) for forensic chain-of-custody — also capture a snapshot of any new or modified files in the ActiveMQ installation directory and temp directories.

Escalation Criteria

  • ! Escalate immediately to IR if confirmed child process execution is observed from the ActiveMQ JVM, if outbound C2 connections are detected from the broker host, or if evidence of lateral movement (new user accounts, credential access events, SMB/RDP to internal hosts) is found.
  • ! Escalate if the ActiveMQ broker is deployed in a sensitive environment (payment processing, OT/SCADA integration, identity-adjacent infrastructure) or if the broker is exposed directly to the internet, given CISA KEV designation indicating active in-the-wild exploitation.

Investigation Guide

Forensic Artifacts

  • > ActiveMQ broker log file (activemq.log) containing ExceptionResponse, ClassInfo, or ClassPathXmlApplicationContext strings alongside external source IPs
  • > New or modified files in the ActiveMQ installation directory, /tmp, or %TEMP% created by the java process user account around the time of the alert
  • > OS process creation events (Sysmon Event ID 1, Linux audit execve) showing java or activemq as parent with shell interpreter as child
  • > Network connection records showing the ActiveMQ host initiating outbound connections to external IPs on uncommon ports (indicative of reverse shell)

Tuning Guidance

Start by whitelisting known management hosts and authorized ActiveMQ admin IP ranges to suppress legitimate administrative connections. Tune out Java application servers that co-reside on the same host and legitimately spawn helper scripts. If your environment uses Spring Framework, consider adding exclusions for ClassPathXmlApplicationContext in contexts where the source is an authenticated internal application. Adjust confidence thresholds based on whether your ActiveMQ instance is internet-facing (raise severity) or internal-only (reduce base noise). For the process-spawn detections, build an allowlist of known wrapper scripts (e.g., health-check.sh, restart.sh) that are legitimately launched by the ActiveMQ service account.


Hunting Queries

Hunt for any shell interpreter or download utility spawned as a child of Java or ActiveMQ processes over the past 7 days — this pattern is highly indicative of code execution resulting from CVE-2026-34197 exploitation regardless of network-level detection.

Hunting — KQL
kql
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where ParentProcessName in~ ("java", "activemq", "activemq.bat")
    or (ParentProcessName =~ "java" and ProcessCommandLine has_any (["activemq", "broker"]))
| where ProcessName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "bash", "sh", "dash", "wget", "curl", "nc", "ncat", "python", "python3", "perl", "ruby")
| project TimeGenerated, DeviceName, AccountName, ParentProcessName, ParentProcessId, ProcessName, ProcessCommandLine
| order by TimeGenerated desc
Hunting — SPL
spl
index=* sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
| where (ParentImage LIKE "%java%" OR ParentImage LIKE "%activemq%")
| where (Image LIKE "%cmd.exe%" OR Image LIKE "%powershell%" OR Image LIKE "%bash%" OR Image LIKE "%wget%" OR Image LIKE "%curl%" OR Image LIKE "%python%" OR Image LIKE "%perl%")
| eval hunt_reason="activemq_suspicious_child"
| stats count BY host, Image, ParentImage, CommandLine, ParentCommandLine
| sort -count

Atomic Red Team Tests

Test 1 ActiveMQ OpenWire Port Probe with Malicious Payload Pattern
linux

Simulates an attacker probing the ActiveMQ OpenWire port and sending a crafted payload containing known exploit indicator strings to test detection coverage at the network layer.

Command

bash
# LAB ONLY - requires Python3 and netcat
# Step 1: Verify ActiveMQ is listening
nc -zv 127.0.0.1 61616
# Step 2: Send probe payload containing exploit indicator string
python3 -c "
import socket, time
s = socket.socket()
s.connect(('127.0.0.1', 61616))
s.sendall(b'\x00\x00\x00\x01\x01\x00ClassPathXmlApplicationContext\x00')
time.sleep(1)
print('Response:', s.recv(1024))
s.close()
"

Cleanup

bash
# No cleanup required — this is a read-only probe
echo 'Probe complete — no artifacts to clean'

Expected Telemetry

Network connection event to port 61616 from non-standard source; payload content containing 'ClassPathXmlApplicationContext' visible in network capture or IDS alerts

Expected Detection

Should trigger kql, spl, qradar_aql, and sumo_logic queries matching ActiveMQ port connections with suspicious payload patterns

Test 2 Simulated Post-Exploitation Shell Spawn from Java Process
linux

Simulates the post-exploitation behavior of CVE-2026-34197 by manually spawning a shell interpreter as a child of a Java process, mimicking what an attacker-controlled class loader injection would produce.

Command

bash
# LAB ONLY - simulate child shell from java parent
# Requires Java installed
java -cp /dev/null -Djava.class.path=/dev/null \
  -Dactivemq.home=/opt/activemq \
  -XX:+PrintFlagsFinal \
  -version 2>/dev/null & JAVA_PID=$!
sleep 1
# Simulate attacker spawning bash via process substitution
bash -c 'id; hostname; whoami; echo CVE-2026-34197-test' &
echo "Test complete - PID: $JAVA_PID"
kill $JAVA_PID 2>/dev/null || true

Cleanup

bash
kill $(pgrep -f 'CVE-2026-34197') 2>/dev/null || true
echo 'Cleanup complete'

Expected Telemetry

Sysmon Event ID 1 or Linux audit execve showing bash/sh spawned with parent process containing 'java' in the image path; process command line containing 'id', 'hostname', or 'whoami'

Expected Detection

Should trigger elastic_eql sequence rule and crowdstrike_cql queries matching suspicious child process spawning from Java parent processes

Test 3 ActiveMQ Web Console Access with Path Traversal Attempt
linux

Simulates an attacker attempting path traversal against the ActiveMQ web console (port 8161) as part of CVE-2026-34197 exploitation, testing HTTP-level detection coverage.

Command

bash
# LAB ONLY - test against local ActiveMQ web console
# Requires ActiveMQ running with web console enabled on port 8161
# Test 1: Normal login probe
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8161/admin/ -u admin:admin
# Test 2: Path traversal attempt
curl -s -o /dev/null -w '%{http_code}' 'http://127.0.0.1:8161/admin/../../etc/passwd'
# Test 3: ClassPathXmlApplicationContext injection probe
curl -s -X POST 'http://127.0.0.1:8161/api/message' \
  -H 'Content-Type: application/json' \
  -d '{"destination":"ClassPathXmlApplicationContext","body":"test"}' \
  -u admin:admin

Cleanup

bash
echo 'No persistent artifacts created by web console probes'

Expected Telemetry

HTTP access log entries on port 8161 containing '../' path sequences and 'ClassPathXmlApplicationContext' in request body or destination parameter; network connection events to port 8161 from unexpected source

Expected Detection

Should trigger kql CommonSecurityLog filter for RequestURL containing path traversal patterns, and qradar_aql payload match for ClassPathXmlApplicationContext on ActiveMQ ports

Related Detections