[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
- Systeme, die GNU libc bis einschließlich Version 2.2.5 verwenden, insbesondere fast alle GNU/Linux-Systeme. Die voreingestellte Konfiguration der meisten Distributionen scheint jedoch nicht betroffen zu sein.
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
):
Falls das System verwundbar ist und UDP-Pakete mit "#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; }
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
haben, insbesondere "networks: files
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
- Im GNU-libc-CVS ist mittlerweile ein Patch enthalten.
Revisionen
- V.1.0 (2002-07-05)
- V.1.1 (2002-07-12) Das Testprogramm ist nun in offensichtlicherer Weise korrekt.
Weitere Artikel zu diesem Thema:
- [Hintergrund] Die jüngsten Schwachstellen im Resolver-Code (2002-07-05)
Gegenwärtig herrscht einige Verwirrung, welche Systeme in welcher Weise von den jüngst entdeckten DNS-Schwachstellen betroffen sind. Diese Mitteilung faßt die bisher öffentlich verfügbaren Daten zusammen. - [Generic/libc, BIND] Pufferüberlauf im Resolver-Code - Update (2002-07-02)
Im DNS-Resolver der Laufzeitbibliotheklibc
wurden mehrere Pufferüberlaufschwachstellen entdeckt.
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 © 2022 RUS-CERT, Universität Stuttgart, https://cert.uni-stuttgart.de/
https://cert.uni-stuttgart.de/ticker/article.php?mid=868