Apache fixed a lock on the back door, but the fix left the door propped open with a brick
CVE-2026-34486 is a regression introduced by the fix for CVE-2026-29146 (a padding oracle in the Tribes EncryptInterceptor). The patch switched encryption modes but inadvertently caused the EncryptInterceptor to fail open — when decryption fails, the message is accepted and processed anyway instead of being dropped. An attacker who can reach the Tribes receiver port (default TCP/4000) can send a crafted Java deserialization payload that bypasses encryption entirely, achieving unauthenticated remote code execution. Affected versions are *exactly one release per branch*: 9.0.116, 10.1.53, and 11.0.20. Fixed in 9.0.117, 10.1.54, and 11.0.21 respectively.
The vendor rated this Important / HIGH (7.5) with a confidentiality-only CVSS vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N), which undersells the real impact — public PoCs demonstrate full RCE, not just data leakage. However, the 7.5 is partially justified by the heavy prerequisite stack: Tribes clustering must be enabled, EncryptInterceptor must be configured, port 4000 must be reachable, and deserialization gadgets must exist on the classpath. The biggest mitigant is the *absurdly narrow version window* — only organizations that patched CVE-2026-29146 but stopped one version short are exposed. Despite that, CISA added this to the KEV on August 4, 2026 after a Chinese threat actor was caught autonomously scanning and exploiting it across 460+ targets.
4 steps from start to impact.
Identify Tomcat Tribes listener
- Target runs Tomcat 9.0.116, 10.1.53, or 11.0.20
- Tomcat Tribes clustering is enabled
- TCP/4000 (or custom Tribes port) is network-reachable
- Tribes clustering is an opt-in feature; most Tomcat deployments are standalone
- Port 4000 is rarely exposed to the internet; typically bound to a backend VLAN
- Only one version per branch is affected — the regression window is days to weeks
Confirm EncryptInterceptor fail-open
- EncryptInterceptor is configured in server.xml (otherwise there is no encryption to bypass — but also no deserialization gate)
- If EncryptInterceptor was never configured, messages were always plaintext — but this also means the cluster was already exposed to deserialization attacks regardless of this CVE
Send deserialization payload
- Vulnerable deserialization gadget libraries on the classpath (e.g., commons-collections, commons-beanutils)
- Tomcat process has sufficient OS privileges for attacker's objective
- Modern Tomcat versions have reduced default gadget surface
- JEP 290 deserialization filters may block some gadget chains if configured
- Application-specific classpaths vary — not all deployments include exploitable gadgets
Post-exploitation
- Successful RCE from step 3
- Container-isolated Tomcat deployments limit lateral movement
- Network segmentation between app tier and data tier constrains blast radius
The supporting signals.
| In-the-Wild Exploitation | Active. CISA added CVE-2026-34486 to the KEV catalog on August 4, 2026. Chinese-speaking threat actor *knaithe/KnYuan* (Zhuhai, China) exploited this across 460+ targets using the Hermes Agent framework with DeepSeek AI as an autonomous operator. THN report |
|---|---|
| Proof of Concept | Public. Multiple PoCs: striga-ai/CVE-2026-34486 (original researcher Bartlomiej Dmitruk), 404-src/CVE-2026-34486. Both demonstrate CC6 gadget chain → RCE via TCP/4000. |
| EPSS | 0.42627 — top 1% of all CVEs by exploitation probability. Extremely high signal. |
| KEV Status | Listed August 4, 2026. CISA remediation deadline for FCEB agencies: August 7, 2026 (2-day window). |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5) — vendor vector covers confidentiality loss only. Real-world PoCs demonstrate integrity+availability impact via RCE, suggesting the true vector is closer to 9.8. |
| Affected Versions | Exactly one version per branch: 9.0.116, 10.1.53, 11.0.20. These are the releases that contained the incomplete fix for CVE-2026-29146. |
| Fixed Versions | 9.0.117, 10.1.54, 11.0.21 — released April 4, 2026. Distro backports: check RHEL (Bugzilla #2457027), Debian, Ubuntu trackers. |
| Exposure Surface | Tribes clustering runs on TCP/4000 by default. This port is rarely internet-facing — most clusters communicate over backend VLANs. No published Shodan/Censys counts, but the narrow version window limits the exposed population significantly. |
| Disclosure Timeline | Reported to Apache Security Team: March 26, 2026. Public disclosure: April 9, 2026. KEV listing: August 4, 2026 (~4 months post-patch). |
| Reporter | Bartlomiej Dmitruk from striga.ai |
noisgate verdict.
The single most decisive factor is the active KEV listing with confirmed nation-state exploitation, which overrides the narrow version window and clustering prerequisite that would otherwise push this toward MEDIUM. The fail-open-to-RCE chain requires no authentication, and public PoCs make exploitation trivial for any attacker who can reach TCP/4000.
Why this verdict
- KEV override: CISA added this to the KEV on August 4, 2026 with a 2-day remediation deadline for federal agencies. Active exploitation by a named threat actor (knaithe/KnYuan) using AI-augmented autonomous scanning across 460+ targets eliminates any theoretical-only risk argument.
- Unauthenticated RCE with public PoC: Despite the vendor's C:H-only CVSS vector, the striga-ai and 404-src PoCs demonstrate full code execution via CC6 deserialization gadgets. The real impact is RCE, not just information disclosure.
- Narrow version window (downward pressure): Only one version per branch (9.0.116, 10.1.53, 11.0.20) is affected. Organizations that skipped CVE-2026-29146's patch or already upgraded past it are not vulnerable. This dramatically shrinks the exposed population.
- Clustering prerequisite (downward pressure): Tribes clustering is an opt-in configuration. The majority of Tomcat deployments are standalone or use external session stores (Redis, Memcached). The fraction running Tribes with EncryptInterceptor is small — likely single-digit percentages of all Tomcat installs.
- Role multiplier: Tomcat instances in clustered configurations tend to be production application servers (typical role: line-of-business tier). In high-value roles — e.g., Tomcat fronting identity services, internal APIs with database credentials, or CI/CD artifact serving — RCE gives the attacker a pivot into backend data tiers. This is a *host-to-tenant* blast radius in most deployments, occasionally *tenant-to-domain* where the Tomcat service account has AD credentials. The clustering use-case itself signals production-grade deployment, making the affected population higher-value on average than a random Tomcat instance.
Why not higher?
Despite the KEV listing and RCE impact, CRITICAL is not warranted because the affected population is *extraordinarily narrow* — exactly one version per branch, requiring opt-in Tribes clustering with EncryptInterceptor, reachable port 4000, and classpath gadgets. Tomcat is not a canonically high-value-role component (it is not a domain controller, hypervisor, identity provider, or security agent). The blast radius is host-to-tenant, not fleet-scale.
Why not lower?
Active exploitation confirmed by CISA KEV with a named threat actor and 460+ observed targets makes anything below HIGH indefensible. The EPSS score of 0.43 (top 1%) independently corroborates real-world weaponization. The attack is unauthenticated and requires no user interaction, with multiple public PoCs lowering the barrier to entry for copycat attackers.
What to do — in priority order.
- Block TCP/4000 at the network boundary immediately — Firewall rules or security group changes to ensure the Tribes receiver port is only reachable from other cluster members on a dedicated VLAN. This is the single fastest mitigation — deploy within hours given the KEV listing. Even without this CVE, Tribes ports should never be internet-facing.
- Apply the vendor patch (9.0.117 / 10.1.54 / 11.0.21) — The definitive fix. These versions restore proper EncryptInterceptor enforcement. Given the KEV listing, patch immediately — do not wait for a maintenance window. The patch has been available since April 4, 2026.
- Configure JEP 290 deserialization filters — Add
-Djdk.serialFilterto restrict deserialization to known-safe classes. This blocks the CC6 gadget chain used in public PoCs. Deploy within the noisgate mitigation SLA of 30 days as a defense-in-depth layer even after patching. - Audit classpath for unnecessary gadget libraries — Remove or update commons-collections, commons-beanutils, and other known deserialization gadget sources from the Tomcat classpath if not required by your application. Reduces the exploitability of this and future deserialization flaws.
- Monitor for anomalous Tomcat child processes — EDR rules or auditd policies to alert on the Tomcat JVM spawning shells, curl, wget, or other unexpected child processes. Detects post-exploitation activity even if the initial exploit lands.
- WAF / reverse proxy in front of HTTP ports — this vulnerability targets the Tribes clustering port (TCP/4000), not the HTTP/HTTPS ports (8080/8443). WAF rules have zero visibility into Tribes protocol traffic.
- TLS termination at the load balancer — TLS on the HTTP listener does not encrypt Tribes cluster communication, which uses a separate channel and protocol.
- Upgrading to a newer Tomcat major version without checking the specific patch level — e.g., moving from 9.x to 10.x does not help if you land on 10.1.53, which is the affected version in that branch.
Crowdsourced verification payload.
Run this script on each Tomcat host to check the installed version against the three affected releases. Execute as any user with read access to the Tomcat installation directory. Example: bash check_cve_2026_34486.sh /opt/tomcat
#!/usr/bin/env bash
# check_cve_2026_34486.sh — Detect CVE-2026-34486 (Tomcat EncryptInterceptor bypass)
# Usage: bash check_cve_2026_34486.sh [CATALINA_HOME]
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
CATALINA_HOME="${1:-${CATALINA_HOME:-/opt/tomcat}}"
VERSION_FILE="$CATALINA_HOME/lib/catalina.jar"
if [ ! -f "$VERSION_FILE" ]; then
echo "UNKNOWN — catalina.jar not found at $CATALINA_HOME/lib/catalina.jar"
exit 2
fi
# Extract version from ServerInfo.properties inside catalina.jar
VERSION=$(unzip -p "$VERSION_FILE" org/apache/catalina/util/ServerInfo.properties 2>/dev/null | grep 'server.number=' | cut -d= -f2 | tr -d '[:space:]')
if [ -z "$VERSION" ]; then
echo "UNKNOWN — could not extract version from catalina.jar"
exit 2
fi
echo "Detected Tomcat version: $VERSION"
# Check against the three affected versions
case "$VERSION" in
9.0.116|10.1.53|11.0.20)
echo "VULNERABLE — $VERSION is affected by CVE-2026-34486"
# Additionally check if Tribes clustering is configured
SERVER_XML="$CATALINA_HOME/conf/server.xml"
if [ -f "$SERVER_XML" ]; then
if grep -qi 'Cluster' "$SERVER_XML" && grep -qi 'EncryptInterceptor' "$SERVER_XML"; then
echo "WARNING — Tribes clustering with EncryptInterceptor is configured. RCE is possible if port 4000 is reachable."
elif grep -qi 'Cluster' "$SERVER_XML"; then
echo "NOTE — Clustering enabled but EncryptInterceptor not found. Cluster was already unencrypted (pre-existing risk)."
else
echo "NOTE — Clustering does not appear enabled in server.xml. Exploitation requires Tribes clustering."
fi
fi
exit 1
;;
*)
echo "PATCHED — $VERSION is not one of the three affected releases (9.0.116, 10.1.53, 11.0.20)"
exit 0
;;
esacIf you remember one thing.
Sources
- Apache Tomcat 11 Security Advisories
- Apache Tomcat 9 Security Advisories
- The Hacker News — CISA Flags Tomcat Flaw as Actively Exploited
- striga-ai PoC — CVE-2026-34486
- Field Effect — Public Exploit Code for Tomcat Clustering Flaw
- Red Hat Bugzilla — CVE-2026-34486
- CyberSecurity News — Tomcat EncryptInterceptor Bypass
- HeroDevs — Apache Tomcat CVE Round-Up April 2026
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.