LDAP Injection in CMAK (Cluster Manager for Apache Kafka) via Search Filter
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- scala
- Ambito
- authentication, security
Direzione di ricerca
Inizia da app/controllers/BasicAuthenticationFilter.scala e analizza renderSearchFilter() intorno alla riga 264, quindi verifica come il nome utente entra nel filtro di ricerca LDAP. Convalida i casi di caratteri speciali segnalati rispetto alle versioni interessate; il lavoro è completato quando l’input dell’utente viene sottoposto a escaping sicuro prima dell’inserimento e i vettori di injection elencati non modificano più il significato del filtro.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Yahoo CMAK (Cluster Manager for Apache Kafka) versions up to and including 3.0.0.6 are vulnerable to LDAP Injection (CWE-90) in the LDAP authentication module.
Vulnerability Details
File: app/controllers/BasicAuthenticationFilter.scala
Function: renderSearchFilter() at line 264
Root Cause: User-supplied username is inserted into LDAP search filter via simple string replacement (%s) without LDAP special character escaping.
Vulnerable Code (line 264):
private def renderSearchFilter(username: String): String = {
searchFilter.replaceAll("%s", username)
}
The function passes raw user input directly into an LDAP search filter string. LDAP metacharacters such as *, (, ), \, and NUL byte are not escaped before insertion.
Attack Vectors
An attacker can inject LDAP filter syntax through the HTTP Basic Authentication username field:
- Wildcard bypass (
*): Matches any LDAP entry, bypassing username validation - Boolean logic injection (
admin)(|(cn=*)): Injects OR conditions to match arbitrary entries - Filter manipulation (
*)(objectClass=*)): Extends filter to match all objects - Attribute enumeration (
*)(mail=*@yahoo.com)): Enumerates entries by attribute
Impact
- Authentication bypass: Attacker can log in as any LDAP user without knowing the password (if LDAP bind is not configured)
- LDAP data exfiltration: Enumeration of LDAP directory entries (usernames, emails, group memberships)
- Authorization escalation: Access admin-level CMAK functions (topic deletion, partition reassignment, broker configuration)
Proof of Concept
A complete Docker-based PoC is available demonstrating 4 confirmed attack vectors against a live CMAK + OpenLDAP setup:
# Attack vector: wildcard authentication bypass
import requests, base64
target = "http://cmak-host:9000/"
# Normal user "admin" → 401 without correct password
# Wildcard "*" → matches all LDAP entries → bypass
cred = base64.b64encode(b"*:anything").decode()
r = requests.get(target, headers={"Authorization": f"Basic {cred}"})
# Returns 200 instead of 401
Recommended Fix
Replace renderSearchFilter with proper LDAP escaping:
import javax.naming.ldap.Rdn
private def renderSearchFilter(username: String): String = {
searchFilter.replaceAll("%s", Rdn.escapeValue(username).toString)
}
This uses javax.naming.ldap.Rdn.escapeValue() which is part of the standard Java/Scala library and properly escapes all LDAP special characters including *, (, ), \, and NUL.
- Lingua principale
- Nessun dato sulla lingua
- Stelle
- 2.5k
- Fork
- 772
- Merge medio
- 3g 20h
- PR unite (30g)
- 49
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di github/advisory-database
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
github/advisory-database#9255 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
github/advisory-database#9164 · 1 reazione ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
github/advisory-database#8994 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
github/advisory-database#8898 · 4 commenti · 1 reazione ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
github/advisory-database#7882 · 1 commento ·
Tutte le issue di github/advisory-database
Issue simili
-
documentation help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
AXERA-TECH/ax-llm#75 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
gitbutlerapp/gitbutler#15998 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
sympozium-ai/sympozium#627 ·
-
clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:security impact:ux-friction issue-rating: 🦞 diamond lobster P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100