Linux-Magazin_-_Januar_2019

(singke) #1
Systemd läuft als erster Prozess und
startet, überwacht und beendet wei-
tere Prozesse. Daher erhält er auch die
Prozess-ID 1. Zahlreiche Distributionen
setzen Systemd anstelle von Sys-V-Init
ein, beispielsweise Fedora seit Version 15,
Open Suse seit Version 12.1, Mandriva
2011, Arch Linux seit Oktober 2012, Red
Hat Enterprise Linux seit Version 7, Suse
Linux Enterprise Server ab Version 12,
Ubuntu seit Version 15.04 und Debian
seit Version 8.
Ein Team von Google-Forschern hat nun
eine recht gravierende Schwachstelle in
Systemd entdeckt [1] – und sie ist nicht
die erste. Ein entfernter Angreifer kann
mit ihrer Hilfe anfällige Systeme überneh-
men und auf ihnen beliebige Befehle aus-
führen. Die Attacke basiert auf speziell
konstruierten DHCP-Paketen, die der Ha-
cker an Linux-Rechner im betroffenen
Netz schickt.
Das Problem liegt im IPv6-DHCP-Client,
der für Systemd komplett neu entwickelt
wurde. Dieser Client schaltet sich ein,

Options-Puffers durch den »memcpy()«-
Aufruf in der »dhcp6_option_append_
ia()«-Funktion. Der Puffer ist auf dem
Heap alloziert, sodass der Angreifer da-
mit eine typische Buffer-Overflow-Atta-
cke auf dem Heap ausführen darf. So ist
er in der Lage, seinen eigenen Programm-
code abarbeiten zu lassen.
Besagter Buffer Overflow lässt sich von
einem entfernten Angreifer einfach aus-
nutzen. Er muss nur eine IPv6-DHCP-
Nachricht mit einer mehr als 493 Zeichen
langen Server-ID senden. Das löst den
Überlauf beim Aufbau einer »REQUEST«-
Nachricht des Clients aus.
Da die Systemd-Komponente in so vielen
modernen Linux-Systemen zum Einsatz
kommt, sind viele bedroht. Durch die
Einfachheit der Attacke sind die Angriffe
auch sehr verlässlich und stabil. Mit Hilfe
des Puffer-Überlaufs kann der Angreifer
direkt in den Speicher des Zielsystems
schreiben und so auch Befehle mit höhe-
ren Rechten ausführen.
Das Patch für diese Schwachstelle ist
denkbar einfach. Es muss lediglich eine
Zeile im Programmcode modifizieren.
Die If()-Abfrage
if (*buflen < len)
muss in
if (*buflen < offsetof(DHCP6Option, data) U
+ len)

umgewandelt werden. Jetzt berücksich-
tigt die Funktion jene 4 Extrabytes kor-
rekt und der Überlauf tritt danach nicht
mehr auf. (jcb) n

Infos
[1] Bug: [https:// bugs.launchpad.net/ ubuntu/
+source/ systemd/ +bug/ 1795921]

sobald ein Router im Netz IPv6-Adver-
tisement-Nachrichten sendet. Googles
Security-Team meldete die Schwachstelle
Anfang Oktober 2018. Zuerst hatten die
Sicherheitsspezialisten das Problem in
Ubuntu gefunden.

4 Bytes übersehen


Der eigentliche Programmierfehler liegt
in der »dhcp6_option_append_ia()«-
Funk tion. Die ist dafür zuständig, vom
Server empfangene Identity Associations
in den Options-Puffer für DHCPv6-Pakete
zu schreiben. Die Funktion empfängt da-
bei drei Argumente: einen Zeiger auf den
Options-Puffer, die verbleibende Länge
des Puffers und einen Zeiger auf die Iden-
tity-Associations-Struktur, die zu dem
Options-Puffer hinzuzufügen ist.
Bei diesem Einfügen der neuen Identity-
Associations-Daten in den Options-Puf-
fer zählt die Funktion die zusätzlichen
4 Bytes des IPv6-DHCP-Option-Headers
nicht mit. Das bewirkt den Überlauf des

Systemd fungiert als zentraler Ordnungsdienst in Linux-Systemen und versucht dabei deutlich mehr Aufgaben
abzudecken als das alte Sys-V-Init. Allerdings offenbarten sich auch immer wieder Sicherheitslücken – gerade
kommt eine weitere hinzu. Mark Vogelsberger

Systemd: Kritischer Puffer-Überlauf beim IPv6-DHCP-Client


Übergelaufen


© stylephotographs, 123RF

Know-how

90


http://www.linux-magazin.de

Insecurity Bulletin
Free download pdf