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.
Systemd läuft als erster Prozess und startet, überwacht und beendet weitere 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 übernehmen und auf ihnen beliebige Befehle ausführen. Die Attacke basiert auf speziell konstruierten DHCP-Paketen, die der Hacker 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, sobald ein Router im Netz IPv6-Advertisement-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()«-Funktion. 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 dabei drei Argumente: einen Zeiger auf den Options-Puffer, die verbleibende Länge des Puffers und einen Zeiger auf die Identity-Associations-Struktur, die zu dem Options-Puffer hinzuzufügen ist.
Bei diesem Einfügen der neuen Identity-Associations-Daten in den Options-Puffer zählt die Funktion die zusätzlichen 4 Bytes des IPv6-DHCP-Option-Headers nicht mit. Das bewirkt den Überlauf des Options-Puffers durch den »memcpy()«-Aufruf in der »dhcp6_option_append_ia()«-Funktion. Der Puffer ist auf dem Heap alloziert, sodass der Angreifer damit eine typische Buffer-Overflow-Attacke auf dem Heap ausführen darf. So ist er in der Lage, seinen eigenen Programmcode abarbeiten zu lassen.
Besagter Buffer Overflow lässt sich von einem entfernten Angreifer einfach ausnutzen. 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öheren 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) + len)
umgewandelt werden. Jetzt berücksichtigt die Funktion jene 4 Extrabytes korrekt und der Überlauf tritt danach nicht mehr auf.





