Kritische Sicherheitslücke in PHPMailer

Kritische Sicherheitslücke in PHPMailer

Am 25.12.2016 wurde eine Sicherheitslücke in der Programmbibliothek „PHPMailer“ veröffentlicht, welche in einer Vielzahl von PHP-Softwareprojekten für den Versand von E-Mails zum Einsatz kommt.

Diese Sicherheitslücke ermöglicht es Angreifern unter bestimmten Voraussetzungen, PHP-Code auf dem Ziel-Server auszuführen (s.g. „Remote Code Execution“) und damit ggf. die Website zu übernehmen, Datenbank-Zugangsdaten auszulesen, Dateien zu löschen oder neue Dateien anzulegen. Da PHP auf manchen Servern auch in der Lage ist, via shell_exec() Kommandos auf der Shell des Betriebssystems auszuführen, ist die Lücke um so brisanter.

Neben einer Vielzahl weiterer populärer Content Management Systemen (CMS) sind auch einige der von mir eingesetzten Systeme betroffen: „WordPress”, „MODX Revolution”, „WebsiteBaker” (inkl. Community Edition) und „LEPTON”. Die Shop-Systeme „xtcmodified“ und „JTL-Shop” scheinen ebenfalls davon betroffen zu sein (hier habe ich zwar bislang kein offizielles Statement gefunden, konnte aber die Programmbibliothek „PHPMailer“ im Quellcode entdecken).

Technischer Hintergrund

Um E-Mails via SMTP (Simple Mail Transfer Protocol, das Standard-Protokoll für den Versand von E-Mails) zu versenden, muss der so genannte „Envelope Sender” zusammen mit der Nachricht übergeben werden. Dieser „Envelope Sender” wird dafür genutzt, um Unzustellbarkeitsmeldungen an den Absender auszuliefern. Der „Envelope Sender” kann sich dabei vom dem im Mail-Client (z.B. Microsoft Outlook, Apple Mail, Thunderbird) sichtbaren Absender unterscheiden.

PHPMailer nutzt für das Erzeugen des „Envelope Sender” die der Funktion übergebene Mail-Adresse und überträgt dafür die „normale” (später im Mail-Client sichtbare) Absenderadresse in einen Teil der PHPMailer-Funktion, welche neben dem Festlegen des „Envelope Sender” auch weitere Einstellungen entgegennimmt.

Stellt man nun auf der Website z.B. ein Kontaktformular bereit, welches beim Versand der Mail an den Site-Betreiber die vom Interessenten angegebene Mail-Adresse als Absender-Adresse übernimmt, so können Angreifer durch Verwendung einer speziell präparierten E-Mail-Adresse gewissermaßen aus dem Feld „Envelope Sender” ausbrechen und PHPMailer weitere Einstellungen übergeben.

Im konkreten Fall können Angreifer so PHPMailer dazu nutzen, Parameter an das darunterliegende Programm „Sendmail” (E-Mail-Dienst auf Unix-Systemen) weiter zu reichen. Diese Parameter instruieren Sendmail, eine Log-Datei mit der Endung .php auf dem Server anzulegen, welche u.a. den Nachrichteninhalt enthält. Als Nachricht geben die Aggressoren dann beliebigen PHP-Code ein, welcher nach Aufruf der Log-Datei vom PHP-Interpreter auf dem Server ausgeführt wird.

Schließung der Sicherheitslücke in PHPMailer

In der nun überarbeiteten Version 5.2.21 von PHPMailer wurde die Prüfung der Absender-Adresse so verbessert, dass das Ausbrechen aus dem „Envelope-Sender”-Feld und damit die Übergabe weiterer Einstellungen an PHPMailer nicht mehr möglich ist.

In vielen Fällen kann die in CM- und Shop-Systemen vorhandene alte Version von PHPMailer durch das Ersetzen der entsprechenden Dateien aktualisiert werden. Für Systeme, bei denen spezielle Anpassungen an der Programmbibliothek vorgenommen wurden, müssen die jeweiligen Entwickler-Gruppen Patches bereitstellen.

Schließung der Sicherheitslücke auf Ihren Websites

Inwieweit die Sicherheitslücke in Verbindung mit dem bei Ihnen (bzw. Ihren Kunden) eingesetzten CMS bzw. Shop-System tatsächlich ausgenutzt werden kann, ist derzeit nicht bekannt – der Entdecker der Lücke hat das PHPMailer-Projekt verständigt, jedoch aus Sicherheitsgründen keine Details zu konkreten Angriffsvektoren und nötigen Rahmenbedingungen veröffentlicht (s.g. "Responsible Disclosure“). Es existiert jedoch ein Code zu Demonstrationszwecken, der die Schwachstelle aufzeigt – demnach dürften vor allem Kontaktformulare betroffen sein, welche die E-Mail-Adresse des Interessenten als Absender-Adresse in die E-Mail an den Seitenbetreiber übernehmen. 

Für von mir im Jahr 2016 mit den oben genannten Systemen neu realisierten Projekte, werde ich von den Entwicklern der Systeme nach und nach bereitgestellte Patches zeitnah installieren und die Sicherheitslücke somit schließen. Sofern die Entwickler der CM- bzw. Shop-Systeme keinen Patch bereitstellen, werde ich die PHPMailer-Bibliothek manuell ersetzen. Obwohl die eingesetzten Systeme nicht in meiner Verantwortungshoheit liegen, führe ich diese Sicherheitswartung aufgrund der Dringlichkeit als freiwillige und kostenfreie Serviceleistung durch. Meine Auftraggeber wurden darüber via E-Mail unterrichtet und erhalten nach Abschluss der Arbeiten erneut eine Nachricht. Ältere Websites prüfe und aktualisiere ich gern nach Rücksprache.

Sofern Sie, lieber Leser dieses Artikels, nicht zu meinen geschätzten Auftraggebern gehören jedoch eines der o.g. Systeme einsetzen, informieren Sie bitte Ihre Web-Agentur und bitten Sie um Prüfung des beschriebenen Sachverhalts. Selbstverständlich können Sie mit diesem Anliegen auch gern an mich herantreten.

Übergangslösung

Als Übergangslösung empfehle ich, die Kontaktformulare so einzustellen, dass sie nicht mehr die Adresse des Eintragenden als Absender-Adresse in die E-Mail übernehmen. Stattdessen sollte eine fixe, von Ihnen definierte E-Mail-Adresse als Absender verwendet werden – das macht zwar das Antworten auf solche Mails schwieriger, umgeht aber die beschriebene Sicherheitslücke. Sofern Sie kein Kontaktformular einsetzen oder dieses eine fixe Absender-Adresse verwendet, besteht nach aktuellem Kenntnisstand keine Gefahr.

Open-Source als Freund

Auch wenn diese Sicherheitslücke sicher hier und da für Unmut sorgt und ungewollten Mehraufwand bedeutet (nicht zuletzt für mich), ist es nicht angebracht mit dem Finger auf das Open-Source-Projekt PHPMailer zu zeigen. Vielmehr müssen wir dankbar sein, dass Open-Source den Einblick in den Quellcode ermöglicht und somit das Auffinden und zeitnahe Schließen von Sicherheitslücken überhaupt erst ermöglicht. In proprietärer, nicht quelloffener Software ist das nicht so einfach möglich und Lücken bleiben lange Zeit unerkannt. Fehler passieren und gerade in der Software-Entwicklung kann man kaum sinnvoll auf alle möglichen Eventualitäten testen. Das PHPMailer-Entwicklerteam hat vorbildlich schnell reagiert und die Lücke in der Bibliothek geschlossen. Auch sollte man nicht vergessen, dass Open-Source-Software unter freien Lizenzen – wie eben die PHPMailer-Bibliothek – die Entwicklung Ihrer Website nicht nur immens beschleunigt, sondern sie durch den Wegfall von Lizenzkosten auch sehr viel erschwinglicher macht.

Weiterführende Informationen zur Sicherheitslücke in PHPMailer

Hinweis: Dieser Artikel stellt keine Sicherheitsberatung da und entspricht lediglich meinem Kenntnisstand zum aktuellen Zeitpunkt (01.01.2017). Da nähere Details zum Angriffsvektor aus Sicherheitsgründen derzeit noch nicht bekannt sind, empfehle ich in jedem Fall ein Update der eingesetzten PHPMailer-Bibliothek auf mindestens Version 5.2.21.

Fragen zum Artikel? Jetzt fragen.