Von Newslettern, Bestätigungstoken und Input Validation

Den normalen Prozess bei der Anmeldung zu einem Newsletter kennt jeder. Nach der Eingabe der Email Adresse wird eine Bestätigungsemail verschickt, um sicherzustellen, dass der Besitzer der Adresse den Newletter wirklich abbonieren möchte. Dies hat auf der einen Seite den Vorteil, dass man seine ungeliebten Kollegen nicht mit Spam beglücken kann, ist aber tatsächlich nach deutschem Datenschutzrecht auch erforderlich. Dieses Beispiel zeigt jedoch, dass gut gemeint nicht immer gut gemacht heißen muss.

Das hier beschriebene klingt banal, und das ist es auch. Es ist und bleibt ein Anfängerfehler, der spätetens bei Tests hätte auffallen müssen.

Problembeschreibung

Es geht um das abfallnavi der Stadt Aachen. Dort gibt es einen Newletter Dienst, mit dem man sich am Tag vor der Abholung der Mülltonnen per Email erinnern lassen kann. Entwickelt und offenbar auch betrieben wird die Software von dem aachener IT-Dienstleister regio it. Dies ist jedoch nicht sofort ersichtlich.

Nach der Anmeldung erhielt ich die gewünschte Bestätigungsmail. Zu meiner Überraschung war der Absender nicht etwa die Stadt Aachen, sondern noreply@regioit.de. Eine Firma, die mir bereits im schulischen Umfeld mehrfach negativ aufgefallen war und auch am PC-Wahl Debakel nicht ganz unschuldig ist. Das musste ich mir also ansehen.

Bei der Registrierung werden die Informationen wie Emailadresse und Bezirk an eine JSON API gesendet. Im Anschluss wird die Bestätigunsmail mit dem Bestätigunstoken versandt. Die API ist an dieser Stelle jedoch sehr geschwätzig und gibt neben einem freundlichen success auch sehr zuvorkommend den Bestätigunstoken mit zurück. An diesem Punkt ist es also möglich beliebige Email Adresse hinzufügen und zu bestätigen.

Mit einem kleinen Python Script war es dann schnell möglich den gesamten Prozess der Anmeldung zu automatisieren und somit beliebige Email Adressen zu aktivieren.

Bis dahin hatte mich zudem das HTML5 Eingabefeld auf der Internetseite daran gehindert, ungültige Email Adressen einzugeben. Das änderte sich mit diesem Script. Tatsächlich ließen sich beliebige Strings zur Datenbank hinzufügen, die anschließend auch mit dem Bestätigunstoken aktiviert werden konnten. Auch das sollte eigentlich nicht passieren. Input validation auf client Seite ist zwar der Benutzerfreundlichkeit zuträglich, hat jedoch nichts mit Anwendungssicherheit zu tun. Zugegeben, solange man Email Adressen nur per Bestätigungsmail verifizieren kann, ist dies kein Problem. Ist der Token aber plötzlich öffentlich, ist das mindestens unschön.

Responsible Disclosure

Alle hier genannten Probleme wurden der regio it im Vorfeld per Email kommuniziert und sechs Wochen zur Behebung eingeräumt.

Kommunikation

Am 15.04.2018 habe ich die generische info Adresse im Impressum der regio it mit der Bitte mir einen Ansprechpartner zu nennen kontaktiert. Am 16.04.2018 erhielt ich eine Antwort, in der ich um weitere Details gebeten wurde. Diese übermittelte ich noch am selben Tag. Seitdem habe ich keine weiteren Antworten erhalten.

Behebung

Das Verifikationsproblem, ich will hier gar nicht von einer Sicherheitslücke sprechen, wurde zeitnah behoben, der Token wird nun nicht mehr zurückgegeben. Nach meinen kurzen Tests gibt es jedoch weiterhin keine Server-seitige Input Validation.

Auch wäre eine kurze Email nach der Behebung an mich zu erwarten gewesen.

Datenschutz

Was bleibt, ist der unangenehme Beigeschmack, dass der Nutzer eigentlich davon ausgeht, dass seine Daten ausschließlich an die Stadt Aachen übermittelt werden, die aber tatsächlich durch die regio it verarbeitet und gespeichert werden. Hier fehlt meiner Meinung nach ein klarer Hinweis bei der Registrierung.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.