🇰🇷 한글 설명
Apache Kafka Connect API에서 발생할 수 있는 보안 취약점으로, 인증된 운영자가 커넥터 설정 시 임의의 SASL JAAS 설정을 주입할 수 있습니다. 공격자는 JNDILoginModule을 사용하여 악성 LDAP 서버에 연결하게 함으로써 서버에서 원격 코드 실행(RCE)을 유도할 수 있습니다.
💡 쉬운 설명
해커가 설정값을 조작하여 서버가 가짜 주소로 접속하게 만든 뒤, 서버를 마음대로 조종할 수 있는 명령어를 실행하게 만드는 취약점입니다. 권한이 있는 사용자가 악의적인 설정을 입력할 경우 서버 전체가 위험해질 수 있습니다.
🇺🇸 원문 (English)
A possible security vulnerability has been identified in Apache Kafka Connect API.
This requires access to a Kafka Connect worker, and the ability to create/modify connectors on it with an arbitrary Kafka client SASL JAAS config
and a SASL-based security protocol, which has been possible on Kafka Connect clusters since Apache Kafka Connect 2.3.0.
When configuring the connector via the Kafka Connect REST API, an authenticated operator can set the `sasl.jaas.config`
property for any of the connector's Kafka clients to "com.sun.security.auth.module.JndiLoginModule", which can be done via the
`producer.override.sasl.jaas.config`, `consumer.override.sasl.jaas.config`, or `admin.override.sasl.jaas.config` properties.
This will allow the server to connect to the attacker's LDAP server
and deserialize the LDAP response, which the attacker can use to execute java deserialization gadget chains on the Kafka connect server.
Attacker can cause unrestricted deserialization of untrusted data (or) RCE vulnerability when there are gadgets in the classpath.
Since Apache Kafka 3.0.0, users are allowed to specify these properties in connector configurations for Kafka Connect clusters running with out-of-the-box
configurations. Before Apache Kafka 3.0.0, users may not specify these properties unless the Kafka Connect cluster has been reconfigured with a connector
client override policy that permits them.
Since Apache Kafka 3.4.0, we have added a system property ("-Dorg.apache.kafka.disallowed.login.modules") to disable the problematic login modules usage
in SASL JAAS configuration. Also by default "com.sun.security.auth.module.JndiLoginModule" is disabled in Apache Kafka Connect 3.4.0.
We advise the Kafka Connect users to validate connector configurations and only allow trusted JNDI configurations. Also examine connector dependencies for
vulnerable versions and either upgrade their connectors, upgrading that specific dependency, or removing the connectors as options for remediation. Finally,
in addition to leveraging the "org.apache.kafka.disallowed.login.modules" system property, Kafka Connect users can also implement their own connector
client config override policy, which can be used to control which Kafka client properties can be overridden directly in a connector config and which cannot.
📍 영향받는 시스템
Apache Kafka Connect 2.3.0 이상 (3.0.0 미만 버전은 설정 정책에 따라 영향 가능)
⚔️ 공격 벡터
REST API를 통해 커넥터의 sasl.jaas.config 속성에 JNDILoginModule을 주입하여 악성 LDAP 서버로 연결 유도
🛡️ 대응 방법
Apache Kafka 3.4.0 이상으로 업그레이드하거나, '-Dorg.apache.kafka.disallowed.login.modules' 시스템 속성을 사용하여 문제의 모듈을 차단하고 커넥터 클라이언트 설정 재정의 정책을 강화하십시오.
🔧 검증 코드
실행 결과에 차단 설정 속성이 포함되어 있지 않다면 취약한 설정 상태일 가능성이 높습니다.
echo $KAFKA_OPTS | grep -E 'org.apache.kafka.disallowed.login.modules' || echo 'Property not found'