Apache Tomcat Tribes EncryptInterceptor Fail-Open Unauthenticated RCE (CVE-2026-34486)
by Bartlomiej Dmitruk (striga.ai) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-34486
- Category
- web
- Affected product
- Apache Tomcat Tribes clustering (EncryptInterceptor)
- Affected versions
- 11.0.19+, 10.1.53+, 9.0.116+ (fixed in 11.0.21, 10.1.54, 9.0.117)
- Disclosed
- 2026-07-05
- Patch status
- patched
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | Bartlomiej Dmitruk (striga.ai) |
| CVE / Advisory | CVE-2026-34486 |
| Category | web |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | Weaponized |
| Tags | deserialization, rce, tomcat, tribes, clustering, java, gadget-chain, unauthenticated |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Apache Tomcat Tribes clustering (EncryptInterceptor) |
| Versions Affected | 11.0.19+, 10.1.53+, 9.0.116+ (fixed in 11.0.21, 10.1.54, 9.0.117) |
| Language / Platform | Java (target and gadget generator), Python 3 (payload delivery) |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
CVE-2026-34486 is a fail-open flaw in Apache Tomcat’s Tribes clustering EncryptInterceptor, which is meant to require encrypted, authenticated membership traffic between cluster nodes. Due to the bypass, an attacker can send an unencrypted, crafted message directly to the Tribes receiver channel and have it processed as if it were a legitimate encrypted cluster message. Because Tribes deserializes incoming membership payloads, this allows delivery of a Java deserialization gadget chain (a CommonsCollections6 variant) that achieves remote code execution with no authentication. The included PoC builds the gadget payload, sends it unencrypted to the Tribes port, and verifies RCE via a dropped marker file inside a Dockerized Tomcat target.
Vulnerability Details
Root Cause
EncryptInterceptor fails open: when it should reject or require encrypted/authenticated cluster membership messages, unencrypted attacker-supplied data is still passed through to Tribes’ Java deserialization logic (HashSet.readObject() and friends), allowing an untrusted object graph to be deserialized.
Attack Vector
- Generate a CommonsCollections6-variant serialized Java object (
GadgetGen.java) that triggersRuntime.exec()viaChainedTransformer/InvokerTransformerupon deserialization. - Connect directly to the Tomcat Tribes receiver port (4000 by default) without encryption.
- Send the serialized gadget-chain payload as a raw Tribes cluster message.
EncryptInterceptor’s fail-open behavior allows the message through to deserialization, which invokes the gadget chain and executes the attacker’s command inside the Tomcat process.
Impact
Unauthenticated remote code execution on any Tomcat node participating in Tribes clustering with EncryptInterceptor configured, in the affected version ranges.
Environment / Lab Setup
Target: Docker container running Tomcat 11.0.20 with Tribes EncryptInterceptor configured
Attacker: Docker, Java 21 (with commons-collections-3.1.jar), Python 3
Proof of Concept
PoC Script
See
GadgetGen.java,send_payload.py,run.sh,Dockerfile, andserver.xmlin this folder.
| |
run.sh builds a Docker image running Tomcat 11.0.20 with EncryptInterceptor enabled (per server.xml), compiles GadgetGen.java to produce a CC6 gadget-chain payload, and uses send_payload.py to deliver the payload unencrypted to the Tribes receiver on port 4000. Successful exploitation is confirmed by the presence of /tmp/pwned inside the container.
Detection & Indicators of Compromise
Signs of compromise:
- Unexpected child processes spawned by the Tomcat JVM
- Unrecognized cluster member connections on the Tribes port without valid encryption/authentication
- Presence of marker/dropped files (e.g. under
/tmp) not created by legitimate application logic
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade to Tomcat 11.0.21, 10.1.54, or 9.0.117, which fix the EncryptInterceptor fail-open behavior |
| Interim mitigation | Disable Tribes clustering or restrict the Tribes receiver port to a trusted, isolated network segment until patched |
References
Notes
Mirrored from https://github.com/striga-ai/CVE-2026-34486 on 2026-07-05.
| |