Sicherheitsforscher von Qualys die Möglichkeit Schwachstellen im Mailserver qmail, die bereits seit 2005 bestehen (CVE-2005-1513), jedoch unbehoben blieben, da der Autor von qmail die Realisierbarkeit eines funktionierenden Exploits, der gegen Standardkonfigurationen eingesetzt werden könnte, als unrealistisch ansah. Qualys gelang es, einen Exploit zu entwickeln, der diese Annahme widerlegt und die remote Ausführung von Code auf dem Server durch den Versand speziell gestalteter Nachrichten ermöglicht.
Das Problem wird durch einen ganzzahligen Überlauf in der Funktion stralloc_readyplus() verursacht, der bei der Verarbeitung sehr großer Nachrichten auftreten kann. Für den Exploit war ein 64-Bit-System mit mehr als 4 GB virtuellem Speicher erforderlich. Bei der ursprünglichen Analyse der Schwachstelle im Jahr 2005 erklärte Daniel Bernstein, dass die Annahme im Code, dass die Größe des zugewiesenen Arrays immer in einen 32-Bit-Wert passt, darauf basiert, dass niemand einem Prozess Gigabytes an Speicher zur Verfügung stellt. In den letzten 15 Jahren haben 64-Bit-Systeme auf Servern 32-Bit-Systeme weitgehend verdrängt, und die Menge des bereitgestellten Speichers sowie die Netzwerkbandbreite sind stark gestiegen.
Die begleitenden Pakete mit qmail berücksichtigten Bernsteins Anmerkung und begrenzten beim Start des Prozesses qmail-smtpd den verfügbaren Speicher (z. B. wird bei Debian 10 ein Limit von 7 MB festgelegt). Doch Ingenieure von Qualys fanden heraus, dass dies nicht ausreicht und dass neben qmail-smtpd auch ein remote Angriff auf den Prozess qmail-local möglich ist, der in allen geprüften Paketen unbeschränkt blieb. Als Beweis wurde ein Konzept-Exploits entwickelt, der für den in Debian mit qmail in Standardkonfiguration gelieferten Paket geeignet ist.
Für die Organisation der remote Ausführung von Code während des Angriffs ist ein freier Speicherplatz von 4 GB auf der Festplatte und 8 GB RAM auf dem Server erforderlich.
Der Exploit ermöglicht das Ausführen beliebiger Shell-Befehle mit den Rechten jedes Nutzers im System, außer root und Systemnutzern, die kein eigenes Unterverzeichnis im Verzeichnis „/home“ haben (der Prozess qmail-local wird mit den Rechten des lokalen Nutzers ausgeführt, an den die Zustellung erfolgt).
Der Angriff erfolgt
Durch das Senden einer sehr großen E-Mail, die mehrere Zeilen im Betreff enthält und eine Größe von etwa 4 GB und 576 MB hat, führt die Verarbeitung einer solchen Zeile in qmail-local zu einem Überlauf bei der Ganzzahlverarbeitung, wenn versucht wird, die Nachricht an einen lokalen Benutzer zuzustellen. Der Ganzzahlüberlauf führt dann zu einem Pufferüberlauf beim Kopieren von Daten und dem Potenzial, Speicherseiten mit libc-Code zu überschreiben. Durch Manipulation der übermittelten Daten kann unter anderem die Adresse der Funktion „open()“ überschrieben werden, indem sie durch die Adresse der Funktion „system()“ ersetzt wird.
Weiterhin erfolgt im Prozess des Aufrufs von qmesearch() in qmail-local die Öffnung der Datei „.qmail-extension“ über die Funktion open(), was tatsächlich zur Ausführung der Funktion
system(„.qmail-extension“). Da jedoch ein Teil der Datei „extension“ auf der Grundlage der Adresse des Empfängers gebildet wird (zum Beispiel „localuser-extension@localdomain“), können Angreifer eine Befehlsübertragung organisieren, indem sie den Benutzer „localuser-;command;@localdomain“ als Empfänger der Nachricht angeben.
Bei der Analyse des Codes wurden auch zwei Schwachstellen in dem zusätzlichen Patch qmail-verify identifiziert, der Teil des Pakets für Debian ist. Die erste Schwachstelle () ermöglicht es, die Überprüfung der E-Mail-Adresse zu umgehen, während die zweite () zu einem Leck lokaler Informationen führt. Insbesondere ermöglicht die erste Schwachstelle, die Überprüfung der Korrektheit der Adresse, die im Exploit zur Übertragung des Befehls verwendet wird, zu umgehen (die Überprüfung schlägt bei Adressen ohne Domäne wie „localuser-;command;“ nicht an). Die zweite Schwachstelle kann genutzt werden, um das Vorhandensein von Dateien und Verzeichnissen im System zu überprüfen, einschließlich solcher, die nur für root zugänglich sind (qmail-verify wird mit Root-Rechten ausgeführt), durch direkten Zugriff auf den lokalen Handler.
Um das Problem zu umgehen, empfahl Bernstein, Prozesse von qmail mit einem gemeinsamen Limit für den verfügbaren Speicher zu starten („softlimit -m12345678“), wodurch das Problem blockiert wird. Eine alternative Schutzmaßnahme besteht darin, die maximale Größe der verarbeiteten Nachricht über die Datei „control/databytes“ zu begrenzen (standardmäßig wird diese bei den Standardeinstellungen nicht erstellt, wodurch qmail anfällig bleibt). Darüber hinaus schützt „control/databytes“ nicht vor lokalen Angriffen von Benutzern des Systems, da das Limit nur in qmail-smtpd berücksichtigt wird.
Das Problem betrifft das Paket , die im Debian-Repository enthalten sind. Für dieses Paket wurde eine Reihe von Patches erstellt, die sowohl alte Sicherheitsanfälligkeiten aus dem Jahr 2005 (durch die Hinzufügung von harten Speicherkapazitätsgrenzen in die alloc()-Funktion) als auch neue Probleme in qmail-verify beheben. Separat eine aktualisierte Version des Patches qmail-verify. Die Entwickler haben ihre Patches vorbereitet, um alte Probleme zu blockieren, und haben auch an der Beseitigung aller möglichen ganzzahliger Überläufe im Code gearbeitet.
Quelle: opennet.ru
