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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-23552 — CVE-2026-23552 - camel-keycloak의 교차 영역 토큰 수용 | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-23552
Authentication & AuthorizationVulnerability AnalysisExploitationWeb SecurityLearning & EducationAPI Security
GitHuboscerd/cve-2026-23552

CVE-2026-23552

CVE-2026-23552 - camel-keycloak의 교차 영역 토큰 수용

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-23552 - camel-keycloak의 렐름 간 토큰 수용

개요

Apache Camel의 KeycloakSecurityPolicy는 JWT 토큰의 iss(발급자) 클레임을 구성된 렐름에 대해 검증하지 않습니다. 즉, 한 Keycloak 렐름에서 발급된 토큰이 완전히 다른 렐름을 위해 구성된 정책에 의해 조용히 수락되어 테넌트 격리가 깨집니다.

영향을 받는 버전: 4.15.0, 4.16.0, 4.17.0

추적: https://issues.apache.org/jira/browse/CAMEL-22854

근본 원인

KeycloakSecurityHelper.parseAccessToken()에서 공개 키가 명시적으로 제공되지 않으면(기본 구성), 토큰은 Base64에서 디코딩만 될 뿐이며 검증되지는 않습니다:

root@kitploit:~
public static AccessToken parseAccessToken(String tokenString, PublicKey publicKey)
        throws VerificationException {
    if (publicKey != null) {
        return TokenVerifier.create(tokenString, AccessToken.class)
                .publicKey(publicKey)
                .verify()
                .getToken();
    } else {
        // no signature verification, no issuer check
        return TokenVerifier.create(tokenString, AccessToken.class).getToken();
    }
}

기본 코드 경로가 else 분기에 도달하므로 세 가지가 확인되지 않습니다:

  1. 토큰 서명이 검증되지 않습니다
  2. iss 클레임이 예상되는 {serverUrl}/realms/{realm}와 비교되지 않습니다
  3. Keycloak에서 JWKS 공개 키를 가져오지 않습니다

역할 검사는 토큰 페이로드 안의 역할 이름만 확인하므로 여전히 통과합니다. 역할 이름(tenant-user)이 여러 렐름에 걸쳐 우연히 일치하면(멀티 테넌트 구성에서 흔한 경우) 요청이 통과됩니다.

영향

각 테넌트가 별도의 Keycloak 렐름에 매핑되는 멀티 테넌트 애플리케이션에서 테넌트 A의 사용자가 테넌트 B를 위해 보호되는 라우트에 접근할 수 있습니다. 구체적으로:

  • 멀티 테넌트 SaaS 애플리케이션에서 테넌트 간 데이터 접근
  • 서로 다른 렐름에 서로 다른 역할 구성이 있는 경우 권한 상승
  • 렐름 기반 보안 격리의 완전한 우회

재현

이 프로젝트는 Apache Camel 4.17.0과 로컬 Keycloak 인스턴스를 사용하여 취약점을 시연합니다.

전제 조건

  • Java 17+
  • Maven 3.9+
  • Camel JBang CLI(jbang app install camel@apache/camel)
  • Docker 또는 Podman(내부적으로 camel infra가 사용)

설정

로컬 Keycloak을 시작합니다:

root@kitploit:~
camel infra run keycloak

이 명령은 localhost:8080에서 관리자 자격 증명 admin/admin으로 Keycloak을 시작합니다.

실행

root@kitploit:~
mvn verify

동작 방식

통합 테스트(CrossRealmTokenBypassIT)는 다음을 수행합니다:

  1. 로컬 Keycloak에 연결하고 acme 및 globex라는 두 개의 렐름을 생성합니다
  2. 각 렐름에 직접 접근 권한(direct access grants)이 활성화된 기밀 클라이언트(confidential client)를 생성합니다
  3. 두 렐름 모두에 tenant-user 렐름 역할을 생성합니다
  4. acme 렐름에 사용자 alice(비밀번호 alice123)를 생성하고 tenant-user 역할을 할당합니다
  5. globex 렐름에 바인딩된 KeycloakSecurityPolicy로 보호되는 Camel 라우트(direct:globex-protected)를 설정합니다
  6. acme 렐름에서 alice의 JWT 토큰을 획득합니다(발급자: http://localhost:8080/realms/acme)
  7. 해당 토큰을 globex 보호 라우트로 전송합니다

요청은 성공합니다. acme 토큰은 오류 없이 globex 정책을 통과합니다.

4.17.0에서의 예상 테스트 결과

테스트결과의미
testAcmeTokenIsObtainablePASS기본 확인 -- 토큰 획득이 정상 동작함

패치된 버전(4.18.0+)에서는 두 번째 테스트가 실패하고 세 번째 테스트가 통과할 것입니다.

정리

root@kitploit:~
camel infra stop keycloak

테스트는 또한 @AfterAll에서 acme 및 globex 렐름을 제거합니다.

수정

KeycloakSecurityPolicy는 iss 클레임이 {serverUrl}/realms/{realm}와 일치하지 않는 토큰을 거부해야 합니다. 수정 사항은 CAMEL-22854에서 추적되며 Camel 4.18.0(다음 LTS 릴리스)에 포함될 예정입니다.

도구 다운로드
testCrossRealmTokenAcceptedPASS취약점이 존재함을 확인함
testCrossRealmTokenShouldBeRejectedFAIL올바른 동작을 문서화함 -- 4.17.0에서는 예외가 발생하지 않음