Open Source im professionellen Einsatz

Glibc: Lokaler Angreifer kann höhere Rechte erlangen

Eine Sicherheitslücke in der GNU C Bibliothek (Glibc) hat zur Folge, dass ein lokaler Angreifer höhere Rechte auf dem System erlangen kann. Der Programmierfehler tritt in dem »nss_files«-Backend für den Name Service Switch auf. Ein Angreifer kann diesen ausnutzen, um einen Fehler auf dem Heap hervorzurufen. Die verantwortliche Schwachstelle befindet sich in der »nss/nss_files/files-XXX.c«-Datei. Darin implenentiert ist auch die »get_contents()«-Funktion, die für einen Heap Overflow anfällig ist:

get_contents(char *linebuf, size_t len, FILE *stream)
{
          int curlen = ((remaining_len > (size_t) INT_MAX) ? INT_MAX
    : remaining_len);
    char *p = fgets_unlocked (curbuf, curlen, stream);
   ...

Falls der Curbuf-Puffer hier nicht korrekt terminiert ist, kann es zu einem Overflow während des »fgets_unlocked()«-Aufrufs kommen. Der nun veröffentlichte Patch korrigiert dieses Problem indem er ein Terminierungszeichen ans Ende des Puffers stellt:

get_contents (char *linebuf, size_t len, FILE *stream) 
    {          
    int curlen = ((remaining_len > (size_t) INT_MAX) ? INT_MAX                        
   : remaining_len);       

   /* Terminate the line so that we can test for overflow.  */      

   ((unsigned char *) curbuf)[curlen - 1] = 0xff;
   char *p = fgets_unlocked (curbuf, curlen, stream);
    ...

Damit tritt der Fehler nicht mehr auf und die Attacke ist nicht mehr durchführbar.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.