NOTE concernant la mise à jour officielle de Apple OS X bash 1.0 : Cette mise à jour logicielle porte uniquement la version officielle de Apple bash à 3.2.53. La révision du patch 3.2.54 offre le changement suivant :
Ce correctif change l'encodage utilisé par bash pour les fonctions exportées en fonctions exportées pour éviter les conflits avec les variables de l'interpréteur de variable d'environnement pour déterminer s'il faut ou non l'interpréter comme l'interpréter comme une fonction shell.
Pour les utilisateurs qui ont déjà corrigé le système avec les binaires 3.2.54, vous pouvez soit remplacer vos binaires compilés par le patch d'Apple, soit laisser les choses en l'état, mais c'est déconseillé. Bien qu'Apple ait laissé la version de ses binaires à 3.2.53, le patch d'Apple contient le correctif pour le test d'exploitation ci-dessous :
env X='() { (a)=>\' sh -c "echo date"; cat echo
Cela signifie que le binaire officiel 3.2.53 d'Apple contient une sécurité équivalente à celle du binaire vanille GNU 3.2.54. Un point de confusion regrettable, mais c'est ce que c'est. Le correctif d'Apple n'est pas à moitié conçu. Il semble qu'il s'agisse d'une correction complète du problème. En tant que tel, la feuille de route ci-dessous pour compiler vanilla bash
y sh
à partir des sources GNU devrait être considéré comme un artefact historique et éventuellement consulté comme un modèle pour la façon de faire des correctifs à l'avenir si cela s'avère nécessaire.
NOTE : Avec la source GNU vanille, sh
a des problèmes d'élévation de privilèges qui provoquent des échecs dans divers installateurs, par exemple Adobe Flash. Je recommande fortement de s'en tenir aux binaires corrigés par Apple. Considérez que ce système de correctif est déprécié et peu judicieux.
Il existe un nouveau correctif GNU bash 3.2.55 qui décrit la correction suivante :
Description du bogue :
Il y a deux débordements de tampon locaux dans parse.y qui peuvent amener l'interpréteur de commandes l'interpréteur de commande à vider le noyau lorsqu'il reçoit de nombreux documents ici attachés à une seule commande ou à de nombreuses boucles imbriquées. ou de nombreuses boucles imbriquées.
Nous laissons au lecteur le soin de déterminer s'il doit se contenter des binaires officiels corrigés par Apple ou créer les siens pour faire face aux nouveaux exploits possibles. Personnellement, Je vais m'en tenir aux binaires d'Apple.
Ce post détaille la façon de compiler et d'installer une version de vanilla bash
y sh
sur OS X. J'ai choisi cette voie car suivre les exemples détaillant l'utilisation des sources spécifiques à Apple ne m'a pas permis d'obtenir la révision correcte du patch. YMMV. Cette installation vanille est, cependant, destinée à remplacer les binaires OS X de telle sorte que lorsque Apple publiera finalement une mise à jour de sécurité, ces remplacements vanille seront usurpés par leurs équivalents Apple appropriés.
Ma configuration de base est la suivante :
OS X Lion 10.7.5 et Xcode 4.6.3 avec tous les utilitaires de ligne de commande installés.
Les mesures que j'ai prises pour résoudre ce problème étaient les suivantes :
Téléchargez le code source de la base bash pour 3.2.48 depuis :
https://ftp.gnu.org/gnu/bash/bash-3.2.48.tar.gz
Téléchargez les correctifs bash3.2.49, .50, .51, .52, .53, .54 et .55 à partir de :
https://ftp.gnu.org/gnu/bash/bash-3.2-patches/
Je les ai sauvegardés sous le nom de $filename.patch, par exemple, bash3.2.50.patch.
dans votre répertoire de téléchargement et
Décompresser la branche source principale :
tar xzvf bash-3.2.48.tar.gz
cd bash-3.2.48
En supposant que vous avez renommé vos fichiers patch téléchargés comme décrit précédemment,
cp ../*.patch .
Alors
for file in *.patch ; do
patch -p0 < $file
done
Cela devrait montrer les correctifs réussis de divers fichiers. Si ce n'est pas le cas, préparez-vous à faire un peu d'exploration et de recherche.
Suivant :
sudo cp /bin/bash /bin/bash_old
sudo cp /bin/sh /bin/sh_old
sudo chmod -x /bin/bash_old
sudo chmod -x /bin/sh_old
Cela revient à sauvegarder vos anciens shells bash et sh vulnérables et à supprimer leur privilège d'exécution. Cela vous donne la possibilité de restaurer les commandes si nécessaire, mais supprime leur capacité à faire des dégâts entre-temps.
Suivant :
./configure --prefix=/ ; make ; sudo make install
Ceci devrait correctement configurer, compiler et installer le nouveau binaire bash dans /bin. Une fois que c'est fait, quittez le Terminal et ouvrez-le à nouveau.
Vous devriez, toutes choses heureuses et souriantes, être capable de bash --version
et voir maintenant 3.2.55, par exemple :
Gaia:Downloads trane$ bash --version
GNU bash, version 3.2.55(1)-release (i386-apple-darwin11.4.2)
Copyright (C) 2007 Free Software Foundation, Inc.
Le résultat exact de la commande ci-dessus sera différent selon votre version d'OS X.
Vous devriez également être capable de tester votre vulnérabilité contre bash
et constater que tout va bien.
REMARQUE : Nous n'avons corrigé que bash jusqu'à présent, mais le fichier /bin/sh
L'exécutable est toujours dans son état vulnérable. En copiant simplement bash
au sommet de sh
est un style Linux de faire les choses. Celui d'OS X sh
présente quelques différences par rapport à l'implémentation bash
Cependant, vous devrez à nouveau faire appel au compilateur. De plus amples informations sur la façon dont bash
y sh
différent dans OS X peut être trouvé ici :
https://apple.stackexchange.com/a/89327/91441
Dans votre répertoire de téléchargement, faites :
make clean
Dans votre éditeur préféré, ouvrez le fichier Makefile.in
et faites défiler jusqu'à la ligne 99. Nous allons changer la ligne du programme pour que le binaire que nous sortons soit sh
au lieu de bash
comme ça :
Program = sh$(EXEEXT)
Sauvegardez-le et ensuite
./configure --prefix=/ --enable-xpg-echo-default --enable-strict-posix-default
make ; sudo make install
Maintenant, vous aurez construit sh
presque exactement comme Apple le ferait.
Une dernière remarque : sur certains (tous ?) systèmes, Apple semble généralement placer l'adresse de l'utilisateur dans le dossier de l'utilisateur. bashbug
exécutable dans /usr/bin
. Notre compilation l'aura mis dans /bin
. Donc, les dernières étapes ici :
sudo mv /usr/bin/bashbug /usr/bin/bashbug_old
sudo chmod -x /usr/bin/bashbug_old
sudo mv /bin/bashbug /usr/bin/bashbug
5 votes
Apple a publié un correctif : support.apple.com/kb/DL1769
1 votes
Le correctif OS X bash Update 1.0 mentionné ci-dessus est spécifique à OS X 10.9.5 ou plus - Voici tous les correctifs : OS X 10.7.5 (Lion), OS X 10.8.5 (Mountain Lion), OS X 10.9.5 ( Mavericks ).
0 votes
Oui, j'avais ajouté les liens il y a 9 heures mais ils ont été supprimés par erreur. apple.stackexchange.com/revisions/146849/10
0 votes
A créé un gist gist.github.com/dnozay/395dcdef05c6b4b1836a qui contient la plupart des étapes et inclut déjà les correctifs (et devrait fonctionner sous OSX 10.6).
0 votes
@dnozay Merci pour votre gist ! Veuillez le mettre à jour pour inclure les correctifs 55 et 56 (déjà sortis) et 57 (à venir).
0 votes
@OldPro, envoyez-moi un ping quand le 57 sera sorti et je le mettrai à jour.
0 votes
@dnozay Le patch 57 est sorti ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-057