Schwachstellen finden sich selbst in Software, die sich besonders um Sicherheit bemüht – so geschehen in OpenSMTPD, wo ein Programmierfehler unter Umständen sogar den Zugriff als Root-User erlaubt.
OpenSMTPD, der SMTP-Server von OpenBSD, ist ein Unix-Daemon, der das Simple Mail Transfer Protocol (SMTP) zum Zustellen von E-Mails beherrscht. Die erste Version wurde im März 2013 veröffentlicht. Die Entwickler legten beim Design und der Programmierung von OpenSMTPD besonderen Wert auf Sicherheit und auf eine vergleichsweise einfache Konfiguration. Die Software-Suite unterstützt viele Betriebssysteme, darunter NetBSD, FreeBSD, DragonFly BSD und zahlreiche Linux-Distributionen.
Mit Blick auf die Sicherheit verwendeten die Entwickler besonders robuste Programmiermuster und Funktionen, namentlich bei String-Operationen, um Pufferüberläufe zu erschweren. Ebenso wurden die Rechte der Anwender innerhalb des Codes sauber getrennt, sodass bei einem Programmfehler der Angreifer nicht zu umfangreiche Berechtigungen erlangt.
Trotz all dieser Anstrenungen ist aber auch der OpenSMTPD-Code bei Weitem nicht völlig fehlerfrei. So hat eine nun entdeckte Schwachstelle (CVE-2020-8794 [1]) des Diensts zur Folge, dass ein entfernter Angreifer unter Umständen Root-Zugriff auf dem anfälligen System erlangen kann. Für einen Root-Zugang muss er neuere OpenSMTPD-Versionen attackieren – genauer gesagt solche, die auf der Version von Mai 2018 fußen (»commit a8e22235«). Unter älteren Versionen kann der Eindringling zwar auch Befehle ausführen, allerdings ohne Root-Rechte, was die Attacke deutlich entschärft.
Bei der Sicherheitslücke handelt es sich um einen recht alten Programmierfehler, der schon im Dezember 2015 in den Programmcode Einzug hielt. Konkret handelt es sich um einen Out-of-Bounds-Error beim Lesen von Netzwerkdaten. Der Fehler liegt im Client-Code der OpenSMTPD-Suite. Daraus ergeben sich zwei mögliche Angriffszenarien: Client-Side-Exploitation und Server-Side-Exploitation.
Ein entfernter Angreifer kann das Client-Side-Szenario auf Standard-OpenSMTPD-Systemen ausnutzen. Er muss in diesem Fall Kontrolle über einen entfernten Server besitzen oder aber eine Man-in-the-Middle-Attacke ausführen. Er kann die Kommunikation mit dem Client dann so manipulieren, dass sie den Out-of-Bounds-Fehler auslöst.
Im Falle einer Server-Side-Attacke muss der Angreifer eine spezielle Nachricht an den betroffenen OpenSMTPD-Server senden. Sie muss so beschaffen sein, dass sie einen Mail-Bounce hervorruft. Der Eindringling kann dann indirekt wieder die Client-Schwachstelle beim Zustellen des Bounce ausnutzen. Die vom Angreifer gewünschten Befehle werden allerdings erst nach einem Neustart des OpenSMTPD-Servers ausgeführt. Darum muss er den Server auch noch zum Absturz bringen, um diesen Neustart zu provozieren.
Der eigentliche Grund für diese Sicherheitslücke findet sich in den Routinen zum Verarbeiten von mehrzeiligen SMTP-Nachrichten. Ihre erste Zeile beginnt immer mit einem dreistelligen Zahlencode, einem Hyphen und einem optionalen String (zum Beispiel »250-ENHANCEDSTATUSCODES«). Die letzte Zeile beginnt ebenfalls mit einem dreistelligen Zahlencode, gefolgt von einem optionalen Whitespace, worauf wieder ein String folgt (zum Beispiel »250 HELP«).
Der Client-Code verarbeitet solche mehrzeiligen Antworten mit der Funktion »mta_io()«, in der unter anderem der Puffer »replybuf« gefüllt wird. Beim Zusammensetzen der Strings für diesen Puffer kann es nun unter Umständen zu einem Überlauf kommen. Das passiert dann, wenn die letzte Zeile keinen Whitespace mit anschließendem String enthält.
Das Advisory enthält auch einen Proof-of-Concept-Exploit, den die Advisory-Autoren unter OpenBSD 6.6, OpenBSD 5.9, Debian 10 (Stable), Debian 11 (Testing) und Fedora 31 erfolgreich getestet haben. (jcb)





