
CVE-2026-43867 재현기 — Apache Camel camel-pqc AwsSecretsManagerKeyLifecycleManager 안전하지 않은 키 메타데이터 역직렬화 (RCE)
이 프로젝트는 Apache Camel의 camel-pqc 컴포넌트에서 Java 역직렬화 취약점을 시연하며, CVE-2026-43867로 추적됩니다. AwsSecretsManagerKeyLifecycleManager.deserializeMetadata()는 AWS Secrets Manager 시크릿에 저장된 포스트퀀텀 키 메타데이터를 Base64 디코딩한 후, 필터 없는 java.io.ObjectInputStream.readObject()로 역직렬화합니다. KeyMetadata로의 캐스팅은 readObject()가 반환된 후에만 발생하므로 readObject()의 모든 부수 효과가 먼저 실행됩니다. 해당 시크릿에 쓰기 권한(secretsmanager:PutSecretValue)이 있는 주체는 일반 키 수명주기 작업 중에 역직렬화되는 조작된 직렬화 객체를 저장할 수 있으며, 이는 잠재적으로 코드 실행으로 이어질 수 있습니다.
Advisory: https://camel.apache.org/security/CVE-2026-43867.html
| 속성 | 값 |
|---|---|
| 컴포넌트 | camel-pqc (AwsSecretsManagerKeyLifecycleManager) |
| 영향받는 클래스 | org.apache.camel.component.pqc.lifecycle.AwsSecretsManagerKeyLifecycleManager#deserializeMetadata |
| CWE | CWE-502: 신뢰할 수 없는 데이터의 역직렬화 |
| 영향 | 키 관리 애플리케이션에서 코드 실행 (메타데이터 시크릿에 대한 쓰기 권한 필요) |
| 영향받는 버전 | 4.18.0부터 4.18.3 이전, 4.19.0부터 4.21.0 이전 |
| 수정된 버전 | 4.18.3, 4.21.0 (camel-pqc는 4.14.x LTS 라인에 없음) |
| JIRA | CAMEL-23726 |
| 제보자 | Venkatraman Kumar (Securin) |
CVE-2026-46590과 동일한 결함 (독립적으로 제보됨; 해당 권고는 HashiCorp Vault 및 파일 기반 계열 매니저도 포함)이며, CVE-2026-40048 (CAMEL-23200)의 불완전한 수정 후속 조치이기도 합니다. CVE-2026-40048은
FileBasedKeyLifecycleManager를 JSON/PKCS#8/X.509 형식으로 변경했지만ObjectInputFilter를 추가하지 않았고 AWS/Vault 매니저를 포함하지 않았습니다.
// AwsSecretsManagerKeyLifecycleManager - affected 4.18.2
private KeyMetadata deserializeMetadata(String base64) throws Exception {
byte[] data = Base64.getDecoder().decode(base64);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
try (ObjectInputStream ois = new ObjectInputStream(bais)) { // NO ObjectInputFilter
return (KeyMetadata) ois.readObject(); // gadget fires here, before the cast
}
}
getKeyMetadata(keyId)는 <keyPrefix>/<keyId>/metadata라는 이름의 시크릿을 읽고, JSON 봉투({"metadata":"<base64>","keyId":...,"algorithm":...})를 파싱한 뒤 metadata 필드를 deserializeMetadata에 전달합니다. 수정 버전(4.18.3 / 4.21.0)은 모든 매니저에 대해 메타데이터를 JSON으로 저장하는 공용 KeyMetadataCodec을 도입하고, 남아 있는 레거시 ObjectInputStream 읽기를 허용 목록 ObjectInputFilter로 제한합니다.
피해자는 AWS 매니저로 PQC 키를 관리하는 애플리케이션입니다. 공격자는 메타데이터 시크릿(secretsmanager:PutSecretValue)에 쓸 수 있는 모든 주체입니다. 이 PoC는 AWS Secrets Manager를 에뮬레이션하기 위해 LocalStack을 사용하며, /exploit/attack 엔드포인트가 조작된 메타데이터 시크릿을 기록한 다음 매니저의 읽기 경로를 구동합니다.
CVE-2026-43867/
├── pom.xml # camel-pqc 4.18.2 + aws-sdk secretsmanager 2.41.28 + commons-collections 3.2.1
├── Dockerfile # runs the app (--add-opens for gadget build)
├── docker-compose.yml # LocalStack (Secrets Manager) + the reproducer app
├── README.md
└── src/main/
├── java/com/example/
│ ├── Application.java
│ ├── Gadget.java # CommonsCollections6 gadget, fires during readObject()
│ └── ExploitController.java # writes the crafted secret, then calls getKeyMetadata()
└── resources/
└── application.properties
실제 공격에서는 직렬화 바이트가 공격자에 의해 오프라인으로 생성됩니다(예: ysoserial 사용). 이 PoC는 가젯을 프로세스 내에서 빌드하므로 JVM이
--add-opens java.base/java.util=ALL-UNNAMED로 실행됩니다 — 이는 가젯 구성 세부 사항으로, 취약점과는 무관합니다.
mvn clean package -DskipTests
docker compose up -d --build
그러면 LocalStack(AWS Secrets Manager 에뮬레이션)과 재현기 앱이 시작되며, 앱은 엔드포인트 오버라이드를 통해 AwsSecretsManagerKeyLifecycleManager를 LocalStack에 연결합니다.
curl -s http://localhost:8080/exploit/attack
# -> Wrote crafted serialized metadata to AWS Secrets Manager secret 'pqc/keys/victim-key/metadata'.
# getKeyMetadata() threw java.lang.ClassCastException (expected — the gadget runs during readObject ...)
#
# >>> RCE proof — /tmp/pwned exists: true
docker exec cve-2026-43867 ls -la /tmp/pwned
docker compose down
AwsSecretsManagerKeyLifecycleManager를 사용하며 키 메타데이터 시크릿을 애플리케이션 자신의 신뢰된 ID 외에 다른 주체가 쓸 수 있는 모든 애플리케이션이 해당됩니다. 역직렬화는 일반적인 키 수명주기 작업(getKeyMetadata, loadExistingKeys, listKeys, 로테이션 검사 등) 중에 실행됩니다.
AwsSecretsManagerKeyLifecycleManager를 사용하는 애플리케이션.secretsmanager:PutSecretValue).commons-collections:3.2.1).4.18.3 / 4.21.0으로 업그레이드하십시오 (CAMEL-23726). 메타데이터는 JSON으로 저장되며, 남아 있는 모든 레거시 ObjectInputStream 읽기는 허용 목록 ObjectInputFilter로 제한됩니다.
업그레이드할 때까지:
secretsmanager:PutSecretValue를 애플리케이션 자신의 ID(최소 권한 IAM)로만 제한하십시오.이 재현기는 공개적으로 공개되었고 수정된 취약점에 대한 보안 연구 및 승인된 테스트 전용으로 제공됩니다. 명시적 허가 없이 시스템에 사용하지 마십시오.