La vulnérabilité Shellshock a été découverte fin 2014 (pour être précis, l'impact a été publié sur CVE-2014-6271 le 24 septembre 2014). Plus tard, une mise à jour a été publiée dans la version bash 4.1.2-15 avec un correctif pour la vulnérabilité Shellshock. Eh bien, le monde entier a continué à mettre à jour le bash et à sécuriser son shell auprès de Shellshock, mais étonnamment, de nombreuses machines de mon bureau n'ont pas été mises à jour pour une raison quelconque. Ce qui est effrayant, c'est que peu de ces machines dotées d'un shell vulnérable hébergeaient de nombreux services sur Internet. Selon divers blogs sur Internet, l'exploit Shellshock permet à un attaquant d'exécuter à distance une commande malveillante dans bash via des scripts CGI.
(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)
La première chose est de vérifier si votre BASH est vulnérable ou non au Shellshock . Ainsi, toute version de bash antérieure à 4.1.2 est sûre d'avoir cette vulnérabilité.
$ bash --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
(ou)
$ rpm -qa|grep bash bash-completion-1.3-7.el5 bash-3.2-32.el5_9.1
Maintenant que vous connaissez la version, exécutez les commandes ci-dessous pour confirmer qu'elle est vulnérable à Shellshock.
$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock" vulnerable If you see the word vulnerable above, you are vulnerable to shellshock
Solution :
Aller au bas de ce post. Au cas où, si vous souhaitez savoir comment fonctionne shellshock, alors lisez attentivement.
Comprendre les variables d'exportation dans SHELL :
Comme le dit la sortie ci-dessus, votre SHELL est vulnérable, mais voyons comment cela fonctionne.
Normalement, vous pouvez définir une variable d'environnement et l'utiliser dans un shell. Par exemple, comme ci-dessous :
$ test=1 $ echo $test 1
Mais vous ne pouvez pas utiliser directement la variable d'environnement "test" dans un nouveau bash shell . Vérifiez-le :
$ test=1 $ echo $test 1 $ bash $ echo $test
La sortie est vide. La raison en est qu'une variable d'environnement est accessible uniquement dans le même shell. Mais si vous exportez une variable d'environnement, elle est également disponible pour un nouveau shell bash. Voici un exemple :
$ var="testing" $ export var $ bash $ echo $var testing
Vous pouvez maintenant voir que la variable '$ var' a été définie et exportée dans un shell et accessible depuis un autre shell. Bien sûr, vous pouvez arrêter l'exportation à tout moment en utilisant la commande ci-dessous.
$ export -n var $ bash $ echo $var
De même, vous pouvez créer des fonctions et les exporter dans un shell et accéder à la fonction exportée à partir d'un autre shell. Voyons également cet exemple.
$ fnc() { echo "testing"; } $ fnc testing $ bash $ fnc bash: fnc: command not found
Dans la sortie ci-dessus, vous voyez "bash :fnc :commande introuvable ' parce que, le fnc n'est pas une fonction exportée. Vous ne pouvez donc pas l'appeler depuis un autre shell.
Exportons 'fnc ‘ aussi.
$ export -f fnc $ fnc testing $ bash $ fnc testing
Cela fonctionne comme prévu (depuis ‘fnc ‘ a été exporté et il est disponible dans un autre shell).
L'exportation d'une variable ou d'une fonction définira une variable d'environnement
$ env | grep -A1 fnc fnc=() { echo "testing" }
Maintenant, Shellshock exploite
Sur la base des exemples ci-dessus, nous avons appris qu'un nouveau shell bash ingère la définition d'une variable d'environnement commençant par () et l'interprète comme une fonction . Mais voici la vulnérabilité, le nouveau shell exécutera tout ce qui est présent dans la citation.
Par exemple :
Exécutez la commande ci-dessous :
$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '
Vérifiez la variable d'environnement pour 'sse_fnc' :
$ env | grep -A1 sse_fnc sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";
Accédez au nouveau shell bash :
$ bash Not good
Remarque : Nous venons de taper 'bash ' et vous voyez le texte 'Pas bon ' imprimé. Cela signifie que le nouveau shell commence à exécuter la fonction après avoir lu la variable d'environnement et exécute également les commandes de fin (même si l'accolade de la fonction s'est fermée après le "echo "function shellshock exploit" ;').
En d'autres termes "La variable exportée sse_fnc
a été passé au sous-shell qui a été interprété comme une fonction sse_fnc
mais les commandes de fin ont été exécutées (this is bad
) lorsque le sous-shell est apparu. »
via Fixee@StackExchange
comment cette vulnérabilité peut-elle être exploitée ?
Je ne pense pas que quiconque puisse expliquer mieux que ce type (shellshocker.net). Merci mec !
Comment réparer Shellshock ?
Simple, mettez à jour votre bash et essayez l'exploit pour vérifier si la vulnérabilité a disparu.
$curl https://shellshocker.net/fixbash | sh
La commande ci-dessus téléchargera automatiquement environ 30 correctifs et compilera bash à partir de la source. Vous pouvez exécuter régulièrement ce script pour maintenir votre bash à jour avec les derniers correctifs.
Une fois l'installation réussie. Vérifiez la version de bash comme ci-dessous :
$bash --version GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
Tester la vulnérabilité Shellshock :
$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock If you see the word vulnerable above, you are vulnerable to shellshock
À partir de la sortie ci-dessus, il n'a pas imprimé le mot "vulnérable". Donc mon bash est sécurisé !
(ou)
$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo
Si BASH est vulnérable, la commande ci-dessus affichera la date. Sinon, BASH est sécurisé.