Über unsMediaKontaktImpressum
Björn Kimminich 19. April 2016

Juice Shop - Der kleine Saftladen für Sicherheitstrainings

Auf den ersten Blick sieht der Juice Shop aus wie ein kleiner, unscheinbarer Online-Shop für Fruchtsäfte und andere Artikel – inklusive Benutzerregistrierung, Artikelsuche, Rabatt-Coupons und Feedbackfunktion. Bei genauerer Betrachtung fällt jedoch auf, dass viele dieser Funktionen schwerwiegende Sicherheitslücken aufweisen. Da werden plötzlich Bestellungen mit negativem Gesamtpreis möglich, die Artikelsuche liefert statt O-Saft nun alle Kundendaten (samt verschlüsselter Passwörter) zurück und man kommt an Bereiche der Anwendung heran, auf die ein normaler Kunde eigentlich keinen Zugriff haben sollte. Was für ein sprichwörtlicher Saftladen!

Zur Ehrenrettung: Der Juice Shop ist absichtlich so unsicher, denn er wurde von mir als Open Source-Projekt entwickelt, um Softwarentwicklern, -testern, Web-Admins aber auch IT-Managern die geläufigsten Schwachstellen von Webanwendungen vorzuführen oder sie in "Hack-it-yourself"-Sessions selbst ausprobieren zu lassen! Dieser Artikel stellt den Juice Shop kurz vor und motiviert Sie hoffentlich, ihn für einen eigenen Hacking-Ausflug oder ein entsprechendes Event mit Ihren Entwicklerteams zu verwenden.

Die Architektur

Der Juice Shop wurde komplett in Javascript entwickelt. Zum Einsatz kommen AngularJS [1] für das Single-Page-Application Frontend sowie Express [1] aufgesetzt auf NodeJS [1] für das RESTful Backend. Die Datenhaltung erfolgt in einer simplen dateibasierten SQLite [1] mit Sequelize [1] als objekt-relationales Mapping-Framework. Ein Teil der REST-API wird dynamisch (und ziemlich unsicher was Autorisierung angeht) von sequelize-restful [1] generiert.

Die Shop-Funktionalität ist Frontend- und API-seitig komplett mit Unit Tests auf Basis von Jasmine[1], Karma [1] und Frisby.js [1] abgedeckt. Diese stellen sicher, dass der Shop für alle freundlich gesonnenen Saft-Kunden tatsächlich funktioniert. Nun sind diese Kunden jedoch nicht die eigentliche Zielgruppe des Juice Shop. Daher testen die deutlich umfangreicheren Ende-zu-Ende-Tests auch weniger die Funktionalität, sondern vielmehr die Unsicherheit der Anwendung. Jeder dieser – mit Hilfe von Protractor [1] implementierten – Tests prüft eine der aktuell 28 absichtlichen Schwachstellen auf Ausnutzbarkeit. Bei Interesse finden Sie detailliertere Informationen zu diesem ungewöhnlichen Test-Szenario in meinem Gast-Beitrag auf dem offiziellen Sauce Labs Blog.

Die Schwachstellen

Die Schwachstellen und Sicherheitslücken des Juice Shop sind vielfältiger Natur. Zunächst wären da natürlich "Klassiker" aus der bekannten OWASP Top 10-Liste [2]:

  1. Mittels SQL Injection [3] lassen sich die Benutzeranmeldung austricksen und sensitive Informationen direkt aus beliebigen Tabellen der Datenbank abgreifen.
  2. Die Authentifizierung und die Session-Verwaltung bestehen aus lausig selbst programmierten Sicherheitsfunktionen sowie völlig unsicher eingesetzten Standards.
  3. Cross-Site Scripting (XSS) [4] ermöglicht das sofortige oder verzögerte Ausführen beliebiger schädlicher Javascripts im Kontext der Anwendung.
  4. Datenobjekte und auch Dateien werden direkt von der Anwendung referenziert, ohne dass eine solide Berechtigungsprüfung erfolgen würde, was einem unkontrollierten Vollzugriff auf alle Anwendungsdaten gleichkommt.
  5. Eingesetzte kryptografische Funktionen (wie z. B. bei den Rabatt-Coupons) werden hoffnungslos falsch verwendet oder sind unsicher konfiguriert.
  6. Die Anwendung posaunt sensitive Informationen völlig arglos in die Welt hinaus, z. B. in Form von technischen Fehlermeldungen oder dem Ablegen von geheimen Dokumenten in ungeschützten Bereichen der Applikation.
  7. Statt kritische Bereiche wie den Administrations-Dialog vernünftig gegen unerlaubten Zugriff abzusichern, verlässt sich der Juice Shop auf ein klassisches Security-by-Obscurity-Antipattern [5]: Verstecken statt schützen!
  8. Der Shop ist anfällig gegen die gefährliche Cross-Site Request Forgery (CSRF)-Attacke [6], welche einen Angreifer unbemerkt im Hintergrund das Passwort jedes angemeldeten Benutzers ändern lässt, der sich versehentlich auf einen entsprechend präparierten Feedback-Eintrag oder ein untergejubeltes Produkt begibt.
  9. Etliche der eingesetzten Javascript-Module im Juice Shop sind veraltet, bekanntermaßen unsicher oder mit Versionsnummern von 0.0.x schlichtweg noch nicht produktionsreif.
  10. Eine auf den ersten Blick gut abgesicherte Funktion zum Weiterleiten auf externe URLs entpuppt sich bei näherer Betrachtung als leicht zu umgehen, was die Umleitung auf Malware-Webseiten erlauben würde.

Darüber hinaus gibt es noch einiges mehr zu entdecken, zum Beispiel:

  • einige Lücken in der Ablauflogik des Bestellprozesses,
  • ein eigentlich längst nicht mehr erhältliches Weihnachts-Sonderangebot,
  • ein alternatives Layout wie zu hässlichsten GeoCities-Zeiten oder
  • zwei sogenannte Easter Eggs der Entwickler - eines davon dank three.js [1] sogar in 3D!

Damit der angehende Hacker den Überblick nicht verliert und für seine Erfolge – ganz im Sinne von Gamification [7]– belohnt wird, gibt es im Juice Shop eine Punkteübersicht, welche alle Schwachstellen auflistet und mitverfolgt, ob diese bereits erfolgreich ausgenutzt werden konnten. Diese Punkteübersicht im Shop überhaupt zu entdecken, ist übrigens bereits eine (einfache) der 28 Herausforderungen. Die übrigen Schwachstellen bilden vom Schwierigkeitsgrad eine große Bandbreite ab. Es gibt Sicherheitslücken, die sich direkt und einfach auszunutzen lassen, und solche, bei denen erst eine mehrstufige Recherche innerhalb und außerhalb der Anwendung Erfolg verspricht. Bei meinen bisherigen Security-Trainings und Hacking-Events mit dem Juice Shop hatten sowohl Anfänger als auch gestandene Security-Profis stets genug zu tun und Frustration bzw. Unterforderung kamen selten auf.

Hack-it-yourself

Wenn Sie Lust bekommen haben, sich einmal selbst als Hacker einer Webanwendung zu versuchen, installieren Sie sich den Juice Shop einfach auf Ihrem Rechner. In der Installationsanleitung finden Sie alle nötigen Informationen, um die Anwendung lokal auf NodeJS oder als Docker-Container zum Laufen zu bekommen. Juice Shop läuft gleichermaßen auf Windows, Linux und MacOS. Wer ihn lieber in der Amazon-Cloud deployen möchte, findet auch entsprechende Installationstipps. Von großflächigen "Brute Force" oder "Denial of Service"-Angriffen gegen eine AWS-Instanz rate ich jedoch dringend ab, da sich Amazon als Provider ggf. angegriffen fühlen könnte. Für solche Hacks beschränken Sie sich am besten auf eine lokal laufende Instanz des Juice Shop.

Sollten Sie Unterstützung bei der Installation benötigen oder einen (nicht absichtlich eingebauten) Fehler in der Anwendung finden, helfe ich gerne. Bei nicht in den FAQ aufgelisteten Problemen nutzen Sie gerne den offiziellen Chat oder melden Bugs gern auch direkt als GitHub Issue.

In diesem Sinne: Viel Spaß beim Shoppen im "most trustworthy online shop out there" [8]! Das Teilen von Screenshots Ihrer Hacking-Erfolge (bitte ohne Spoiler) mit dem Hashtag #juiceshop ist explizit erlaubt!

Gratis Laptop-Sticker für Kontributionen

Wenn Sie den Juice Shop Ihrerseits bei der Weiterentwicklung oder Fehlerbehebung unterstützen möchten: Es gibt immer etwas zu tun! Schauen Sie gerne bei GitHub nach offenen Issues, besonders gerne nach solchen mit "help wanted"-Label.

Für Pull Requests aber auch gute Ideen zur Verbesserung, neue Herausforderungen usw. winkt ein gratis Satz offizieller Juice Shop-Laptop-Sticker! Per Post, egal von wo auf diesem Planeten Sie eine Kontribution beisteuern! (Bis dato reisten schon Aufkleber nach Deutschland, Schottland und Australien!) Wenn sich jemand berufen fühlt, den Juice Shop auf Angular2 zu migrieren, würde ich sogar eine Juice Shop-Tasse drauf legen!

Autor

Björn Kimminich

Björn Kimminich ist seit über 15 Jahren in der Softwareentwicklung tätig und verantwortet mittlerweile den Bereich Globale IT Architektur in einem großen Unternehmen.
>> Weiterlesen
botMessage_toctoc_comments_9210