¿Cómo parcho la vulnerabilidad shellshock en un sistema Ubuntu obsoleto que no puedo actualizar?

22

Tengo un sistema que administro de forma remota (a 2 zonas horarias de distancia) que ejecuta Ubuntu 9.04, Jaunty. Por varias razones, principalmente porque estoy muy receloso de intentar hacer una actualización de distribución desde tan lejos, no puedo actualizarla a una versión más reciente. Obviamente ya no es compatible y no hay parches oficiales. ¿Hay instrucciones disponibles sobre cómo puedo parchear el código y recompilar bash para eliminar las vulnerabilidades de shellshock?

Claus
fuente
55
¿Qué investigaciones has hecho sobre este tema? La solución más simple probablemente sería reconstruirlo y parcharlo usted mismo. Puede que tenga que aceptar esto, es simplemente el momento de actualizar el servidor.
Ramhound
Sí, esa es mi opción alternativa. El servidor está saliendo, solo estoy tratando de mantenerlo cojeando hasta que lleguen los fondos para su reemplazo. Si estuviera en el sitio, mordería la bala y realizaría la actualización, pero muy rara vez tengo eso sin problemas, y sin poder ponerlo en práctica, prefiero no arriesgarme si no tengo a.
Claus
Solo obtengo algunas palabras clave en la página para que las personas puedan encontrar esto. También funcionó para mí en Mac, OS X, Mavericks basado en la prueba publicada en arstechnica.com/security/2014/09/…
1
déjelo sin parchar, "cojeando" cambiará rápidamente. Sea muy claro, está utilizando una distribución que salió hace cinco años . El soporte finalizó en octubre de 2010. Tiene muchas más vulnerabilidades de las que preocuparse.
tedder42

Respuestas:

29

Robó esto de AskUbuntu , de alguien que lo robó de Hacker News. Trabajé en dos servidores viejos para mí

mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 28); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 28);do patch -p0 < ../bash43-$i; done
#build and install
./configure --prefix=/ && make && make install
cd .. 
cd ..
rm -r src

Actualización: Acabo de notar que si no agrega --prefix=/al comando de configuración, terminará con /usr/local/bin/basheso actualizado y /bin/bashaún será vulnerable.

unkilbeeg
fuente
Hay un error en el script: la secuencia "0 25" debe ser "1 26". Si está leyendo esto y puede editar la respuesta, actualícela. ¡Gracias!
joelparkerhenderson
Si ./configure --prefix=/ && makebien funciona bien, make installparece requerirlosudo
Stewart
Gracias por publicar esto: una forma justa de arreglar las cosas mientras se migra. Algunas personas tienen muchos vms y no es realista reconstruir cada uno. Usar esto como una solución inmediata mientras se resuelve a más largo plazo mediante una instalación más actualizada es clave.
Jas Panesar
@ rubo77 Ahora debe ser 1 27 (el nuevo parche 27 es el más importante)
joelparkerhenderson
1
Añadido parche 28. Esto no parece solucionar la vulnerabilidad CVE-2014-7186 / 7187.
unkilbeeg
2

También hay una solución para actualizar su sources.list a la más nueva y luego usar apt-get para actualizar solo bash. Es realmente rápido y he escrito un artículo al respecto. Esto es lo que básicamente haces:

Actualice a los últimos repositorios apt-get de Ubuntu 'de confianza' (es posible que también deba cambiar las URL de old-repositories.ubuntu.com si las usa, consulte el artículo vinculado):

sudo sed -i 's/YOUR_OS_CODENAME/trusty/g' /etc/apt/sources.list

Actualizar bash / aplicar corrección:

sudo apt-get update
sudo apt-get install --only-upgrade bash

Y posiblemente cambie de nuevo los repositorios de apt-get.

Erik Duindam
fuente
Funcionó perfectamente!
Peter Kruithof
-1

El comando debe ser

sudo apt-get update && sudo apt-get install --only-upgrade bash
ColdenZero
fuente
2
Esto no ayudará; como dijo el OP, ya no es compatible, por lo que no habrá una actualización para bash.
Andrew Ferrier
-3

Una opción simple es simplemente no usar bash. Asegúrese de que dashesté instalado y que /bin/shsea ​​un enlace simbólico a dash, no bash. (Este es el valor predeterminado en algunas versiones de Debian, pero no estoy seguro acerca de Ubuntu). Si tiene cuentas de usuario para acceso ssh con comandos forzados, también debe cambiar sus shells de inicio de sesión. Es posible que también deba verificar cualquier script explícitamente usando bash; grepping para #!/bin/bashencontrarlos.

R ..
fuente
55
Eso es un poco como decir, "descubrimos que puedes tener segfaults en C ++, solo usa Java en su lugar" ...
DevSolar
3
Una analogía más cercana sería decirle a alguien que experimenta un error en el CCG que intente hacer ruido. Ambos implementan el mismo lenguaje (con conjuntos diferentes pero a veces superpuestos de extensiones no estándar) y es poco probable que la necesidad real sea "bash", sino más bien "intérprete de shell".
R ..
Como dijiste, hay scripts que podrían usar explícitamente bash. Incluso si busca los archivos existentes que usan bash, en el futuro alguien podría agregar un nuevo script al sistema que use bash explícitamente. Lo mismo ocurre con los sistemas integrados que usan busybox (/ bin / sh apunta a busybox), pero también tienen instalado bash. Lo mejor es actualizar bash en los sistemas vulnerables.
jcarballo
La mayoría de los scripts de Unix / Linux requieren bash o algún otro shell moderno como ksh o zsh. Estas tienen una gran cantidad de funcionalidades que las personas esperan en cualquier idioma, pero no están presentes en los caparazones "básicos" como (BusyBox) ash / Dash / sh (original). Estos proyectiles más simples tienen solo un 20-30% de la funcionalidad de los proyectiles más grandes, lo que los hace más rápidos. Sin embargo, requieren el uso extensivo de utilidades externas para muchas operaciones comunes como el manejo avanzado de cadenas y la coincidencia de patrones. Bash y tal pueden correr cenizas, et.al. guiones. Pero no al revés.
DocSalvager