BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Faille Bash : Exécution Distante de Code

Faille Bash : Exécution Distante de Code

Dans un récent rapport de sécurité CVE-2014-6271, une faille d'exploitation distante a été découverte. Celle-ci permet potentiellement l'exécution de code arbitraire au travers des variables d'environnement qui sont passées aux processus enfants. Cela peut inclure les scripts CGI utilisés pour transmettre des variables d'environnement du serveur web aux processus enfants et utilisant une version vulnérable de Bash. Un article expliquant le bug plus en détail a été publié sur InfoQ.

Debian et RedHat ont déjà fourni des mises à jour des binaires. Les autres fournisseurs de systèmes d'exploitation ont déjà publié ou publieront bientôt leurs propres correctifs. Apple utilise une très vieille version de Bash, vulnérable à l'attaque, et aucune annonce de mise à jour n'a été faite pour le moment. Une réponse sur apple.stackexchange.com indique comment recompiler Bash sur les systèmes OS X.

La vulnérabilité provient d'une valeur donnée à une variable d'environnement :

 env x='() { :;}; echo vulnerable'

La prochaine fois qu'un processus /bin/bash sera lancé, le code sera exécuté et affiché dans le terminal. Le problème vient du fait que le shell Bash n'interprète pas correctement la variable et provoque l'exécution du code qui suit le point-virgule. Les scripts CGI lancés par Bash (ou /bin/sh quand /bin/sh est un alias vers /bin/bash) exécuteront donc ce type de code.

Un attaquant distant peut donc utiliser ce mécanisme pour envoyer du contenu malicieux (comme une variable USER) qui serait ensuite transmis aux scripts CGI. Si l'un de ces derniers est un script Bash, cela permet d'obtenir le contrôle complet de la machine.

Les développeurs de Bash fournissent plus de détails sur le sujet. Ces derniers peuvent être résumés comme suit :

Les détails techniques de la vulnérabilité sont les suivants. En plus de l'export de variables, Bash supporte également l'export de fonctions shell à d'autres instances de Bash de l'environnement du processus vers des processus enfants (indirectes). Les versions actuelles de Bash utilisent une variable d'environnement dont le nom est celui de la fonction et dont la valeur est la fonction commençant par () {. La vulnérabilité a lieu lorsque Bash ne s'arrête pas après avoir interprété le code de la fonction. Il continue d'interpréter et d'exécuter les commandes qui suivent la définition de la fonction. Écrire par exemple une variable d'environnement comme

i VAR=() { ignored; }; /bin/id

va exécuter /bin/id lorsque l'environnement sera importé dans le processus Bash (le processus est dans un état indéfini à ce stade, la variable PATH peut ne pas être encore en place et Bash pourrait échouer après l'exécution de /bin/id mais le mal est déjà fait).

Le fait qu'une variable d'environnement avec un nom arbitraire puisse être utilisée pour porter la définition de fonction contenant des commandes malicieuses rend cette faille particulièrement sévère car elle permet une exploitation par le réseau.

HTTP et SSH peuvent tous deux être vulnérables, entre autres par REMOTE_HOST et TERM respectivement.

Les développeurs et équipes opérationnelles responsables de systèmes disponibles par internet doivent immédiatement mettre Bash à jour ou prendre les mesures adaptées pour empêcher les éventuelles attaques qui ont déjà lieu selon certains rapports. Des correctifs sont disponibles pour les versions suivantes de Bash :

[http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-017](http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-017)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-018](http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-018)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052](http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-039](http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-039)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-012](http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-012)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-048](http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-048)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-025](http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-025)

MISE À JOUR du 25 septembre : Il existe toujours une vulnérabilité (CVE-2014-7169) malgré l'application de ces correctifs. Grâce aux efforts concentrés sur le sujet, de nombreux développeurs lisent le code et jouent avec pour tenter de trouver ce qui reste possible. Ces problèmes ont été remontés sur Twitter par Tavis Ormandy et le proof of concept permet d'écraser les fichiers appartenant à l'utilisateur du processus :

$ env X='() { (a)=>\' sh -c "echo date"; cat echo
sh: X: line 1: syntax error near unexpected token `='
sh: X: line 1: `'
sh: error importing function definition for `X'
Thu 25 Sep 2014 08:33:10 BST`

Le mainteneur de Bash, Chet Ramy, a confirmé le problème et a publié un correctif toujours en développement qui n'est donc pas encore officiel sur le site de Bash. Les administrateurs systèmes devraient considérer la version corrigée de Bash comme toujours vulnérable. Cet article sera mis à jour lorsqu'un correctif officiel sera publié.

MISE À JOUR du 26 septembre : Une série de correctifs a été proposée sur la mailing list de sécurité. Cette série corrige la faille CVE-2014-7169 et a depuis été publiée officiellement :

[http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-018](http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-018)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-019](http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-019)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053](http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-040](http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-040)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-013](http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-013)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-049](http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-049)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-026](http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-026)

La plupart des fournisseurs ont déjà publié des versions corrigées pour leurs clients :

MISE À JOUR du 29 septembre : Un second correctif a été publié. Il corrige la faille de surcharge des fonctions Bash :

$ env ls="() { echo 'Game over'; }" bash -c ls
Game over

Ce correctif change le nom des fonctions Bash exportées de façon à ce qu'elles commencent par une variable d'environnement BASH_FUNC. Cela évite le risque de collision avec des commandes systèmes appelées dans les scripts.

Les correctifs ont maintenant été officiellement publiés :

[http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-019](http://ftp.gnu.org/pub/gnu/bash/bash-3.0-patches/bash30-019)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-020](http://ftp.gnu.org/pub/gnu/bash/bash-3.1-patches/bash31-020)
[http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054](http://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-041](http://ftp.gnu.org/pub/gnu/bash/bash-4.0-patches/bash40-041)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-014](http://ftp.gnu.org/pub/gnu/bash/bash-4.1-patches/bash41-014)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-050](http://ftp.gnu.org/pub/gnu/bash/bash-4.2-patches/bash42-050)
[http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-027](http://ftp.gnu.org/pub/gnu/bash/bash-4.3-patches/bash43-027)

Les utilisateurs installant Bash et dont la --version correspond à l'une de celles listées ci-dessus sont hors de danger.

Pour finir, Apple a publié un correctif pour Bash plusieurs jours après les rumeurs. C'est une mise à jour manuelle (et ne sera donc pas installée par les mises à jour logicielles) et les paquets sont séparés pour Mavericks (10.9.5), Mountain Lion (10.8.5) et Lion (10.7.5).

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT