ghost-linux-security-vulnerabilityLe 27 janvier 2015, Qualys a dévoilé une faille de sécurité, présente dans tous les systèmes d’exploitations Linux, la faille venant de la GNU C library (Glibc). La version de la librairie Glibc contenant la faille est utilisée depuis novembre 2000, restant non reconnue pendant 13 ans, jusqu’en mai 2013, quand la faille est répertoriée mais mal classée et la nouvelle version sûre (2.18) créée mais non répertorié comme “security fix”, les différents systèmes d’exploitations ne vont donc pas forcément mettre à jour leur version LTS.

Les systèmes d’exploitation (Debian7 et Ubuntu 12.04) installés sur différents serveurs VPS que j’utilise étant donc vulnérables, il a fallu y remédier.

Vérifier la version de Glibc utilisée puisque le patch remonte à la version 2.18, pour Debian et Ubuntu on peut utiliser :

ldd --version

Retour pour Ubuntu 12.04

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.

Retour pour Debian7

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.

Tester directement le serveur à l’aide d’un script C :

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

Compiler et lancer comme suit :

$ gcc ghosttest.c -o ghosttest
 $ ./ghosttest

Le script retournera “vulnerable” ou “not vulnerable”…

Comment réparer en cas de retour “vulnerable”?

Dans le cas de Debian et Ubuntu, les versions LTS ont été patchées, une mise à jour est donc suffisante.
Mettre à jour avec la commande apt-get

sudo apt-get clean
 sudo apt-get update
 sudo apt-get upgrade
 # dist-upgrade mettra également à jour le kernel, mais n'est pas obligatoire pour mettre à jour la sécurité.

La mise à jour prendra effet après reboot!

 

Pour finir un petit rappel des systèmes touchés

  • 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
  • Fedora Linux version 19 or older
  • Linux Mint version 13.0
  • SUSE Linux Enterprise 11 and older (also OpenSuse Linux 11 or older versions).
  • SUSE Linux Enterprise Software Development Kit 11 SP3
  • SUSE Linux Enterprise Server 11 SP1 LTSS
  • SUSE Linux Enterprise Server 11 SP3 for VMware
  • SUSE Linux Enterprise Server 11 SP3
  • SUSE Linux Enterprise Server 11 SP2 LTSS
  • SUSE Linux Enterprise Server 10 SP4 LTSS
  • SUSE Linux Enterprise Desktop 11 SP3
  • Arch Linux glibc version <= 2.18-1

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *