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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-40858 — CVE-2026-40858 재현기 — Apache Camel camel-infinispan 원격 집계 저장소 안전하지 않은 역직렬화 (RCE) | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-40858
Vulnerability AnalysisExploitationPapers & ResearchLearning & EducationBinary Exploitation
GitHuboscerd/cve-2026-40858

CVE-2026-40858

CVE-2026-40858 재현기 — Apache Camel camel-infinispan 원격 집계 저장소 안전하지 않은 역직렬화 (RCE)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

camel-infinispan 원격 집계 저장소 안전하지 않은 역직렬화 재현기 (CVE-2026-40858)

이 프로젝트는 CVE-2026-40858로 추적되는 Apache Camel camel-infinispan 컴포넌트의 Java 역직렬화 취약점을 시연합니다. ProtoStream 기반 원격 집계 저장소는 각 집계된 Exchange를 직렬화하여 원격 Infinispan 캐시에 저장하며, 항목을 다시 읽을 때(get() / recover()) java.io.ObjectInputStream과 ObjectInputFilter 없이 역직렬화합니다. 백킹 캐시에 쓸 수 있는 공격자는 조작된 직렬화 객체를 심어 저장소가 해당 키를 읽는 즉시 원격 코드 실행을 얻을 수 있습니다.

권고: https://camel.apache.org/security/CVE-2026-40858.html

취약점 요약

속성값
구성 요소camel-infinispan (원격 / HotRod 집계 저장소)
영향받는 클래스org.apache.camel.component.infinispan.remote.DefaultExchangeHolderProtoAdapter → DefaultExchangeHolderUtils.deserialize(byte[])
CWECWE-502: 신뢰할 수 없는 데이터의 역직렬화
영향원격 코드 실행 (RCE)
영향받는 버전4.0.0부터 4.14.7 미만, 4.15.0부터 4.18.2 미만, 4.19.0부터 4.20.0 미만
수정된 버전4.14.7, 4.18.2, 4.20.0
JIRACAMEL-23322
보고자Feng Ning (Innora Pte. Ltd.)

기술적 세부 사항

InfinispanRemoteAggregationRepository는 각 Exchange를 DefaultExchangeHolder로 저장합니다. ProtoStream 마샬러를 사용하면 해당 홀더는 DefaultExchangeHolderProtoAdapter에 의해 변환되며, ProtoStream 필드 #1은 일반 ObjectOutputStream으로 직렬화된 홀더입니다. 다시 읽어올 때 어댑터는 해당 바이트를 DefaultExchangeHolderUtils.deserialize에 전달하여 홀더를 재구성합니다:

root@kitploit:~
// DefaultExchangeHolderUtils.deserialize(byte[]) - 영향을 받는 버전
static DefaultExchangeHolder deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    ClassLoadingAwareObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais);
    return (DefaultExchangeHolder) ois.readObject();   // ObjectInputFilter 없음
}

ClassLoadingAwareObjectInputStream은 해석 가능한 클래스 집합을 제한하지 않고 오히려 확장하므로, readObject()는 클래스패스에 존재하는 모든 가젯 체인을 인스턴스화합니다. 바이트가 원격 캐시에서 직접 오기 때문에 해당 캐시 키에 쓸 수 있는 사람은 누구나 역직렬화 스트림을 제어하며, 값이 DefaultExchangeHolder로 캐스트되기 전에 readObject() 중에 가젯이 실행됩니다.

피해자 구성

라우트(또는 여기서처럼 애플리케이션 코드)는 Infinispan 서버를 백엔드로 하는 원격 집계 저장소를 사용합니다:

root@kitploit:~
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration();
conf.setCacheContainerConfiguration(hotRodClientConfig);   // Infinispan 서버를 가리킴

InfinispanRemoteAggregationRepository repo =
        new InfinispanRemoteAggregationRepository("camel-aggregation");
repo.setConfiguration(conf);
repo.setCamelContext(camelContext);
repo.start();

// ... 집계 중 Camel이 repo.add(...) / repo.get(...) / repo.recover(...) 호출

저장된 값이 변조된 키에 대한 get() / recover() 호출은 싱크를 트리거합니다.

저장소 구조 — 취약한 코드가 실행되는 위치

취약한 Camel 코드는 애플리케이션(호스트)에서 실행됩니다. Infinispan 서버는 Docker에서 실행되며 저장소가 통신하는 백엔드 저장소 역할을 합니다. 이는 실제 배포에서 저장소가 사용되는 방식을 반영합니다: 신뢰할 수 없는 데이터는 공유 캐시에 있습니다.

root@kitploit:~
CVE-2026-40858/
├── pom.xml                 # camel-infinispan 4.18.1 + commons-collections 3.2.1 (가젯)
├── docker-compose.yml      # quay.io/infinispan/server:16.1 (원격 캐시)
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── InfinispanRepoService.java   # InfinispanRemoteAggregationRepository 빌드 및 시작
    │   ├── Gadget.java                  # readObject() 중 실행되는 CommonsCollections6 가젯
    │   └── ExploitController.java       # /exploit/attack: 가젯이 포함된 홀더를 심고 읽기
    └── resources/
        └── application.properties

PoC 단축에 대한 참고. 실제 공격자는 악성 바이트를 공유 Infinispan 캐시에 직접 씁니다. 재현기를 자체 포함형으로 유지하기 위해 /exploit/attack은 동일한 저장소를 통해 (Exchange 본문에 가젯을 포함한 repo.add(...)) 값을 심은 다음 repo.get(...)을 호출하여 읽기를 트리거합니다. 가젯을 실행하는 **싱크는 Camel 자체의 readObject()**이며, 이는 공격자가 변조한 캐시 항목에서도 정확히 동일하게 실행됩니다.

전제 조건

  • Java 17+ 및 Maven 3.8+
  • Docker (Infinispan 서버 실행)

재현 단계

1단계: Infinispan 서버 시작

root@kitploit:~
docker compose up -d
# 준비될 때까지 대기:
curl -s -o /dev/null -w "%{http_code}\n" --retry-connrefused --retry 60 --retry-delay 1 \
     http://localhost:11222/rest/v2/cache-managers/default/health/status   # -> 200

2단계: 취약한 애플리케이션 빌드 및 실행

CommonsCollections6 가젯은 리플렉션을 통해 java.util로 조립되므로, JVM은 --add-opens java.base/java.util=ALL-UNNAMED로 시작해야 합니다:

root@kitploit:~
mvn clean package -DskipTests
java --add-opens java.base/java.util=ALL-UNNAMED \
     -jar target/cve-2026-40858-infinispan-0.0.1-SNAPSHOT.jar

3단계: 역직렬화 트리거 (RCE)

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> repo.get() returned: Exchange[...]
#
#    >>> RCE 증명 — /tmp/pwned 존재: true

가젯이 저장소가 심어진 캐시 값을 역직렬화하는 동안 /tmp/pwned를 생성합니다 (touch /tmp/pwned).

정리

root@kitploit:~
docker compose down
rm -f /tmp/pwned

공격 경로

InfinispanRemoteAggregationRepository(ProtoStream 마샬링)를 공격자가 쓸 수 있는 캐시에 대해 사용하는 모든 배포입니다. 캐시 쓰기 접근은 공유/멀티 테넌트 Infinispan 클러스터, 네트워크 접근 가능한 HotRod 엔드포인트 또는 동일한 캐시에 데이터를 저장하는 다른 프로듀서에서 올 수 있습니다.

악용 조건

  1. 공격자가 쓸 수 있는 캐시에서 읽는 camel-infinispan 원격 집계 저장소.
  2. 클래스패스에 가젯 라이브러리 (여기서는 commons-collections:3.2.1).

권장 수정

4.14.7 / 4.18.2 / 4.20.0으로 업그레이드하십시오. 수정 사항은 홀더 역직렬화에 ObjectInputFilter / 클래스 허용 목록을 적용하여 다른 Camel 집계 저장소(camel-leveldb, camel-cassandraql, camel-jms) 및 camel-mina / camel-netty에 적용된 강화와 일치시킵니다.

완화 조치

업그레이드할 때까지:

  1. Infinispan 캐시를 신뢰 경계로 취급 — 집계 캐시에 쓸 수 있는 사람을 제한하십시오.
  2. 클래스패스에서 가젯 라이브러리를 제거하십시오(commons-collections 3.x 및 유사한 것 업그레이드/제거).
  3. Infinispan HotRod 엔드포인트를 인증이 활성화된 신뢰할 수 있는 네트워크에 유지하십시오.

면책 조항

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

도구 다운로드