Il PoC è online per OpenSSH! Remote Code Execution (RCE) tramite ProxyCommand
È stata scoperta una nuova vulnerabilità, CVE-2025-61984, in OpenSSH. Consente l’esecuzione di codice remoto (RCE) manipolando il parametro ProxyCommand e la gestione dei caratteri della shell.
Lo sfruttamento è possibile anche con protezioni contro i metacaratteri standard della shell, a causa dell’uso di caratteri di controllo ed errori di sintassi che non interrompono l’esecuzione dei comandi in alcune shell.
OpenSSH fornisce il meccanismo ProxyCommand per la connessione tramite un proxy intermedio. In genere, viene utilizzato in questo modo: ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p . Tuttavia, nella configurazione di ~/.ssh/config, se viene specificato %r, il nome utente potrebbe contenere caratteri di controllo.
Sebbene la maggior parte dei caratteri pericolosi siano filtrati, come ;, |, (, ), &, in precedenza non filtrati erano “\n” (nuova riga), $, [ e altri, che in alcune shell possono modificare il comportamento del comando. Questo comportamento consente a un aggressore di costruire un valore di nome utente falso contenente un comando dannoso dopo l’errore sulla prima riga.
Se un repository Git contiene un sottomodulo dannoso con un URL del tipo url = “$[+]nsource poc.sh n@foo.example.com :foo”, e l’utente ha la seguente riga in ~/.ssh/config: ProxyCommand some-command %r@%h:%p, la clonazione con git clone –-recursive eseguirà la seconda riga (source poc.sh) se la shell utilizzata è Bash, Fish o csh. Ciò è possibile perché l’errore di sintassi $[+] causa un’interruzione di riga. Zsh, a differenza di altre shell, interrompe automaticamente tali errori.
Teleport è uno degli strumenti interessati, che genera un ProxyCommand con %r nella configurazione tsh. Questo consente a un aggressore che conosce il nome del cluster di avviare un attacco tramite sottomoduli git.
La patch OpenSSH abilita il filtraggio rigoroso dei caratteri di controllo nella funzione valid_ruser(): if (iscntrl((u_char)s[i])) return 0;. Si consiglia inoltre: aggiornare a OpenSSH 10.1; modificare ProxyCommand per utilizzare gli apici singoli: ‘%r’ per evitare interpretazioni; disabilitare SSH nei sottomoduli: git config –global protocol.ssh.allow user; disabilitare i gestori URL per ssh:// se consentono i caratteri di controllo; passare a shell con un comportamento più rigoroso (ad esempio Zsh).
Sebbene l’attacco richieda una configurazione specifica , è un ulteriore esempio della complessità e dell’imprevedibilità delle interazioni tra git, SSH e gli interpreti shell. Anche senza uno sfruttamento diretto, tali vulnerabilità dimostrano l’importanza di una gestione rigorosa dell’input utente negli strumenti da riga di comando e di automazione.
L'articolo Il PoC è online per OpenSSH! Remote Code Execution (RCE) tramite ProxyCommand proviene da il blog della sicurezza informatica.