Stabsstelle DV-Sicherheit der
Universität Stuttgart (RUS-CERT)
https://cert.uni-stuttgart.de
logo
Meldung Nr: RUS-CERT-868

[GNU/libc] Schwachstelle im Resolver-Code
(2002-07-05 11:32:04.536752+00)

Quelle: http://cert.uni-stuttgart.de/archive/bugtraq/2002/07/msg00045.html

Die jüngst entdeckten Schwachstellen im DNS-Resolver betreffen auch die C-Laufzeitbibliothek des GNU-Systems. Probleme und Gegenmaßnahmen unterscheiden sich jedoch geringfügig von anderen Systemen.

Betroffene Systeme

Im wesentlichen dieselbe Schwachstelle weisen auch andere Systeme auf, siehe RUS-CERT-Meldung #857.

Einfallstor
Antworten auf DNS-Anfrage (Port 53 UDP/TCP), die über bestimmte libc-Funktionen verschickt wurden.

Auswirkung
Ein Angreifer kann möglicherweise beliebigen Code mit root-Rechten ausführen.

Typ der Verwundbarkeit
buffer overflow bug

Gefahrenpotential
sehr hoch
(Hinweise zur Einstufung des Gefahrenpotentials.)

Beschreibung
Die C-Laufzeitbibliothek des GNU-Systems (GNU libc) ist von den jüngst entdeckten Schwachstellen im Resolver-Code ebenfalls betroffen. Mögliche Workarounds unterscheiden sich jedoch von anderen betroffenen Systemen; deswegen auch diese separate Mitteilung.

Die meisten jetzt entdeckten Probleme wurden bereits im Herbst 1999 mit der Veröffentlichung von GNU libc 2.1.3 behoben. Eine Schwachstelle im DNS-Modul für den Name Service Switch (NSS) wurde jedoch übersehen. (Über den NSS-Mechanismus können dynamic shared objects geladen werden und die Arbeit des Resolvers beeinflussen. Derartige Module existieren für Datenbanken wie DNS, NIS, MySQL etc.) Besagter Code wird nur ausgeführt, falls DNS-basierte Auflösung für Netzwerknamen und -adressen aktiviert ist (siehe unten). Diese Daten werden über die getnetby*-Funktionen abgefragt. Die gewöhnlichen gethostby*-Funktionen, die zur Namensauflösung vor der Kontaktierung von Hosts verwendet werden, sind seit der GNU-libc-Version 2.1.3 nicht betroffen; die Problematik war dort auch geringfügig anders (siehe RUS-CERT-Meldung #869, [Hintergrund] Die jüngsten Schwachstellen im Resolver-Code).

Die getnetby*-Funktionen werden nicht von vielen Programmen verwendet, sondern hauptsächlich von Systemprogrammen wie route und netstat. Ein Angriff ist somit nicht völlig trivial möglich, da diese Programme meistens lediglich fest konfigurierte IP-Adressen abfragen.

Feststellen der Verwundbarkeit
Führen Sie das folgende C-Programm aus und beobachten Sie, ob UDP-Pakete auf Port 53 verschickt werden (z.B. mit tcpdump):

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

int
main (void)
{
  (void) getnetbyaddr(ntohl(inet_addr("129.69.16.0")), AF_INET);
  return 0;
}
Falls das System verwundbar ist und UDP-Pakete mit "tcpdump -n udp and port 53" protokolliert werden, liefert tcpdump folgende Ausgabe (der Zeitstempel am Anfang der Zeile und die IP-Adressen werden sich natürlich unterscheiden), wenn obiges Programm ausgeführt wird:
13:12:43.365794 129.69.16.19.35012 < 129.69.1.28.53:  21869+ PTR? 0.16.69.129.in-addr.arpa. (42) (DF)
13:12:43.366332 129.69.1.28.53 < 129.69.16.19.35012:  21869 NXDomain* 0/1/0 (117) (DF)

Workaround
In der Datei /etc/nsswitch.conf kann eingestellt werden, ob die getnetby*-Funktionen DNS-Anfragen verschicken oder nicht. Die Zeile mit "networks" sollte die Form

networks: files
haben, insbesondere "dns" darf nach dem Doppelpunkt nicht aufgeführt sein.

Es ist nicht klar, ob der Einsatz von BIND 9 als lokaler full resolver Angriffe ausfiltert. Entsprechende Hinweise von ISC beziehen sich wahrscheinlich lediglich auf die von PINE-CERT explizit beschriebene Schwachstelle (siehe auch [Hintergrund] Die jüngsten Schwachstellen im Resolver-Code).

Gegenmaßnahmen

Revisionen

(fw)

Weitere Artikel zu diesem Thema:

Hinweis
Die in diesem Text enthaltene Information wurde für die Mitglieder der Universität Stuttgart recherchiert und zusammengestellt. Die Universität Stuttgart übernimmt keinerlei Haftung für die Inhalte. Dieser Artikel darf ausschließlich in unveränderter Form und nur zusammen mit diesem Hinweis sowie dem folgenden Copyrightverweis veröffentlicht werden. Eine Veröffentlichung unter diesen Bedingungen an anderer Stelle ist ausdrücklich gestattet.

Copyright © 2017 RUS-CERT, Universität Stuttgart, https://cert.uni-stuttgart.de/


https://cert.uni-stuttgart.de/ticker/article.php?mid=868