La vulnérabilité Shellshock
Shellshock est une vulnérabilité présente dans bash 4.3 et antérieur. Il s’agit d’une vulnérabilité logicielle qui se base sur de l’injection de commande en passant par les variables d’environement. C’est vachement cool car elle mène à une bonne grosse RCE des familles, donc c’est pas négligeable 😘.
Statistiques
Quelques statistiques afin d’illustrer la portée et l’attention portée de la vulnérabilité.
Shellshock a beaucoup été à la mode quand elle est sortie, énormément de trafic a été généré par des botnets lors de tentatives d’exploitation de la vulnérabilité.
Bon faut que je trouve des stats mais c’est un autre problème
Comment ça marche ?
|
|
Là on force l’utilisateur à lancer un shell sur $IP:$PORT
à chaque fois qu’il va ouvrir un shell, mais on peut immaginer d’innombrables autres scénarios d’attaque, de compromission de machine, ou de porte dérobée.
Pour comprendre le fonctionnement de cette payload, on va la prendre par étape.
Les fonctions dans bash
Si vous n’êtes pas connaisseur, il est possible de créer des fonctions dans bash directement, la syntaxe est la suivante :
|
|
Pour l’exécuter on peut l’appeller de cette manière :
|
|
Utiliser une variable d’environnement avec bash
Les variables d’environnement permettent de gérer pas mal de choses, mais principalement de passer des valeurs d’un programme à un autre, sans passer par des étapes compliquées.
Note : les variables type
$PATH
,$SHELL
,$PWD
,$TERM
… sont des variables d’environnement, utilisables par des programmes.
En bash :
|
|
On peut même les utiliser dans un sous-shell :
|
|
L’utilisation de variables d’environnement dans des sous-shells a été supprimée depuis, mais si vous voulez quand même tester, Docker ou VM 😉
Injection
La partie sympa de Shellshock, c’est qu’on pouvait injecter une commande à exécuter via les variables d’environnement, en ajoutant la commande à la suite de la déclaration d’une fonction :
|
|
Donc ouais, Shellshock c’est quand même vachement cool 😎.