
Im Rahmen eines durchgeführten Penetrationstests für einen Kunden hat Vater IT eine Sicherheitslücke in der E-Commerce-Lösung Shopware aufdecken können, die ab Shopware 6.1.x auftritt. Shopware wird von vielen namhaften Unternehmen als Webshop-Lösung genutzt und basiert auf einem Open-Source-Projekt (https://github.com/shopware/).
Im Folgenden erfahren Sie, wie diese Sicherheitslücke aufgedeckt werden konnte, wodurch sie sich auszeichnet und dass „Security by obscurity“ in keiner Weise als Sicherheitskonzept anzusehen ist!
Im Rahmen eines für unseren Kunden durchgeführten Penetrationstests war es möglich, über zwischengespeicherte Bestellungen von Gastbenutzern an deren persönliche Informationen zu gelangen, diese zu manipulieren sowie deren Bestellung zu wiederholen.
Die Ausnutzung der Schwachstelle ist trivial, aber das Auffinden der entsprechenden Webadresse (URL) zur zwischengespeicherten Bestellung nicht und führt zu einem erheblichen Informationssicherheitsproblem.
Durch den Aufruf von zwischengespeicherten Bestellungen über die URL http[s]://<shopname>/account/order/<32-Zeichen Random-String* -> deepLinkCode> werden Bestellungen offen einsehbar gemacht. Zu diesen Bestellungen erfolgt eine Verknüpfung Ihrer persönlichen Daten:
Die personenbezogenen Daten (Name, Rechnungs-, Liefer- & E-Mailadresse), Zahlungsarten und Bestellungen befinden sich nach Absetzen des o.g. GET-Requests im freien Zugriff. (Siehe auch Funktion „load()“ in der AccountOrderPageLoader.php (Zeile 63ff.) und OrderRoute.php (Zeile 103ff.): /src/Storefront/Page/Account/Order/AccountOrderPageLoader.php und src/Core/Checkout/Order/SalesChannel/OrderRoute.php.)
Zudem können diese Daten von Aufrufenden geändert werden. Eine Authentifizierung beim Zugriff ist nicht gegeben, da folgende Antwort-Cookies in Kombination mit dem Abruf des Access-Keys unter /api-access beim Seitenaufruf zurückgegeben werden:
Offenbar werden die relevanten Cookies (sw-states) für den Seitenzugriff mit der entsprechenden Webseite (o.g.) gespeichert. Laut Shopware Support ist dies z.B. bei Gastkonten mit einer Laufzeit von 30 Tagen der Fall.
Darüber hinaus wird der üblicherweise im Pfad /api-access bei Shopware publizierte und damit freizugängliche Access-Key für den Abruf der Bestelldaten genutzt.
Nach Erraten oder Auslesen der Webadresse (z.B. aus Logs) war der Zugriff auf das Benutzerkonto im Test ohne weitere Schutzfunktion per einfachem GET-Request möglich:
Fälschlicherweise kann nun davon ausgegangen werden, dass es sich hierbei um einen 32 Zeichen langen Zufallswert aus Groß- und Kleinbuchstaben, Zahlen und den Zeichen „_“ und „-“ handelt, was bei einem Angriff mittels Brute-Force-Browsing 6432 zu ratende Kombinationen bedeuten und mehrere Jahre andauern würde. Jedoch kommt eine echte Zufälligkeit in der Programmierung nicht vor.
Über ein nicht gesichertes und frei zugängliches Web-Statistik-Tool (AWStats) konnten in 157 zugänglichen URLs mit Bestell- und Personendaten folgende Häufigkeiten durch Vater IT ermittelt werden, die die Anzahl der Brute-Force-Kombinationen reduzieren:
Ein Brute-Force-Angriff mit den in Abbildung 3 genannten reduzierten Variationen an Zeichen im 32-Zeichen-String (deepLinkCode) konnte im Penetrationstest von Vater IT in wenigen Tagen einen Treffer erzielen. Die Funktion, die den 32-Zeichen String ermittelt, ist in der Random.php (Zeile 39ff. und 58ff.) von Shopware zu finden.
Über die getInterger() Funktion (Zeile 36 Random.php) kommt die zufällige Zeichenanordnung im deepLinkCode.
*Variable deepLinkCode wird für diverse Funktionen in Shopware genutzt (siehe u.a. Zeile 65ff. src/Storefront/Page/Account/Order/AccountOrderPageLoader.php )
Warum ist ein 32 Zeichen Zufalls-String keine Sicherheitsfunktion zum Schutz personenbezogener Daten?
Die Annahme, dass der 32 Zeichen lange Zufallsstring wie ein gleichartig langes Passwort schützt, ist aus den folgenden Gründen nicht korekt:
Die zuvor genannten Gründe zeigen, dass die Nutzung einer auf „Verstecken“ basierenden Technik (Security by obscurity) als Sicherheitskonzept nicht geeignet ist.
Das OWASP hat diesen Entwicklungsfehler deshalb als Schwachstelle eingestuft: Information exposure through query strings in url | OWASP
Wie können Sie Ihren eigenen Shopware Shop bzw. die Daten Ihrer Kunden schützen?
Die Sicherheitslücke wurde am 22.11.2020 an Shopware gemeldet.
Die Shopware AG hat das notwendige Sicherheitsupdate 12/2020 (shopware.com) zum 14.12.2020 erstellt. Dieses Update soll ein zusätzliches geheimes Authentifizierungsmerkmal beim Aufrufen des Links abfragen.
Werten Sie Ihre Webseiten-Statistiken (z.B. Exit-Pages mit URL) aus und prüfen Sie, wer auf diese Statistiken Zugriff hat. Hier besteht die Möglichkeit, dass die URLs offen einsehbar sind und somit auf die Bestell- und Kontodaten zugegriffen werden kann.
Prüfen Sie zudem, wer Zugriff auf die Access-Logs des Webservers hat, da auch in den Logs die besagten Webadressen enthalten sind. Sollten Sie nach Auswertung der Logs Anhaltspunkte erhalten, dass Unberechtigte bereits auf die URLs zugegriffen haben, kontaktieren Sie umgehend Ihren Datenschutzbeauftragten.
Dies gilt insbesondere bei Webshops, die neben einfachen personenbezogenen Daten auch besonders schützenwerte Daten (z.B. Bestelldaten zu Arzneiprodukten) verarbeiten, da es sich beim Zugriff durch Unberechtigte um einen meldepflichtigen Datenschutzvorfall handeln kann.
Sie haben Fragen zum Thema Informationssicherheit und Datenschutz oder wünschen eine individuelle Beratung? Unser Experten-Team von Vater IT unterstützt Sie gern.
Vater Solution GmbH
Mail: solution(at)vater-gruppe.de
Tel. +49 431 20084-203
Erfahren Sie mehr zum Thema Informationssicherheit: https://www.vater-it.de/informationssicherheit