Debido a CVE-2014-6271 y CVE-2014-7169 en OS X me preguntaba: ¿se puede sustituir bash por completo por otro shell no afectado (por ejemplo, dash u otros)?
Respuestas
¿Demasiados anuncios?En primer lugar, no necesita hacer esto a menos que esté ofreciendo servicios web a la Internet pública desde su Mac. Si no es así, espere hasta que haya una actualización de seguridad oficial de Apple.
Sin embargo, si ofrece servicios web, es posible que quiera actualizarse.
Parche oficial
Apple ha lanzado un Actualización oficial de seguridad de Bash aquí
Comprobar si eres vulnerable
En primer lugar, confirme que está utilizando un bash obsoleto:
$ which bash
/bin/bash
$ /bin/bash --version
GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
El bash más actual es el 4.3.25
Si no tiene instalado Xcode, necesitará las herramientas de línea de comandos de Xcode, que pueden instalarse mediante
$ xcode-select --install
O de la portal para desarrolladores .
Para instalar Brew ( http://brew.sh ):
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Entonces hazlo:
$ brew doctor
Siga las instrucciones si hay problemas. Muchos problemas comunes se abordan aquí .
A continuación, actualice Brew con la última lista de paquetes:
$ brew update
Para obtener la última versión de bash 4.3.25:
$ brew install bash
Esto instala bash en /usr/local/Cellar/bash/4.3.25/bin/bash
El viejo bash
y sh
todavía existe en /bin
Así, después de la instalación, se cambiará el nombre de los antiguos ejecutables a un nuevo archivo.
$ sudo mv /bin/bash /bin/bash_old
$ sudo mv /bin/sh /bin/sh_old
Si eres muy paranoico, puedes eliminar los permisos de ejecución en el bash_old
$ sudo chmod a-x /bin/bash_old /bin/sh_old
A continuación, crear un enlace simbólico a la nueva bash 4.3.25 que brew instalado.
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/bash
$ sudo ln -s /usr/local/Cellar/bash/4.3.25/bin/bash /bin/sh
Reinicia y está completo.
Una advertencia - esto puede romper algunos shell scripts existentes que podrían depender de bash 3.2 o las diferencias que el Mac sh
tiene sobre el linux sh
. Hay una respuesta mucho más sofisticada para reemplazar bash y sh desde las fuentes en este puesto.
En la mayoría de los casos es mejor esperar a las actualizaciones oficiales.
Como dijo @webmarc, no. Puedes reemplazar /bin/bash
con algún otro shell pero seguramente romperás algunos programas porque bash tiene varias diferencias en su sintaxis que lo hacen incompatible. No pude encontrar un shell alternativo compatible con bash. Sin embargo, he enlazado simbólicamente dash con /bin/sh
y no he encontrado ningún problema hasta ahora.
En cuanto al DHCP aquí hay un ataque de prueba de concepto. El artículo trata de dhcpcd
(un cliente de Linux). No estoy seguro sobre Mac OS X. En el debate en Hacker News dicen que el cliente de OS X no usa bash en absoluto.
Otro vector podría ser sshd
. Pero el ataque requiere autenticación. Así que, a menos que esté ejecutando algún servicio ssh como un git
servidor debería estar a salvo.
dash
contiene sólo un pequeño subconjunto de los comandos que se encuentran en bash
e incluso sh
(que a su vez es un subconjunto de cosas en bash
). Sustituyendo cualquiera de los dos por dash
seguramente producirá scripts en su sistema y posiblemente romperá su sistema más de lo que lo protege.
Puedes recompilar bash para mitigar parte (en el momento en que se escribió esto) del peligro potencial o esperar a que Apple publique una solución oficial.
algunos sitios indican que se puede infectar a través de un cliente DHCP.
Este no se aplican a OS X. En los sistemas Linux, se suele llamar a un shell script después de recibir un contrato de arrendamiento DHCP del servidor. Este no es el caso en OS X.
A menos que esté ejecutando un servidor web en su Mac que sirva scripts, tiene pocas razones para preocuparse.