CVE-2014-6271 Bash Vulnerability example

J'essaie de comprendre ce qui pourrait être la préoccupation de security de CVE-2014-6271 et tous les liens que je vois me donne juste la command ci-dessous.

 env x='() { :;}; echo vulnerable' bash -c "echo this is a test" 

Si je reçois la sortie comme,

 vulnerable this is a test 

Ca veut dire, mon shell bash est vulnérable.

Mais de quelle manière est-il lié à la security? En d'autres termes, quel mal pourrait être fait pour mon système?

Le problème de security est que si un bash est lancé avec un set de variables d'environnement malveillant, ce bash exécutera le code dans la variable.

Par exemple, disons que vous avez un server web qui appelle /bin/foo bar . Disons que cette application foo utilise aussi une variable d'environnement appelée baz , et la valeur de cette variable provient de l'input fournie par l'user. Ainsi, l'application du server Web définit l'environnement, puis se lance dans foo bar . Eh bien, quand bash lit les variables d'environnement, si cette variable fournie a un code malveillant, bash va l'exécuter.

Normalement, ce n'est pas une préoccupation. Les variables d'environnement sont censées être complètement sécurisées. Si l'application utilisant cette variable se comporte mal, c'est une autre affaire. Mais bash n'utilise pas la variable baz dans la situation ci-dessus.

Par exemple:

testscript.sh

 export BAZ='() { :;}; echo MALICIOUS CODE' echo starting sleep /bin/bash -c 'sleep 1' 

Lors de l'exécution, nous obtenons les éléments suivants

 $ /bin/dash testscript.sh starting sleep MALICIOUS CODE 

Donc, simplement en ayant cet set de variables, nous pouvons get bash pour exécuter du code arbitraire.

Voici un autre exemple qui n'utilise pas de shell explicite, et ne fait aucune mention de bash:

 $ perl -e '$ENV{"BAZ"}="() { :;}; echo MALICIOUS CODE"; print("starting sleep\n"); system("/bin/sleep 1;");' starting sleep MALICIOUS CODE 

(pour que cela fonctionne, /bin/sh doit être bash)

Ces gars expliquent comment vous pouvez injecter du code dans le process CGI du server Web. Il fonctionne essentiellement en définissant le useragent d'une requête de manière à ce qu'il contienne le code d'exploit:

http://packetstormsecurity.com/files/128394/bash-poc.txt

 'header' => 'User-Agent: () { :;}; /bin/bash -c "'.$cmd.'"' 

Lorsque cette attaque réussit, vous pouvez accéder au server Web avec des privilèges de server Web et tout son contenu doit être considéré comme compromis.

Cela fonctionne également via sudo si env_reset est désactivé (il est activé par défaut dans Debian au less)

Defaults env_reset

mais si on le change

Defaults !env_reset (vu sur plusieurs systèmes dans le passé !!!)

puis

sudo Y='() { disabled; }; /bin/cat /etc/shadow;' /tmp/zomg.sh

root: $ 6 $ …… `
La faute de seg va ici

Le file sudoers contient:

alinh ALL = / tmp / zomg.sh