Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-43866 — CVE-2026-43866 재현기 — Apache Camel camel-jms의 CVE-2026-40860 역직렬화 필터를 우회하는 위조 DefaultExchangeHolder (Exchange-state 주입) | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-43866
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHuboscerd/cve-2026-43866

CVE-2026-43866

CVE-2026-43866 재현기 — Apache Camel camel-jms의 CVE-2026-40860 역직렬화 필터를 우회하는 위조 DefaultExchangeHolder (Exchange-state 주입)

저장소 보기
22개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

camel-jms 위조된 DefaultExchangeHolder 필터 우회 재현기 (CVE-2026-43866)

이 프로젝트는 Apache Camel의 camel-jms(및 camel-sjms / JMS 계열) 컴포넌트에서 CVE-2026-40860 수정을 우회하는 CVE-2026-43866을 시연합니다. CVE-2026-40860은 수신되는 JMS ObjectMessage 페이로드에 역직렬화 후 클래스 허용 목록(java.**;javax.**;org.apache.camel.**;!*)을 추가했습니다. 그러나 org.apache.camel.support.DefaultExchangeHolder는 허용 목록에 포함된 org.apache.camel.** 네임스페이스에 있으므로, 최상위 객체가 DefaultExchangeHolder인 ObjectMessage는 검사를 통과합니다. 이후 수신 측은 transferExchange를 요구하지 않고 해당 객체에 대해 을 호출하여 — 홀더의 모든 null이 아닌 필드를 라우팅된 Exchange(본문, IN/OUT 헤더, Exchange 프로퍼티, 변수, Exchange ID, 예외)에 기록합니다. 따라서 를 게시할 수 있는 공격자는 하여 라우팅, 헤더, 프로퍼티 및 오류 처리를 조작할 수 있습니다.

DefaultExchangeHolder.unmarshal()
ObjectMessage
역직렬화 가젯 체인 없이, 보편적으로 신뢰되는 java.* 타입만으로 임의의 Exchange 상태를 주입

보안 권고: https://camel.apache.org/security/CVE-2026-43866.html

취약점 요약

속성값
영향 컴포넌트camel-jms (+ camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6)
영향 클래스org.apache.camel.component.jms.JmsBinding#extractBodyFromJms → DefaultExchangeHolder.unmarshal
CWECWE-502 (신뢰할 수 없는 데이터의 역직렬화) + CWE-20 (부적절한 입력 검증)
영향Exchange 상태 주입: 공격자가 제어하는 본문, 헤더, 프로퍼티, 변수, 예외
성격CVE-2026-40860 클래스 필터 수정의 우회 (수정 자체의 결함이 아님)
영향 버전3.0.0 이상 4.14.8 미만, 4.15.0 이상 4.18.3 미만, 4.19.0 이상 4.21.0 미만
수정 버전4.14.8, 4.18.3, 4.21.0
JIRACAMEL-23373 (jms), CAMEL-23409 (sjms)
제보자gaorenyusi

기술적 세부 사항

root@kitploit:~
// JmsBinding.extractBodyFromJms(...) - affected 4.18.2
if (message instanceof ObjectMessage objectMessage) {
    Object payload = objectMessage.getObject();
    checkDeserializedClass(payload);                        // CVE-2026-40860 allow-list: java.**;javax.**;org.apache.camel.**;!*
    if (payload instanceof DefaultExchangeHolder holder) {  // <-- DefaultExchangeHolder is org.apache.camel.** -> passes
        DefaultExchangeHolder.unmarshal(exchange, holder);  // <-- writes forged state into the Exchange; NO transferExchange gate
        Map<String, Object> jmsHeaders = extractHeadersFromJms(message, exchange);
        exchange.getIn().getHeaders().putAll(jmsHeaders);
        return exchange.getIn().getBody();
    } else {
        return payload;
    }
}

비대칭성은 다음과 같습니다: 송신 측은 ObjectMessage/transferExchange 생성을 제한하지만, 수신 측은 역직렬화한 모든 DefaultExchangeHolder를 언마샬합니다. 수정(4.14.8 / 4.18.3 / 4.21.0)은 새로운 objectMessageEnabled 옵션(security = "insecure:serialization", 기본값 false)을 추가합니다 — 명시적으로 활성화하지 않는 한 수신되는 ObjectMessage가 전혀 역직렬화되지 않으므로, 위조된 홀더는 unmarshal()에 도달할 수 없습니다. (ObjectMessage / transferExchange에 의존하는 라우트에는 호환성이 깨지는 변경입니다.)

JMS 프로바이더 허용 목록으로는 도움이 되지 않습니다. 이 PoC는 ActiveMQ 클라이언트를 현실적이고 엄격하게 제한된 trustedPackages = [java, javax, org.apache.camel]로 구성합니다 — org.apache.camel 항목은 정상적인 transferExchange를 사용하는 배포가 반드시 신뢰해야 하는 바로 그 항목입니다. 위조된 홀더는 그 자체가 DefaultExchangeHolder이고 모든 필드가 신뢰되는 java.* 타입이므로 정상 홀더와 구별할 수 없어 여전히 통과합니다.

피해자 라우트

root@kitploit:~
from("jms:queue:cve")                 // mapJmsMessage defaults to true; transferExchange NOT set
    .process(exchange -> { /* observes the injected body / headers / properties */ });

저장소 구조 — 공격자 vs. 피해자

피해자는 Camel JMS 컨슈머입니다. 공격자는 큐에 게시할 수 있는 모든 프로듀서입니다. 둘 다 Docker에서 실행되는 실제 Apache ActiveMQ Artemis 브로커와 통신합니다.

root@kitploit:~
CVE-2026-43866/
├── pom.xml                 # camel-jms 4.18.2 + activemq-client 6.2.4  (NO gadget library)
├── Dockerfile              # runs the app (no --add-opens; no gadget)
├── docker-compose.yml      # Artemis broker (quay.io) + the reproducer app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── JmsConfig.java            # OpenWire ConnectionFactory (trustedPackages incl. org.apache.camel) + jms component
    │   ├── VictimRoute.java          # victim: from("jms:queue:cve"); records what the route observed
    │   ├── CapturedState.java
    │   ├── ForgedHolderFactory.java  # builds a DefaultExchangeHolder via the public marshal() API
    │   └── ExploitController.java    # attacker: publishes the forged holder as an ObjectMessage
    └── resources/
        └── application.properties

사전 요구 사항

  • Java 17+ 및 Maven 3.8+
  • Docker (브로커와 앱 실행)

재현 단계

1단계: 전체 빌드 및 시작

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

2단계: 우회 트리거

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> Published a forged DefaultExchangeHolder as a JMS ObjectMessage to queue 'cve'.
#    ...
#      body      = INJECTED-BODY-...      (injected: true)
#      header    = pwned-header-...       (injected: true)
#      property  = pwned-property-...     (injected: true)
#
#    >>> Exchange-state injection proof — attacker controlled body+header+property: true

라우트는 설정한 적 없는 본문, 헤더, 프로퍼티로 실행되었습니다 — 모두 공격자의 위조된 홀더가 제공한 것입니다.

정리

root@kitploit:~
docker compose down

공격 벡터

공격자가 게시할 수 있는 대상에서 메시지를 읽는, mapJmsMessage=true(기본값)인 모든 Camel JMS 컨슈머(camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6)가 해당됩니다. 컨슈머에 transferExchange가 활성화되어 있을 필요는 없습니다.

악용 조건

  1. 영향받는 버전에서 mapJmsMessage=true(기본값)를 사용하는 Camel JMS 컨슈머여야 합니다.
  2. 공격자가 페이로드가 DefaultExchangeHolder인 ObjectMessage를 큐에 넣을 수 있어야 합니다.
  3. JMS 프로바이더가 페이로드를 역직렬화합니다 — transferExchange를 사용하는 모든 배포에서 프로바이더가 이미 org.apache.camel을 신뢰한다는 것을 의미합니다. 가젯 라이브러리는 필요하지 않습니다.

권장 수정

4.14.8 / 4.18.3 / 4.21.0(CAMEL-23373 / CAMEL-23409)으로 업그레이드하세요. JMS ObjectMessage 처리는 새로운 objectMessageEnabled 옵션을 통해 기본적으로 비활성화됩니다. 신뢰할 수 있는 프로듀서만이 메시지를 공급하는 대상에서만 활성화하세요.

완화 조치

업그레이드할 때까지:

  1. JMS 브로커 권한 부여를 통해 Camel이 소비하는 큐/토픽에 대한 게시 액세스를 신뢰할 수 있는 프로듀서로 제한하세요.
  2. ObjectMessage 본문을 매핑하는 JMS 컨슈머를 신뢰할 수 없는 네트워크에 노출하지 마세요.
  3. 참고: JMS 프로바이더 역직렬화 허용 목록은 이 특정 우회를 완화하지 않습니다 (페이로드는 보편적으로 신뢰되는 클래스와 DefaultExchangeHolder만 사용합니다).

면책 조항

이 재현기는 공개적으로 알려지고 수정된 취약점에 대한 보안 연구 및 승인된 테스트 전용으로 제공됩니다. 명시적 허가 없이 시스템에 사용하지 마십시오.

도구 다운로드