Estado
Apple ha lanzado correcciones de seguridad de Bash para Shellshock y vulnerabilidades relacionadas como " OS X bash Update 1.0 ". Se pueden instalar mediante la actualización normal del sistema para las personas que usan OS X Mountain Lion v10.8.5 o OS X Mavericks v10.9.5 (se incluyen en la Actualización de seguridad 2014-005 ) y también se pueden instalar manualmente. Las correcciones oficiales de Apple también están disponibles para OS X Lion v10.7.5 y OS X Lion Server v10.7.5, pero solo están disponibles mediante descarga manual. Las correcciones de seguridad están disponibles a través de diferentes URL según la versión del sistema operativo:
(Si se lanzan nuevos parches, colóquelos aquí, pero conserve estos existentes también como referencia).
El parche de Apple se ocupa de Shellshock y varias otras vulnerabilidades y está bien para la mayoría de las personas. tl; dr la gente puede dejar de leer aquí.
SIN EMBARGO, la atención atraída por bash por el error Shellshock ha provocado que muchos investigadores analicen detenidamente bash y sigan encontrando más y más vulnerabilidades (difíciles de explotar). Si está muy preocupado por la seguridad (porque tal vez está ejecutando OS X Server para alojar un sitio web disponible públicamente), entonces puede (intentar) mantenerse al día con las vulnerabilidades y los parches a medida que continúan compilando bash usted mismo. De lo contrario, no te preocupes por eso.
Busque que Apple lance otra actualización para atacar en algún momento en el futuro cuando el polvo se decida a encontrar más vulnerabilidades.
Hay disponible un conjunto oficial de parches de bash para bash 3.2, parches 52, 53 y 54 (que corresponden a los parches Bash 4.3 25, 26 y 27) que reparan tanto CVE-2014-6271 como CVE-2014-7169, así como el "Juego terminado" que se muestra a continuación. Esto lo probé yo ( @alblue ) y la publicación se actualizó en consecuencia (y luego se realizaron actualizaciones adicionales: consulte la revisión 41 para ver la publicación que se detiene en el parche 54).
Se han informado muchas vulnerabilidades adicionales contra bash. Según la publicación de Michal Zalewski, si tiene el parche 54 (y presumiblemente el parche oficial de Apple) "no tiene sentido obsesionarse sobre el estado de estos errores individuales, porque ya no deberían representar un riesgo de seguridad:"
CVE-2014-6271 - RCE original encontrado por Stephane. Solucionado por bash43-025 y las entradas correspondientes del 24 de septiembre para otras versiones.
CVE-2014-7169: error de creación de archivos / consumo de tokens encontrado por Tavis. Solucionado por bash43-026 & co (26 de septiembre)
CVE-2014-7186: probablemente un accidente de más de 10 seg. Aquí-doc encontrado por Florian y Todd. Solucionado por bash43-028 & co (1 de octubre).
CVE-2014-7187 - un no-choque, probablemente sin riesgo, encontrado por Florian. Solucionado por bash43-028 & co (1 de octubre).
CVE-2014-6277: problema de memoria no inicializada, casi con certeza RCE encontrado por Michal Zalewski. No hay parche específico todavía.
CVE-2014-6278 - comando de inyección RCE encontrado por Michal Zalewski. No hay parche específico todavía.
Se vuelve bastante confuso. Afortunadamente, Chet Ramey, el responsable oficial de bash, publicó un CVE para mapear parches . Su publicación se refiere a parches para bash 4.3, yo (@OldPro) los he traducido a parches para bash 3.2, que es lo que es aplicable a OS X. Además, desde esta publicación ha lanzado el parche 57, así que agregué eso a continuación:
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
Vea la publicación de David A. Wheeler para una línea de tiempo y más detalles.
@alblue publicó instrucciones de compilación a través del parche 55. Yo (@OldPro) agregué los parches 56 y 57 a las instrucciones, pero no lo he probado.
Prueba de la vulnerabilidad original
Puede determinar si es vulnerable al problema original en CVE-2014-6271 ejecutando esta prueba:
$ env x='() { :;}; echo vulnerable' bash -c 'echo hello'
bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
hello
El resultado anterior es un ejemplo de una bash
versión no vulnerable . Si ve la palabra vulnerable
en la salida de ese comando, bash
es vulnerable y debe actualizar. A continuación se muestra una versión vulnerable de OS X 10.8.5:
Prueba de la nueva vulnerabilidad
Ha habido una actualización de la publicación original y Bash 3.2.52 (1) sigue siendo vulnerable a una variación de la vulnerabilidad, definida en 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
El resultado anterior es un ejemplo de una bash
versión vulnerable . Si ve una fecha en la salida de ese comando, bash
es vulnerable.
Desactivar las funciones de importación automática para evitar "Game Over"
Los investigadores notaron, sin clasificarlo como una vulnerabilidad, que un script podría secuestrar una función en una subshell usando funciones de importación automática:
$ env ls="() { echo 'Game Over'; }" bash -c ls
Game over
El código anterior en un sistema afectado se mostraría en Game Over
lugar de la lista de directorios que esperaría ls
. Obviamente, echo 'Game Over'
podría ser reemplazado por cualquier código nefasto que desee. Esto se conoció como el error "Game Over".
Antes de la disponibilidad del parche 54, tanto NetBSD como FreeBSD desactivaron las funciones bash de importación automática de forma predeterminada, en parte para evitar "Game Over" pero principalmente para contener cualquier error adicional en el analizador (como CVE-2014-7169 ) como estaban continúa siendo descubierto, y agregó una nueva bandera de línea de comando--import-functions
para volver a habilitar el antiguo comportamiento predeterminado. Yo (@alblue) he preparado un parche (contra 3.2.53) para que otros lo usen si también quieren adoptar este comportamiento y lo he incluido a continuación. Por defecto, este parche no está habilitado en el script de compilación a continuación. Yo (@OldPro) creo que este parche ya no es necesario o una buena idea, porque rompe la compatibilidad con versiones anteriores y las vulnerabilidades que protege están muy bien abordadas por el parche 54 y parches anteriores, y habilitar este parche no oficial evita que se apliquen parches futuros .
(Nota para los editores de preguntas; no habilite esto de manera predeterminada, ya que es un parche no oficial).
a0c5c4d66742fddd0a35001cb91798a5fbf8a2f5 import_functions.patch
El parche se puede habilitar ejecutando export ADD_IMPORT_FUNCTIONS_PATCH=YES
antes de ejecutar la compilación. Tenga en cuenta que habilitar este parche deshabilitará el parche 54 y cualquier parche futuro porque no se puede garantizar que los parches futuros sean compatibles con el parche no oficial.
Apple Patch tiene vulnerabilidad Game Over, más o menos
Como lo señaló @ake_____ en Twitter, el parche oficial de Apple todavía es vulnerable al bloqueo ambiental de ejecutables:
$ env '__BASH_FUNC<ls>()'="() { echo Game Over; }" bash -c ls
Game Over
Los usuarios deben decidir por sí mismos lo importante que es esto. Yo (@OldPro) creo que no hay nada de qué preocuparse porque no hay un exploit conocido para este comportamiento (ni siquiera se le dio un identificador CVE) porque en general los atacantes remotos no privilegiados no pueden establecer el nombre de una variable de entorno y los atacantes con privilegios no pueden use esto para obtener privilegios que aún no tiene (al menos no sin explotar una vulnerabilidad adicional).
Para proporcionar un poco de información de fondo, bash le permite definir funciones, y además le permite exportar esas funciones a subcapas a través del export -f
comando. Esto solía implementarse creando una variable de entorno con el mismo nombre que la función con su valor establecido en la definición de la función. Entonces
$ ls () { echo 'Game Over'; }
$ export -f ls
$ echo $ls
Game Over
Esto sucedió porque export -f ls
creó una variable de entorno llamada ls
. La vulnerabilidad "Game Over" era que podía crear directamente esta variable de entorno sin tener que definir primero la función, lo que significaba que si podía inyectar el nombre correcto de la variable podría secuestrar un comando. Apple intentó solucionar esto dificultando la creación de una variable con el nombre correcto. El parche oficial de bash 54 en realidad hace que sea imposible crear una variable con el nombre correcto mediante el uso de nombres de variables que incluyen %
un carácter no permitido en un nombre de variable, colocando efectivamente las definiciones de funciones exportadas en un espacio de nombres reservado diferente.
Si nada de lo anterior tiene sentido para usted, no se preocupe por eso. Estás bien con el parche de Apple por ahora.
Binarios del sistema
OS X 10.9.5 (la última versión estable en este momento) viene con 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.
Puede obtener y recompilar Bash de la siguiente manera , siempre que tenga instalado Xcode (y lo haya ejecutado xcodebuild
al menos una vez antes para aceptar la licencia):
$ # 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
(Nota: puede ejecutar esto copiando y pegando el bloque de código anterior, yendo a la Terminal y luego ejecutándolo pbpaste | cut -c 2- | sh
. Siempre tenga cuidado cuando ejecute scripts aleatorios desde Internet ...)
Después de esto, la versión de Bash debería ser v3.2.57:
$ bash --version
GNU bash, version 3.2.57-release (x86_64-apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
Por seguridad, y después de las pruebas, le recomiendo que chmod -x
use las versiones anteriores para asegurarse de que no se vuelvan a usar o que las traslade a un sitio de respaldo.
$ sudo chmod a-x /bin/bash.old /bin/sh.old
Otras respuestas tienen soluciones para quienes usan MacPorts o Homebrew; estos no solucionan el problema, solo instalan versiones adicionales de Bash. Consulte esas respuestas si desea actualizarlas específicamente.
Gracias
Gracias a Chet, que se ocupa de bash, y ha estado haciendo disponibles estos parches. Gracias a todos los que han comentado sobre esto y lo han mejorado con el tiempo.
Ahora Apple ha lanzado la solución real, aunque esto podría ser útil. Debido a que solo lanzaron una solución para Lion y superiores, y el parche oficial proporciona GNU bash, versión 3.2.53 (1) -release (x86_64-apple-darwin13), sin embargo, el error de Game over todavía es algo vulnerable. En este punto, reconstruir su propia versión de Bash contra 3.2.57 es probablemente más seguro que confiar en el parche de Apple, a menos que lo haga mal.