Zum hauptinhalt springen

zapptales – vom Chat zum Buch zum Datenleck

Weihnachtszeit ist Geschenkezeit, natürlich auch in diesem Jahr. Viele suchen verzweifelt nach schönen, möglichst originellen Geschenken, auch in unserem Freundeskreis. Von »Ihr Name auf einem Reiskorn« bis »Deine schönsten Urlaubsfotos als Fotobuch« bleibt kein Wunsch unerfüllt.

Auf der Jagd nach dem besten Geschenk sind Freund*innen von uns auf zapptales gestoßen. Der Dienst verspricht, individuelle Bücher drucken zu lassen, ungefähr so wie Fotobücher – nur mit privaten Chatverläufen. Moment… private Chats auf fremde Server laden, um sie drucken zu lassen? Da hören wir die Glöckchen läuten. Aber keine Weihnachtsglöckchen 🔔, sondern Alarmglocken 🚨. Leider stellte sich heraus: Zu Recht!

Große Versprechen, kleines Vertrauen

Aber alles kein Problem, weil das natürlich sicher und verschlüsselt ist, verspricht der Online-Dienst zapptales. Dort können Nutzer*innen ihren Chatverlauf aus diversen, zum Teil Ende-zu-Ende verschlüsselten, Messengern hochladen und dann daraus ein Fotobuch drucken lassen. Zum Zeitpunkt der Untersuchung wurden folgende Messenger unterstützt: WhatsApp, Telegram, Facebook Messenger, Threema, Instagram und iMessage.

zapptales bewirbt den eigenen Dienst damit, so die schönsten Chat-Erinnerung mit dem*der Partner*in, den Freund*innen oder der Familie zu verewigen. Oder wie sie sagen:

zapptales druckt deinen Chat: Damit aus Smileys ein Lächeln wird.

Schade nur, dass aus den Smileys nicht nur ein Lächeln wurde, sondern auch ein Datenabfluss. Immerhin: So haben wir ein Geschenk für euch – eine Grusel-Geschichte zur Vorweihnachtszeit.

Denn natürlich waren wir neugierig und haben uns den Dienst etwas genauer angeschaut. Erstmal wollen wir herausfinden, wie zapptales funktioniert: Wir geben also eine E-Mail-Adresse an und laden einen Chat hoch.

Bei dem schlechten Bauchgefühl natürlich nicht mit echten Daten, sondern wir haben eine extra Test-Mailadresse. Ein echter Chat kam für uns sowieso nicht infrage. Stattdessen haben wir uns zum Testen WhatsApp auf zwei ungenutzten Forschungs-Handys installiert und mal ein bisschen miteinander gechattet:

Fakechat den wir hatten um die Chatbuch-Bearbeitung zu testen

Nachdem wir unseren Chat bei zapptales hochgeladen haben, können wir direkt ein hübsches Buch gestalten:

Screenshot aus der Chatbuch-Bearbeitungswebsite

Hoch hinauf auf den Server

Doch wie kommt der Chat zu zapptales? Das ist je nach Messenger unterschiedlich. Für Instagram und Facebook Messenger kann man den DSGVO-Export1 der Plattform hochladen und dann auswählen, welcher Chat gedruckt werden soll. Bei Telegram und Threema soll man immerhin nur einzelne Chats exportieren und diese dann hochladen. Für iMessage gibt es eine eigene Software, um die Daten aus einem iOS-Backup zu extrahieren.

Und für unseren Test-Anwendungsfall mit einem WhatsApp-Chat gibt es auch eine eigene Software. Diese nutzt die WhatsApp-Web-Funktion, um sich mit dem eigenen Handy zu verbinden und dann die Chats abzurufen.

Diese Software laden wir herunter und schauen uns an, wie sie technisch umgesetzt ist.

Websites with extra steps

Die App ist mit dem Framework Electron gebaut. Electron erlaubt es, Desktop-Apps mit Webtechnologie zu entwickeln. Das heißt: Den Code für die Anwendung müssen die Software-Entwickler*innen nur einmal schreiben – und die Anwendungen laufen trotzdem auf vielen verschiedenen Betriebssystemen. Dies hat für uns einen weiteren Vorteil: Diese Apps lassen sich für uns deutlich angenehmer analysieren, weil der JavaScript-Quellcode direkt mit ausgeliefert wird.

Diesen Quellcode finden wir in der Datei mit dem Namen app.asar:

Auszug der Electron-App-Verzeichnisstruktur

Asar ist ein eigenes Datei-Format von Electron, in dem der eigentliche Quelltext der App steht. Da Electron-Apps nur “websites with extra steps” sind, wird der Quelltext einer App in dieses Archivformat verpackt.

Dieses Archiv entpacken wir und finden darin den Quelltext. Doch noch bevor wir uns diesen genauer anschauen können, sticht eine Datei namens .env ins Auge. Darin stehen einige sogenannte Umgebungsvariablen. Solche Dateien und Variablen werden häufig verwendet, um bestimmte Einstellungen an einer Stelle zentral zu sammeln. Das können nur harmlose Werte sein, wie zum Beispiel Versionsnummern oder der Name der Anwendung. Doch was haben wir hier?

Inhalt der .env Datei, darin zu erkennen eine Gmail-Adresse als Apple-ID und ein AWS Secret Access Key

Huch, ein Zugangstoken2 für Amazon Web Services (AWS)3? Das ist nicht gut…

Mit diesem Zugangstoken bekommen wir Zugriff auf die Amazon-Cloud von zapptales. Zuerst schauen wir mal, auf welche Datenspeicher (bei AWS werden diese “Buckets” genannt) wir Zugriff haben:

Liste der Buckets von zapptales

Eimer voller Daten

Oh no, das scheinen so ziemlich alle Daten zu sein.

In chat.zapptales.com liegen die ganzen Bilder, Videos und Sprachnachrichten aus den Chats, die zapptales hochgeladen hat. Und das sind ganz schön viele: 21 Terabyte Daten – alleine die Liste der Dateien, die dort liegen, ist super lang und ist fast 3 Gigabyte groß – darunter auch zehntausende fertige Fotobücher im PDF-Format.

Ebenfalls interessant: Im Bucket zapptales-db-backups gibt es tägliche Backups der Datenbank von zapptales.4 Darin stehen z.B. die unverschlüsselten Chats, Namen und zum Teil Telefonnummern von Gesprächspartner*innen. Außerdem Informationen darüber, welche Bücher bestellt wurden und an welche Adressen sie geliefert werden sollten – in mehr als 60 Ländern in der ganzen Welt. Zum Zeitpunkt der Untersuchung waren das 69.000 Accounts.

Delikates Detail: Wenn man das Buch bei zapptales gestaltet, kann man einzelne Nachrichten ausblenden – doch die Nachrichten und Medien bleiben auf dem Server gespeichert, es wird lediglich eine Markierung in der Datenbank gesetzt.

Schadsoftware statt Chatsoftware

Das Token steht in der .env Datei, weil zapptales so immer die neueste Version der App automatisch auf den Server laden kann – und diese dann sofort als Update bereit steht. So weit so gut – nur hätte diese Datei nicht in die veröffentlichte App eingebacken5 werden dürfen.

Das heißt aber auch, dass wir nicht nur alle Daten herunterladen können – sondern auch beliebige Dateien hochladen könnten. Damit könnten wir eine manipulierte App-Version hochladen, um Benutzer*innen von zapptales Schadsoftware unterzuschieben. Sei es eine App, die die ausgewählten Chats nicht nur an zapptales schickt, sondern auch das ganze Nachrichtenarchiv an einen Server des Angreifers – oder natürlich ein Verschlüsselungs-Trojaner.

“Verschlüsselt” ist kein Zauberspruch

Beim Hochladen des Chats spricht zapptales davon, dass dies verschlüsselt geschehe:

Chat verschlüsselt hochladen - Mit Hilfe der Schritt-für-Schritt Anleitung ist es kinderleicht, deinen WhatsApp Chat – mitsamt Textnachrichten, Bildern, Videos, Sprachnachrichten, GIFs, Stickern und Emojis bei zapptales hochzuladen. Direkt im Anschluss erhältst du deine persönlichen Login-Daten.

Das stimmt auch so halb – der Upload passiert über eine HTTPS-Verbindung. Das bedeutet, dass lediglich der Weg zwischen uns und zapptales abgesichert ist. Eine Person, die auf dem Weg mithört, kann diese Daten also nicht lesen.

Allerdings werden die Daten nicht so verschlüsselt, dass zapptales sie nicht mehr lesen könnte. Wir finden dieses Werbeversprechen irreführend, denn es suggeriert, dass die Chats nochmal besonders gesichert wären und so auch vor dem Zugriff von zapptales geschützt.

Stattdessen wird hier lediglich die Verbindung verschlüsselt – mit einer absoluten Standard-Technologie, die eigentlich keiner weiteren Nennung bedürfen sollte.6

Alarm!

Unser schlechtes Bauchgefühl hat sich also bestätigt und wir können sämtliche bei zapptales gespeicherten Chats und Fotobücher einsehen.

Doch das darf nicht so bleiben! Also setzen wir uns hin und schreiben wie jedes Mal einen Report, in dem wir die gefundenen Probleme dokumentieren. Diesen schicken wir an das CERT-Bund beim BSI und an die Bayrische Datenschutzbehörde. Diese sind dann mit dem Hersteller in Kontakt getreten, damit die Lücke schnellstmöglich geschlossen wird.

Bayern ist in vielerlei Hinsicht ein besonderes Bundesland, so auch beim Datenschutz: Wusstet ihr, dass der Freistaat Bayern zwei Datenschutzbehörden hat – aber nicht etwa eine für Bayern und eine für Franken, sondern eine für den Datenschutz im öffentlichen Bereich, also z.B. Behörden (den Bayerischen Landesbeauftragten für Datenschutz) und eine für den Datenschutz bei Unternehmen (das Bayerische Landesamt für Datenschutzaufsicht).

In vielen anderen Bundesländern vereint das Amt außerdem zwei Funktionen: Datenschutz und Informationsfreiheit. Leider hat Bayern aber kein Informationsfreiheits- oder Transparenzgesetz – und der Landesbeauftragte für Datenschutz kümmert sich auch wirklich nur um Datenschutz. Schade.

Eimer zu, alles gut?

Das hat in diesem Fall wunderbar funktioniert: Nachdem wir den Report am 21.09.2021 abgeschickt haben, wurde das AWS Secret am 22.09. für ungültig erklärt, sodass darüber kein Zugriff mehr auf die Buckets möglich war.

Am 23.09. wurde eine aktualisierte Version der Anwendung veröffentlicht, die keine Zugangsdaten mehr enthielt.

Zudem hat der Hersteller nach eigener Aussage analysiert, inwiefern mit diesen Zugangsdaten auf die Daten zugegriffen wurde und konnte sicherstellen, dass dies außer uns (und dem Hersteller selbst) niemand getan hatte.

Leider hat sich der Hersteller nicht dazu entschieden, die betroffenen Kund*innen von sich aus zu informieren. Da außer uns niemand auf die Daten zugegriffen hat und von uns kein Risiko ausginge, sind der Hersteller und die zuständige Datenschutzbehörde der Meinung, dass dies nicht nötig ist. Stattdessen wurde lediglich ein Post im Blog von zapptales veröffentlicht.

Das kritsieren wir sehr – denn auch wenn wir keinen Schabernack mit den Daten treiben, sollten die Kund*innen über den Datenabfluss informiert werden.

Exkurs: Wie updatet man ein gedrucktes Buch?

Wer den Artikel bis hier hin aufmerksam gelesen hat, wird sich vielleicht gefragt haben, wie zapptales es schafft Videos und Sprachnachrichten abzudrucken.

zapptales klebt nicht etwa einen Haufen kleine Displays und Lautsprecher in die Bücher – schade eigentlich – sondern druckt QR-Codes an die passende Stelle im Chat.

Nahaufnahme des QR-Codes

Diese verlinken dann auf eine kleine Seite, auf der das Video oder die Sprachnachricht anschaubar ist:

Screenshot der Seite mit eingebundenem Video

Das ist toll für die Nutzer*innen, aber stellt ein Problem dar, falls die QR-Codes in die falschen Hände fallen. Entweder wie hier durch ein Datenleck oder schlicht, indem das Buch nach Ende der Beziehung in den Müll geworfen und dort gefunden wird. Denn wie aktualisiert man die bereits gedruckten Seiten, die bei den Kund*innen im Schrank stehen? An der Stelle haben wir lange gerätselt – die QR-Codes abschalten? Neue QR-Codes als Aufkleber zum überkleben verschicken? Allen ungefragt neue Bücher schicken?

zapptales hat sich für einen anderen Weg entschieden: Sie wollen eine PIN-Abfrage vorschalten. Diese PIN soll man dann beim zapptales-Support anfragen können – wir haben dies aber bislang nicht gesehen.
Im Gespräch mit uns meinten die Geschäftsführer*innen, dass dieses Feature noch geplant ist – aber erst nach dem wichtigen Weihnachtsgeschäft.

Fazit

zapptales verarbeitet hochprivate Inhalte – Chatverläufe mit den Liebsten – und ermuntert dazu, diese aus eigentlich Ende-zu-Ende-verschlüsselten Messengern unverschlüsselt hochzuladen. Damit steht zapptales in großer Verantwortung, die Daten gut zu schützen.

So wäre es technisch möglich die Daten weitestgehend zu verschlüsseln, sodass zapptales bis zum finalen Druckauftrag keinen Einblick in die Chats hat. Dann hätten wir in diesem Fall auch nur einen Eimer voller verschlüsselter Dateien gefunden, mit denen wir nichts anfangen können.

Denn Fehler wie der hier beschriebene können passieren, auch ohne böse Absicht. Gerade deshalb ist es aber wichtig, Vorkehrungen zu treffen, um den daraus entstandenen Schaden zu minimieren.

Fotos, Videos, Sprachnachrichten und den Chatverlauf eines gekauften Buches auf unbestimmte Zeit und unverschlüsselt im Internet liegen zu lassen, ist hingegen unverantwortlich.

Außerdem ist anzumerken, dass die anderen Beteiligten eines exportierten und hochgeladenen Chats keine Möglichkeit haben herauszufinden, ob ihre Unterhaltung bei zapptales hochgeladen und verarbeitet wurde. Wir haben zwar auch lieber eine Weihnachtsüberraschung – aber vielleicht lieber ein selbstgemaltes Bild als ein Datenleck.

🤝

Wir haben diesen Fall zusammen mit dem Spiegel und dem Bayerischen Rundfunk veröffentlicht. Deren Artikel findet ihr hier:


Das dokumentieren, melden und drucken veröffentlichen solcher Lücken kostet viel Zeit und Nerven.

Wenn ihr zerforschung unterstützen wollt, findet ihr hier Möglichkeiten: https://zerforschung.org/unterstuetzen/

Danke 🎄


  1. Soll nochmal jemand behaupten die DSGVO verhindert Innovation! ↩︎

  2. Ein ‘Token’ ist eine längere Zeichenkette aus Kombinationen von Buchstaben und Zahlen. Eigentlich sollte diese Zeichenkette geheim sein – denn wer sie kennt, kann sich Zugang verschaffen. ↩︎

  3. AWS ist das Angebot von Amazon für Speicherplatz, Datenbanken, Server und ganz viele andere Dinge↩︎

  4. Leider wurde hier die bekannte Schlussformel des Chaosradio nicht beachtet: “Lasst euch nicht überwachen und verschlüsselt immer schön eure Backups!” ↩︎

  5. Mmmmmmhhh, Weihnachtsgebäck 🍪 ↩︎

  6. Auch unsere Blogposts werden ausschließlich verschlüsselt übertragen, wie ihr an dem Schloss-Symbol in der Adressleiste des Browsers sehen könnt. ↩︎