Resposta à minha pergunta, da Qualys :
Durante nossos testes, desenvolvemos uma prova de conceito em que enviamos um email especialmente criado para um servidor de email e podemos obter um shell remoto para a máquina Linux. Isso ignora todas as proteções existentes (como ASLR, PIE e NX) em sistemas de 32 e 64 bits.
Minha pesquisa compilada abaixo para quem procura:
aviso Legal
Apesar do que muitos outros tópicos / blogs possam lhe dizer, sugiro que não atualize imediatamente todos os sistemas operacionais que você possui às cegas, sem testar exaustivamente essas glibc
atualizações. Foi relatado que as atualizações glibc causaram grandes falhas de aplicativos, forçando as pessoas a reverter suas atualizações glibc para a versão anterior.
Não basta atualizar em massa um ambiente de produção sem testar.
Informações básicas
GHOST é um bug de 'buffer overflow' que afeta as chamadas de função gethostbyname () e gethostbyname2 () na biblioteca glibc. Essa vulnerabilidade permite que um invasor remoto capaz de fazer uma chamada de aplicativo para uma dessas funções execute código arbitrário com as permissões do usuário que está executando o aplicativo.
Impacto
As chamadas de função gethostbyname () são usadas para resolução de DNS, que é um evento muito comum. Para explorar esta vulnerabilidade, um invasor deve acionar um estouro de buffer fornecendo um argumento de nome de host inválido para um aplicativo que executa uma resolução de DNS.
Lista atual de distribuições Linux afetadas
RHEL (Red Hat Enterprise Linux) versão 5.x, 6.xe 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 versão 5.x, 6.x e 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 versão 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 versão 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 versão 13.0
Mint 13 fix available ---> libc6-2.15-0ubuntu10.10
Fedora Linux versão 19 (ou anterior deve atualizar)
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 (versões anteriores a 11 devem ser atualizadas)
11.4 Evergreen fix available ---> glibc-2.11.3-12.66.1
12.3 fix available ---> glibc-2.17-4.17.1
Quais pacotes / aplicativos ainda estão usando o glibc excluído?
( créditos para 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}'
Qual versão da biblioteca C (glibc) meu sistema Linux usa?
A maneira mais fácil de verificar o número da versão é executar o seguinte comando:
ldd --version
Amostras de saídas do 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.
Exemplo de saídas do 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.
Exemplo de saídas do 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.
Verificação de vulnerabilidade GHOST
A Universidade de Chicago está hospedando o script abaixo para facilitar o download:
$ 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 e execute-o da seguinte maneira:
$ gcc ghosttester.c -o ghosttester
$ ./ghosttester
[responds vulnerable OR not vulnerable ]
Red Hat Access Lab: ferramenta GHOST Não use esta ferramenta, seus relatórios estão incorretos, o verificador de vulnerabilidades da Qualys é preciso.
Remendo
CentOS / RHEL / Fedora / Linux Científico
sudo yum clean all
sudo yum update
Agora reinicie para ter efeito:
sudo reboot
Como alternativa, se o seu espelho não contiver os pacotes mais recentes, faça o download manualmente. * observação: para usuários mais avançados
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 atualização de segurança do SUSE, use o YaST online_update. Ou use os seguintes comandos conforme sua versão:
Kit de Desenvolvimento 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, execute todas as versões linux do SUSE para atualizar seu sistema:
zypper patch
OpenSUSE Linux
Para ver uma lista de atualizações disponíveis, incluindo glibc no OpenSUSE Linux, digite:
zypper lu
Para simplesmente atualizar os pacotes glibc instalados com suas novas versões disponíveis, execute:
zypper up
Quase todos os programas em execução na sua máquina usam glibc. Você precisa reiniciar todos os serviços ou aplicativos que usam glibc para garantir que o patch entre em vigor. Portanto, uma reinicialização é recomendada.
Como reiniciar o init sem reiniciar ou afetar o sistema?
telinit u
'man telinit' - U ou u para solicitar que o daemon init (8) se re-execute. Isso não é recomendado, pois o Upstart atualmente não pode preservar seu estado, mas é necessário ao atualizar as bibliotecas do sistema.
Atenuar imediatamente a ameaça de maneira limitada é desabilitar as verificações reversas de DNS em todos os seus serviços públicos. Por exemplo, você pode desabilitar a verificação de DNS reverso em SSH, definindo UseDNS
a no
sua/etc/ssh/sshd_config
.
Fontes (e mais informações):
- 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