🔍 CVE-2026-110952

0.0
CVSS Score
UNKNOWN
2026-10-28
2026-10-29 15:04
✅ 완료

🇰🇷 한글 설명

SASL/OAUTHBEARER 인증을 사용하는 Kafka 브로커는 JWT 서명은 항상 검증하지만, 발급자(iss) 및 대상(aud) 클레임 검증은 명시적으로 설정된 경우에만 수행한다. 두 옵션 모두 기본값이 미설정이므로, 다중 발급자 환경에서는 다른 발급자가 발급한 토큰이나 aud 클레임이 없는 토큰이 수락될 수 있다. Kafka 4.4.0부터는 JWKS 사용 시 두 옵션 설정을 필수로 요구한다.

💡 쉬운 설명

Kafka 서버가 로그인 토큰의 발급 기관과 사용 대상을 확인하지 않는 기본 설정이 있어, 여러 기관의 키를 쓰는 환경에서는 다른 기관이 만든 토큰으로 접속될 수 있습니다. 발급자와 대상 값을 명시적으로 설정하면 이 문제를 막을 수 있습니다.

🇺🇸 원문 (English)

A Kafka broker that authenticates clients with SASL/OAUTHBEARER using the bundled JWKS-backed validator always verifies the JWT signature, but two further checks are only performed when explicitly configured: - The issuer (iss) claim is verified only when sasl.oauthbearer.expected.issuer is set. When it is unset, a validly-signed token carrying the expected audience is accepted regardless of which issuer minted it. - An audience (aud) claim is required only when sasl.oauthbearer.expected.audience is set. When it is unset, a validly-signed token that omits the aud claim is accepted. (A token that carries an aud claim is still rejected when no expected audience is configured.) Both options default to unset and have been documented as optional (Importance LOW) since KIP-768 (3.1.0). Impact: The exposure is realizable mainly in deployments whose JWKS endpoint serves signing keys for more than one issuer (a multi-tenant identity provider, an aggregated/shared JWKS, or shared signing keys): a token minted for a different issuer, or a token lacking an audience, may be accepted to authenticate — potentially as a higher-privileged principal. In a single-issuer deployment where the provider controls the iss claim and issues audience-scoped tokens, exposure is limited. The signature trust anchor remains enforced in all cases. This is distinct from CVE-2026-33557 (acceptance of unsigned/unvalidated tokens); here the signature is validated and only the issuer/audience checks are not enforced by default. Mitigation (all affected versions, no upgrade required): Set both sasl.oauthbearer.expected.issuer (to your provider's exact iss value) and sasl.oauthbearer.expected.audience (to the audience(s) your brokers expect), per listener. Brokers that set these perform exact-match issuer/audience checks and are not affected. Both have been available since 3.1.0. Resolution: - From Apache Kafka 4.4.0: a broker configured with a JWKS endpoint fails to start unless both sasl.oauthbearer.expected.issuer and sasl.oauthbearer.expected.audience are set (secure by default). Deployments that intentionally do not restrict the issuer and/or audience may opt out per axis with sasl.oauthbearer.allow.unverified.issuer=true and/or sasl.oauthbearer.allow.unverified.audience=true.

📍 영향받는 시스템

sasl.oauthbearer.expected.issuer/audience를 미설정하고 JWKS 기반 OAUTHBEARER 인증을 사용하는 Apache Kafka 브로커 (3.1.0 이후, 4.4.0 미만)

⚔️ 공격 벡터

다중 발급자 JWKS를 공유하는 환경에서 다른 발급자가 서명한 유효 토큰 또는 aud 클레임이 없는 유효 서명 토큰을 사용해 (더 높은 권한의 주체로) 인증

🛡️ 대응 방법

각 리스너에 sasl.oauthbearer.expected.issuer와 sasl.oauthbearer.expected.audience를 정확한 값으로 설정하고, 4.4.0 이상으로 업그레이드 시 기본 보안 설정을 따름

🔧 검증 코드

명령 결과에 issuer와 audience 설정이 모두 존재하고 비어있지 않으면 대응된 것이며, 결과가 없거나 한쪽만 나오면 미설정 상태로 취약할 가능성이 있다 (실제 설정 파일 경로는 환경에 따라 다를 수 있음).

Shell / Script
grep -rE 'sasl.oauthbearer.expected.(issuer|audience)' $(dirname $(readlink -f $(which kafka-server-start.sh 2>/dev/null || echo /opt/kafka/bin/kafka-server-start.sh)))/../config/ 2>/dev/null

💻 영향받는 소프트웨어

Spring for Apache Kafka