Responda a mi pregunta, de Qualys :
Durante nuestras pruebas, desarrollamos una prueba de concepto en la que enviamos un correo electrónico especialmente creado a un servidor de correo y podemos obtener un shell remoto para la máquina Linux. Esto evita todas las protecciones existentes (como ASLR, PIE y NX) en los sistemas de 32 bits y de 64 bits.
Mi investigación compilada a continuación para cualquier otra persona que busque:
Descargo de responsabilidad
A pesar de lo que muchos otros hilos / blogs pueden decirle, le sugiero que no actualice inmediatamente cada sistema operativo que tenga a ciegas sin probar exhaustivamente estas glibc
actualizaciones. Se ha informado de que las actualizaciones de glibc han provocado grandes fallas en las aplicaciones que han obligado a las personas a revertir sus actualizaciones de glibc a su versión anterior.
Uno no simplemente actualiza en masa un entorno de producción sin probarlo.
Información de contexto
GHOST es un error de 'desbordamiento de búfer' que afecta a las llamadas de función gethostbyname () y gethostbyname2 () en la biblioteca glibc. Esta vulnerabilidad permite que un atacante remoto pueda realizar una llamada a la aplicación a cualquiera de estas funciones para ejecutar código arbitrario con los permisos del usuario que ejecuta la aplicación.
Impacto
Las llamadas de función gethostbyname () se utilizan para la resolución de DNS, que es un evento muy común. Para aprovechar esta vulnerabilidad, un atacante debe desencadenar un desbordamiento del búfer al proporcionar un argumento de nombre de host no válido a una aplicación que realiza una resolución de DNS.
Lista actual de distribuciones de Linux afectadas
RHEL (Red Hat Enterprise Linux) versión 5.x, 6.xy 7.x
RHEL 4 ELS fix available ---> glibc-2.3.4-2.57.el4.2
Desktop (v. 5) fix available ---> glibc-2.5-123.el5_11.1
Desktop (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Desktop (v. 7) fix available ---> glibc-2.17-55.el7_0.5
HPC Node (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
HPC Node (v. 7) fix available ---> glibc-2.17-55.el7_0.5
Server (v. 5) fix available ---> glibc-2.5-123.el5_11.1
Server (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Server (v. 7) fix available ---> glibc-2.17-55.el7_0.5
Server EUS (v. 6.6.z) fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 6) fix available ---> glibc-2.12-1.149.el6_6.5
Workstation (v. 7) fix available ---> glibc-2.17-55.el7_0.5
CentOS Linux versión 5.x, 6.xy 7.x
CentOS-5 fix available ---> glibc-2.5-123.el5_11
CentOS-6 fix available ---> glibc-2.12-1.149.el6_6.5
CentOS-7 fix available ---> glibc-2.17-55.el7_0.5
Ubuntu Linux versión 10.04, 12.04 LTS
10.04 LTS fix available ---> libc6-2.11.1-0ubuntu7.20
12.04 LTS fix available ---> libc6-2.15-0ubuntu10.10
Debian Linux versión 6.x, 7.x
6.x squeeze vulnerable
6.x squeeze (LTS) fix available ---> eglibc-2.11.3-4+deb6u4
7.x wheezy vulnerable
7.x wheezy (security) fix available ---> glib-2.13-38+deb7u7
Linux Mint versión 13.0
Mint 13 fix available ---> libc6-2.15-0ubuntu10.10
Fedora Linux versión 19 (o anterior debería actualizarse)
Fedora 19 - vulnerable - EOL on Jan 6, 2014 (upgrade to Fedora 20/21 for patch)
SUSE Linux Enterprise
Server 10 SP4 LTSS for x86 fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for AMD64 and Intel EM64T fix available ---> glibc-2.4-31.113.3
Server 10 SP4 LTSS for IBM zSeries 64bit fix available ---> glibc-2.4-31.113.3
Software Development Kit 11 SP3 fix available ---> glibc-2.11.3-17.74.13
Server 11 SP1 LTSS fix available ---> glibc-2.11.1-0.60.1
Server 11 SP2 LTSS fix available ---> glibc-2.11.3-17.45.55.5
Server 11 SP3 (VMware) fix available ---> glibc-2.11.3-17.74.13
Server 11 SP3 fix available ---> glibc-2.11.3-17.74.13
Desktop 11 SP3 fix available ---> glibc-2.11.3-17.74.13
openSUSE (las versiones anteriores a la 11 deberían actualizarse)
11.4 Evergreen fix available ---> glibc-2.11.3-12.66.1
12.3 fix available ---> glibc-2.17-4.17.1
¿Qué paquetes / aplicaciones siguen usando glibc eliminado?
( créditos a Gilles )
Para CentOS / RHEL / Fedora / Scientific Linux:
lsof -o / | awk '
BEGIN {
while (("rpm -ql glibc | grep \\\\.so\\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $1, $2}'
Para Ubuntu / Debian Linux:
lsof -o / | awk '
BEGIN {
while (("dpkg -L libc6:amd64 | grep \\\\.so\\$" | getline) > 0)
libs[$0] = 1
}
$4 == "DEL" && $8 in libs {print $1, $2}'
¿Qué versión de la biblioteca C (glibc) usa mi sistema Linux?
La forma más fácil de verificar el número de versión es ejecutar el siguiente comando:
ldd --version
Resultados de muestra de RHEL / CentOS Linux v6.6:
ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Resultados de muestra de Ubuntu Linux 12.04.5 LTS:
ldd (Ubuntu EGLIBC 2.15-0ubuntu10.9) 2.15
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Resultados de muestra de Debian Linux v7.8:
ldd (Debian EGLIBC 2.13-38+deb7u6) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Comprobación de vulnerabilidad de GHOST
La Universidad de Chicago aloja el siguiente script para una fácil descarga:
$ wget https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
[OR]
$ curl -O https://webshare.uchicago.edu/orgs/ITServices/itsec/Downloads/GHOST.c
$ gcc GHOST.c -o GHOST
$ ./GHOST
[responds vulnerable OR not vulnerable ]
/* ghosttest.c: GHOST vulnerability tester */
/* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define CANARY "in_the_coal_mine"
struct {
char buffer[1024];
char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };
int main(void) {
struct hostent resbuf;
struct hostent *result;
int herrno;
int retval;
/*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
char name[sizeof(temp.buffer)];
memset(name, '0', len);
name[len] = '\0';
retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);
if (strcmp(temp.canary, CANARY) != 0) {
puts("vulnerable");
exit(EXIT_SUCCESS);
}
if (retval == ERANGE) {
puts("not vulnerable");
exit(EXIT_SUCCESS);
}
puts("should not happen");
exit(EXIT_FAILURE);
}
Compile y ejecútelo de la siguiente manera:
$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]
Red Hat Access Lab: herramienta GHOST No utilice esta herramienta, sus informes son incorrectos, el verificador de vulnerabilidad de Qualys es exacto.
Parchear
CentOS / RHEL / Fedora / Scientific Linux
sudo yum clean all
sudo yum update
Ahora reinicie para tener efecto:
sudo reboot
Alternativamente, si su espejo no contiene los paquetes más nuevos, simplemente descárguelos manualmente. * nota: para usuarios más avanzados
CentOS 5
http://mirror.centos.org/centos/5.11/updates/x86_64/RPMS/
CentOS 6
mkdir ~/ghostupdate
cd ~/ghostupdate
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-common-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/nscd-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-headers-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-utils-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.x86_64.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-static-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-devel-2.12-1.149.el6_6.5.i686.rpm
wget http://mirror.centos.org/centos/6.6/updates/x86_64/Packages/glibc-2.12-1.149.el6_6.5.i686.rpm
yum localupdate *.rpm [OR] rpm -Uvh *.rpm
Ubuntu / Debian Linux
sudo apt-get clean
sudo apt-get update
sudo apt-get dist-upgrade
Reiniciar:
sudo reboot
SUSE Linux Enterprise
Para instalar esta actualización de seguridad de SUSE, use YaST online_update. O use los siguientes comandos según su versión:
Kit de desarrollo de software SUSE Linux Enterprise 11 SP3
zypper in -t patch sdksp3-glibc-10206
SUSE Linux Enterprise Server 11 SP3 para VMware
zypper in -t patch slessp3-glibc-10206
SUSE Linux Enterprise Server 11 SP3
zypper in -t patch slessp3-glibc-10206
SUSE Linux Enterprise Server 11 SP2 LTSS
zypper in -t patch slessp2-glibc-10204
SUSE Linux Enterprise Server 11 SP1 LTSS
zypper in -t patch slessp1-glibc-10202
SUSE Linux Enterprise Desktop 11 SP3
zypper in -t patch sledsp3-glibc-10206
Finalmente, ejecute todas las versiones de SUSE Linux para actualizar su sistema:
zypper patch
OpenSUSE Linux
Para ver una lista de actualizaciones disponibles, incluido glibc en un OpenSUSE Linux, ingrese:
zypper lu
Para actualizar simplemente los paquetes glibc instalados con sus nuevas versiones disponibles, ejecute:
zypper up
Casi todos los programas que se ejecutan en su máquina usan glibc. Debe reiniciar todos los servicios o aplicaciones que usan glibc para garantizar que el parche surta efecto. Por lo tanto, se recomienda reiniciar.
¿Cómo reiniciar init sin reiniciar o afectar el sistema?
telinit u
'man telinit': U o u para solicitar que el demonio init (8) se vuelva a ejecutar. Esto no se recomienda ya que Upstart actualmente no puede conservar su estado, pero es necesario al actualizar las bibliotecas del sistema.
Para mitigar de inmediato la amenaza de manera limitada es deshabilitar las verificaciones DNS inversas en todos sus servicios públicos. Por ejemplo, puede deshabilitar las comprobaciones de DNS inversas en SSH por el ajuste UseDNS
a no
en su /etc/ssh/sshd_config
.
Fuentes (y más información):
- https://access.redhat.com/articles/1332213
- http://www.cyberciti.biz/faq/cve-2015-0235-patch-ghost-on-debian-ubuntu-fedora-centos-rhel-linux/
- http://www.openwall.com/lists/oss-security/2015/01/27/9
- /security/80210/ghost-bug-is-there-a-simple-way-to-test-if-my-system-is-secure
- http://bobcares.com/blog/ghost-hunting-resolving-glibc-remote-code-execution-vulnerability-cve-2015-0235-in-centos-red-hat-ubuntu-debian-and-suse-linux- servidores
- https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
- https://security-tracker.debian.org/tracker/CVE-2015-0235