Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
cve-2026-34486-tomcat_encrypt_bypass_reproduction — CVE Reproduction: cve-2026-34486-tomcat_encrypt_bypass_reproduction | Kitploit
Tools/GitHubGitHub/razureink/cve-2026-34486-tomcat_encrypt_bypass_reproduction
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLearning & Education
GitHubrazureink/cve-2026-34486-tomcat_encrypt_bypass_reproduction

cve-2026-34486-tomcat_encrypt_bypass_reproduction

CVE Reproduction: cve-2026-34486-tomcat_encrypt_bypass_reproduction

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository
28 days agoNot yet reviewed

CVE-2026-34486: Apache Tomcat EncryptInterceptor Bypass

FieldValue
CVECVE-2026-34486
CVSS7.5 HIGH
TypeMissing Encryption of Sensitive Data
ComponentApache Tomcat Cluster EncryptInterceptor
Published2026

Overview

CVE-2026-34486 is a regression introduced by the incomplete fix for CVE-2026-29146. In Apache Tomcat's cluster replication, the EncryptInterceptor is responsible for encrypting and authenticating cluster messages. A refactoring in the fix for CVE-2026-29146 inadvertently moved the super.messageReceived(msg) call outside the try-catch block that handles decryption failures. As a result, when a message fails decryption (i.e., it is received in plaintext but the interceptor expects encrypted data), the raw unencrypted message is still passed up the handler chain instead of being discarded.

Technical Details

Code Flow Regression

The EncryptInterceptor.messageReceived() method is invoked when a cluster message arrives. The expected flow is:

  1. Receive raw message bytes
  2. Decrypt and validate the message (inside a try-catch)
  3. If decryption succeeds, call super.messageReceived(msg) to forward the decrypted message
  4. If decryption fails, discard the message (or log an error)

In the vulnerable versions, the decryption/validation logic remains wrapped in a try-catch, but the call chain was restructured so that super.messageReceived(msg) executes outside the try-catch block that guards the decryption. The variable msg is declared before the try-catch and assigned within it. When decryption throws an exception, msg retains its initial (unencrypted/raw) value, and the catch block only logs the error — it does not return early. Execution continues to super.messageReceived(msg) with the unprocessed raw data.

This means an attacker who can reach the Tomcat cluster port can inject arbitrary unencrypted messages that the interceptor will accept and process.

Simplified Pseudocode of the Bug

root@kitploit:~
public void messageReceived(Message msg) {
    // msg arrives raw
    try {
        // decrypt and populate msg fields
        decrypt(msg);
    } catch (Exception e) {
        log.error("Decryption failed", e);
        // BUG: no return statement here
    }
    // msg is still the original unencrypted object when catch is hit
    super.messageReceived(msg); // outside try-catch → passes raw data
}

The fix must ensure that either:

  • super.messageReceived(msg) is called only inside the try block after successful decryption, or
  • The catch block returns immediately so the unencrypted message is never forwarded.

Affected Versions

ProductVersions
Apache Tomcat 1111.0.20
Apache Tomcat 1010.1.53
Apache Tomcat 99.0.116

Reproduction

Prerequisites

  • A vulnerable Tomcat instance with cluster replication enabled using the EncryptInterceptor
  • Network access to the Tomcat cluster port (commonly 4000 or 5000, configured via <Receiver>)
  • Python 3.6+

Steps

  1. Identify a Tomcat cluster member with the EncryptInterceptor configured in server.xml.
  2. Determine the cluster receiver address and port.
  3. Run the exploit script to send a crafted raw cluster message.
  4. Observe that the message is accepted and logged by the receiver, bypassing encryption validation.

PoC

The exploit.py script in this directory demonstrates the bypass. It constructs a minimal Tomcat cluster message (based on the ClusterMessage serialization format) and sends it directly to the receiver port without any encryption. A vulnerable interceptor will accept and forward the message despite the missing encryption.

Mitigation

Upgrade to a patched version of Apache Tomcat:

ProductPatched Version
Apache Tomcat 1111.0.21+
Apache Tomcat 1010.1.54+
Apache Tomcat 99.0.117+

If upgrading immediately is not possible, restrict network access to the Tomcat cluster port to trusted hosts only (e.g., via firewall rules or binding the receiver to a loopback or private interface).

References

  • CVE-2026-34486
  • CVE-2026-29146 (original vulnerability)
  • Apache Tomcat Security Advisories
  • EncryptInterceptor Documentation
Download Tool