URGENTE. Parche a servidores Linux Vulnerabilidad de Glibc GHOST #CVE-2015-0235 Debian y Cent OS

4 Feb

Cuando se descubre una vulnerabilidad en Linux, de inmediato se convierte en una gran noticia, internet estalla misteriosamente ¿Porqué? esto casi nunca ocurre, de diez alarmas que se pasan de voz en voz, una es posibilidad y estoy exagerando.

Lo maravilloso de esto es que cuando esto ocurre, la comunidad tarda aproximadamente 48 horas en sacar un parche y fin, problema resuelto. Por eso en Linux practicamente no existen los virus o el malware en general.

Esta vez es una de esas alarmas serias pero no hay de que preocuparse, la solución es sencilla, y voy a ir explicando mi proceso para resolver el problema.

La vulnerabilidad se encuentra en Glibc, esto es lo que dice RHEL:

A heap-based buffer overflow was found in __nss_hostname_digits_dots(), which is used by the gethostbyname() and gethostbyname2() glibc function call. A remote attacker could use this flaw to execute arbitary code with the permissions of the user running the application.

Me voy a centrar en Cent OS y Debian, ya que son las distribuciones con las cuales trabajo y por ello voy a poner la solución para estas dos, pero el proceso no debe variar demasiado en otras distros. Necesitamos permisos de superusuario.

La lista de distribuciones afectadas es la siguiente:

  • RHEL (Red Hat Enterprise Linux) version 5.x, 6.x and 7.x
  • CentOS Linux version 5.x, 6.x & 7.x
  • Ubuntu Linux version 10.04, 12.04 LTS
  • Debian Linux version 7.x
  • Linux Mint version 13.0
  • Fedora Linux version 19 or older
  • Casi todas las instalaciones con SUSE
  • Arch Linux glibc version <= 2.18-1

¿Que version de la libreria C (Glibc) corre mi equipo?

Para saber la version solo hay que ejecutar el siguiente comando:

ldd --version

Salida en Cent OS 6.5

ldd (GNU libc) 2.12
Copyright (C) 2010 Free Software Foundation, Inc.
Esto es software libre; vea el código fuente para las condiciones de copia.
No hay NINGUNA garantía; ni siquiera de COMERCIABILIDAD o IDONEIDAD PARA UN
FIN DETERMINADO.
Written by Roland McGrath and Ulrich Drepper.

Salida en Debian 7

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.

¿Como comprobar si nuestro equipo es vulnerable a GHOST?

Los compas de openwall.com hicieron un script para revisar este problema, lo pego aquí:

/* 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);
}

Tambien lo voy a subir aquí en el sitio, pueden descargarlo o copiar y pegar:
http://blog.elhui2.info/scripts/ghosttest.c

En los dos sistemas necesitamos ingresar por ssh y escalar a root, una vez realizado este paso, descargamos el script:

wget http://blog.elhui2.info/scripts/ghosttest.c

Compilamos el archivo:

gcc ghosttest.c -o ghosttest

y ejecutamos:

./ghosttest

Mi resultado en los dos sistemas fue:

vulnerable

Parche de GHOST en Cent OS

El parche es realmente sencillo, necesitamos limpiar los repos y actualizar el sistema:

yum clean all
yum update

Reiniciamos:

reboot

Hacemos login de nuevo y probamos con el comando anterior:

./ghosttest

Y la salida:

not vulnerable

Por ultimo borramos nuestros archivos de pruebas:

rm ghosttest*

Listo!!

Parche de GHOST en Debian:

Practicamente es el mismo procedimiento, solo varian los comandos:

apt-get clean
apt-get update
apt-get upgrade

También reiniciamos:

reboot

Hacemos login de nuevo y probamos el ghosttest

./ghosttest

Y la salida en debian:

not vulnerable

Por ultimo borramos nuestros archivos de pruebas:

rm ghosttest*

Listo!!

Con esto nuestros servidores estan asegurados contra la vulnerabilidad GHOST #CVE-2015-0235
Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Eres un robot? * Time limit exceeded. Please complete the captcha once again.