Wichtig
#28676
Absicherung von Kafka-Client-Konfiguration gegen SSRF und File-Reads (CVE-2025-27817)
Problembeschreibung
In der aktuellen Apache Kafka-Version (< 3.9.1) besteht eine potenzielle Sicherheitslücke im Zusammenhang mit der Konfiguration der Kafka-Clients bei Verwendung von SASL/OAUTHBEARER:
Die Kafka-Clients akzeptieren die Konfigurationsparameter:
- sasl.oauthbearer.token.endpoint.url
- sasl.oauthbearer.jwks.endpoint.url
Diese URLs werden verwendet, um Token bzw. JWKs bei der Authentifizierung abzurufen.
Die übergebenen Werte konnten bislang beliebige URLs enthalten (z. B. file:///etc/passwd, http://localhost/internal-api), was zu Arbitrary File Read oder SSRF (Server Side Request Forgery) führen konnte, insbesondere wenn Konfigurationen aus unsicheren Quellen kommen (z. B. bei SaaS-Integrationen, externen UIs oder Kafka Connect REST-APIs).
Lösung
Ab Version 3.9.1 wurde eine neue Sicherheitsmaßnahme eingeführt:
Die neue System-Property org.apache.kafka.sasl.oauthbearer.allowed.urls erlaubt es, eine Whitelist von erlaubten URLs festzulegen.
In 3.9.1 ist diese Whitelist standardmäßig leer (= alle URLs erlaubt), um abwärtskompatibel zu bleiben. Ab Version 4.0.0 sind alle URLs blockiert, sofern nicht explizit erlaubt.
Ziel dieses Tickets
- Upgrade der verwendeten Kafka-Client-Version von 3.9.0 auf 3.9.1
- Einführung der Property: -Dorg.apache.kafka.sasl.oauthbearer.allowed.urls
- Diese Property muss von der Anwendung konfigurierbar sein, da Kunden oder Deployments unterschiedliche OAuth-Endpunkte verwenden.
- Die Property muss mehrere URLs akzeptieren (Whitelist), in Form einer kommagetrennten Liste ohne Leerzeichen.
Beispielwert: -Dorg.apache.kafka.sasl.oauthbearer.allowed.urls=https://auth.example.com/token,https://auth.example.com/jwks
Die Property sasl.oauthbearer.token.endpoint.url bleibt weiterhin notwendig für die Funktionalität der Kafka-Authentifizierung. Sie gibt weiterhin an, wo das Access Token abgerufen wird. Neu ist nur, dass diese URL nun mit der Whitelist (allowed.urls) verglichen wird.
Die token.endpoint.url darf also nur noch in der Whitelist enthaltene Werte verwenden, andernfalls wird der Zugriff blockiert.
Umsetzung
- Kafka-Client auf Version 3.9.1 anheben
- Neue Konfigurationsmöglichkeit einführen für org.apache.kafka.sasl.oauthbearer.allowed.urls
- Konfiguration als Liste von erlaubten URLs umsetzen (mehrere Werte zulässig)
- Validierung: token.endpoint.url und jwks.endpoint.url müssen mit dieser Whitelist übereinstimmen
- Absicherung auf Betriebssystemebene gegen ungewollte File-URLs