Statut
Apple a publié des correctifs de sécurité Bash pour Shellshock et des vulnérabilités connexes sous le nom " OS X bash Update 1.0 ". Ils peuvent être installés via une mise à jour système normale pour les personnes utilisant OS X Mountain Lion v10.8.5 ou OS X Mavericks v10.9.5 (ils sont inclus dans la mise à jour de sécurité 2014-005 ). Ils peuvent également être installés manuellement. Des correctifs Apple officiels sont également disponibles pour OS X Lion v10.7.5 et OS X Lion Server v10.7.5, mais ceux-ci ne sont disponibles que par téléchargement manuel. Les correctifs de sécurité sont disponibles via différentes URL en fonction de la version du système d'exploitation:
(Si de nouveaux correctifs sont publiés, mettez-les ici, mais conservez-les également pour référence.)
Le correctif Apple corrige Shellshock et plusieurs autres vulnérabilités et convient à la plupart des utilisateurs. les gens peuvent arrêter de lire ici.
CEPENDANT, l'attention portée à bash par le bogue Shellshock a poussé de nombreux chercheurs à regarder de près ce qui se passe et de plus en plus de vulnérabilités (difficiles à exploiter) continuent à être trouvées. Si vous êtes très préoccupé par la sécurité (car vous utilisez peut-être OS X Server pour héberger un site Web accessible au public), essayez de suivre les vulnérabilités et les correctifs au fur et à mesure de leur progression en compilant vous-même. Sinon, ne vous inquiétez pas pour ça.
Pensez à Apple pour publier une autre mise à jour à venir dans le futur lorsque la poussière s’installera pour trouver de nouvelles vulnérabilités.
Un ensemble officiel de correctifs de bash lui-même est disponible pour les bash 3.2, 52, 53 et 54 (qui correspondent aux correctifs 25, 26 et 27 de Bash 4.3), qui corrigent à la fois CVE-2014-6271 et CVE-2014-7169, ainsi que le «Game over» affiché ci-dessous. Cela a été testé par moi ( @alblue ) et la publication a été mise à jour en conséquence (et des mises à jour supplémentaires ont été apportées: voir révision 41 pour la publication qui s'arrête au correctif 54).
De nombreuses vulnérabilités supplémentaires ont été rapportées contre bash. Selon le message de Michal Zalewski, si vous possédez le correctif 54 (et probablement le correctif officiel d'Apple) "il ne sert à rien de devenir obsédé par le statut de ces bogues individuels, car ils ne devraient plus poser de risque pour la sécurité:"
CVE-2014-6271 - RCE original trouvé par Stéphane. Corrigé par bash43-025 et les entrées correspondantes du 24 septembre pour les autres versions.
CVE-2014-7169 - Bug de consommation de fichier / création de fichier trouvé par Tavis. Fixé par bash43-026 & co (26 septembre)
CVE-2014-7186 - un crash probablement sans risque d'au moins 10+ ici-doc trouvé par Florian et Todd. Fixé par bash43-028 & co (1er octobre).
CVE-2014-7187 - une off-by-one trouvée par Florian, qui ne s'est probablement pas effondrée. Fixé par bash43-028 & co (1er octobre).
CVE-2014-6277 - problème de mémoire non initialisée, presque certainement un RCE découvert par Michal Zalewski. Pas de patch spécifique pour le moment.
CVE-2014-6278 - RCE d'injection de commande trouvé par Michal Zalewski. Pas de patch spécifique pour le moment.
Cela devient assez déroutant. Heureusement, Chet Ramey, le responsable officiel de bash, a posté un fichier CVE pour appliquer les correctifs . Son article fait référence aux correctifs de bash 4.3, I (@OldPro) les a traduits en correctifs pour bash 3.2, ce qui est applicable à OS X. En outre, depuis qu'il publie le correctif 57, j'ai ajouté ce qui suit:
bash32-052 CVE-2014-6271 2014-09-24
bash32-053 CVE-2014-7169 2014-09-26
bash32-054 exported function namespace change 2014-09-27 ("Game Over")
bash32-055 CVE-2014-7186/CVE-2014-7187 2014-10-01
bash32-056 CVE-2014-6277 2014-10-02
bash32-057 CVE-2014-6278 2014-10-05
Voir le post de David A. Wheeler pour une chronologie et plus de détails.
@alblue a publié les instructions de construction via le correctif 55. J'ai ajouté les correctifs 56 et 57 aux instructions, mais je ne l'ai pas testé.
Test de la vulnérabilité d'origine
Vous pouvez déterminer si vous êtes vulnérable au problème d'origine dans CVE-2014-6271 en exécutant ce test:
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
La sortie ci-dessus est un exemple de bash
version non vulnérable . Si vous voyez le mot vulnerable
dans le résultat de cette commande, votre bash
est vulnérable et vous devez le mettre à jour. Vous trouverez ci-dessous une version vulnérable d'OS X 10.8.5:
Test de la nouvelle vulnérabilité
Une mise à jour de la publication d'origine a été mise à jour et Bash 3.2.52 (1) est toujours vulnérable à une variante de la vulnérabilité définie dans CVE-2014-7169.
$ rm -f echo
$ 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:50:18 BST
La sortie ci-dessus est un exemple de bash
version vulnérable . Si vous voyez une date dans la sortie de cette commande, votre bash
est vulnérable.
Désactivation des fonctions importées automatiquement pour empêcher le "Game Over"
Les chercheurs ont noté, sans le qualifier de vulnérabilité, qu'un script pourrait détourner une fonction d'un sous-shell à l'aide de fonctions importées automatiquement:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
Le code ci-dessus sur un système affecté s'afficherait à la Game Over
place de la liste de répertoires attendue ls
. De toute évidence, echo 'Game Over'
pourrait être remplacé par tout code néfaste que vous voulez. Cela est devenu connu comme le "Game Over" bug.
Avant la mise à jour du correctif 54, NetBSD et FreeBSD désactivaient par défaut les fonctions bash de l'importation automatique, en partie pour empêcher "Game Over", mais surtout pour éviter toute erreur dans l'analyseur (tel que CVE-2014-7169 ). continue à être découvert, et a ajouté un nouvel indicateur de ligne de commande--import-functions
pour réactiver l'ancien comportement par défaut. J'ai (@alblue) préparé un correctif (contre 3.2.53) que les autres utilisateurs pourraient utiliser s'ils souhaitaient également adopter ce comportement, et l'ai inclus ci-dessous. Par défaut, ce correctif n'est pas activé dans le script de construction ci-dessous. (@OldPro) pense que ce correctif n’est plus nécessaire ni une bonne idée, car il rompt la compatibilité ascendante et les vulnérabilités contre lesquelles il protège sont très bien corrigées par les correctifs du correctif 54 et des correctifs antérieurs, et permettre à ce correctif non officiel d’empêcher l’application de futurs correctifs .
(Note aux éditeurs de questions; ne l'activez pas par défaut, il s'agit d'un correctif non officiel.)
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
Le correctif peut être activé en l'exécutant export ADD_IMPORT_FUNCTIONS_PATCH=YES
avant d'exécuter la construction. Notez que l' activation de ce correctif désactivera le correctif 54 et tous les futurs correctifs car il est impossible de garantir la compatibilité des futurs correctifs avec le correctif non officiel.
Apple Patch a la vulnérabilité Game Over, en quelque sorte
Comme l'a souligné @ake_____ sur Twitter, le correctif officiel d'Apple est toujours vulnérable à la saturation de l'environnement des exécutables:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Les utilisateurs devraient décider eux-mêmes de l'importance Je (@OldPro) pense qu'il n'y a pas lieu de s'inquiéter car il n'existe aucun exploit connu pour ce comportement (il n'a même pas reçu d'identifiant CVE) car en général, les attaquants distants non privilégiés ne peuvent pas définir le nom d'une variable d'environnement et les attaquants dotés de privilèges ne peuvent pas. utilisez-le pour obtenir des privilèges qu’ils ne possèdent pas déjà (du moins pas sans exploiter une vulnérabilité supplémentaire).
Pour fournir un peu d’arrière-plan, bash vous permet de définir des fonctions et vous permet en outre d’ exporter ces fonctions dans des sous-shell via la export -f
commande. Auparavant, cela était implémenté en créant une variable d'environnement portant le même nom que la fonction et dont la valeur était définie sur la définition de la fonction. Alors
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Cela est dû à la export -f ls
création d'une variable d'environnement nommée ls
. La vulnérabilité "Game Over" était que vous pouviez créer directement cette variable d'environnement sans avoir à définir la fonction, ce qui signifiait que si vous pouviez injecter le nom de variable correct, vous pourriez détourner une commande. Apple a essayé de résoudre ce problème en rendant difficile la création d'une variable portant le bon nom. Le correctif bash 54 officiel rend en effet impossible de créer une variable avec le nom correct en utilisant des noms de variables incluant le %
caractère non autorisé dans un nom de variable, plaçant ainsi les définitions de fonctions exportées dans un espace de noms réservé différent.
Si rien de ce qui précède n'a de sens pour vous, ne vous en faites pas. Le patch Apple vous convient pour le moment.
Binaires du système
OS X 10.9.5 (la dernière version stable pour le moment) est fourni avec Bash v3.2.51:
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Vous pouvez obtenir et recompiler Bash comme suit , à condition que Xcode soit installé (et exécuté xcodebuild
au moins une fois auparavant pour accepter la licence):
$ # If you want to disable auto-imported functions, uncomment the following
$ # export ADD_IMPORT_FUNCTIONS_PATCH=YES
$ mkdir bash-fix
$ cd bash-fix
$ curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
$ cd bash-92/bash-3.2
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-052 | patch -p0
$ curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-053 | patch -p0
$ # See note above about ADD_IMPORT_FUNCTIONS_PATCH
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] && curl http://alblue.bandlem.com/import_functions.patch | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-054 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-055 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-056 | patch -p0
$ [ "$ADD_IMPORT_FUNCTIONS_PATCH" == "YES" ] || curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057 | patch -p0
$ cd ..
$ # Note: DO NOT ADD SUDO TO XCODEBUILD HERE
$ xcodebuild
$ build/Release/bash --version # GNU bash, version 3.2.57-release
$ build/Release/sh --version # GNU bash, version 3.2.57-release
$ sudo cp /bin/bash /bin/bash.old
$ sudo cp /bin/sh /bin/sh.old
$ sudo cp build/Release/bash /bin
$ sudo cp build/Release/sh /bin
(Remarque: vous pouvez exécuter ceci en copiant-collant le bloc de code ci-dessus, en allant dans Terminal puis en l'exécutant pbpaste | cut -c 2- | sh
. Faites toujours attention lorsque vous exécutez des scripts aléatoires à partir d'Internet, bien que ...)
Après cela, la version de Bash devrait être la v3.2.57:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Pour des raisons de sécurité et après les tests, je vous recommande d'utiliser chmod -x
les anciennes versions pour vous assurer qu'elles ne sont pas réutilisées ou de les déplacer vers un site de sauvegarde.
$ sudo chmod a-x /bin/bash.old /bin/sh.old
D'autres réponses ont des solutions pour ceux qui utilisent MacPorts ou Homebrew; ceux-ci ne résolvent pas le problème, ils installent simplement des versions supplémentaires de Bash. S'il vous plaît voir ces réponses si vous souhaitez mettre à niveau ceux spécifiquement.
Merci
Merci à Chet, qui s’occupe de Bash et qui a mis ces correctifs à disposition. Merci à tous ceux qui ont fait des commentaires à ce sujet et l’ont amélioré avec le temps.
Maintenant, Apple a publié le correctif réel, bien que cela puisse encore être utile. Comme ils ne publient qu'un correctif pour Lion et les versions ultérieures, et que le correctif officiel fournit GNU bash, version 3.2.53 (1) -release (x86_64-apple-darwin13), le bogue Game over est toujours quelque peu vulnérable. À ce stade, il est probablement plus sûr de reconstruire votre propre version de Bash par rapport à la version 3.2.57 que de vous fier au correctif d’Apple, à moins que vous ne le fassiez pas.