Tryption.ch

Pentesting & Consulting

Gratis Zugtickets im SBB-Webshop – So war’s möglich

Hallo! In diesem Artikel berichte ich über eine Sicherheitslücke im SBB-Webshop, die es ermöglichte, gratis Tickets zu „kaufen“. Dafür brauchte man nur einen Rabattcode der SBB und ein Handy.

Gefunden habe ich die Lücke spät an einem Abend im April, als ich die Tickets an die SmartSuisse 2019 kaufen wollte. Benutzt habe ich den Webshop vorher noch nie (mit dem Automaten geht’s einfach schneller…). Jedoch gab es 20% Rabatt auf die Anreise an die SmartSuisse per Zug; Natürlich nur einlösbar im Webshop. Also ran an den Computer und schnell ein Ticket bestellen – dachte ich mir. Aber so einfach war es dann doch nicht, denn Basel, Messeplatz ist nicht gleich Basel. So verbrachte ich den restlichen Abend damit, eine Verbindung zu suchen, für die der Rabattcode verwendet werden kann.

Ein Ticket im SBB-Webshop mit einem zu tiefen Preis
Das war das Giveaway
(Dieses Bild stammt aus einem Nachtest)

Doch plötzlich: Was ist denn da passiert?

Bei der Kostenaufstellung wurde plötzlich ein viel zu tiefer Gesamtpreis angezeigt. Der Grund: Der Webshop hat den Rabatt nicht für die neu ausgewählte Verbindung ausgerechnet. Es wurde einfach der Rabatt der Verbindung abgezogen, bei der der Rabattcode eingelöst wurde.

War die erste Verbindung teurer als die Zweite, erhielt man also einen zu hohen Rabatt und ein zu günstiges Ticket.

Der Kaufvorgang

Nur, weil der Preis falsch angegeben wird, heisst das noch nicht, dass das Ticket mit dem tieferen Preis tatsächlich gekauft (und die Sicherheitslücke ausgenutzt) werden kann. Herausfinden liess sich dies mit einem simplen Testkauf.

Und tatsächlich: das Ticket mit dem zu günstigen Preis liess sich problemlos kaufen und herunterladen.

Ausnutzen der Sicherheitslücke

Zuerst war ich mir nicht ganz sicher, wie sich der Fehler reproduzieren lässt. Nach ein paar Minuten ausprobieren war die Lösung jedoch gefunden (siehe auch auf dem Video unten):

  • eine teure Verbindung auswählen
  • Rabattcode einlösen
  • Zur Startseite des Webshops wechseln (nicht per Link im Webshop, sondern durch das Verändern des Links im Webshop; ansonsten wird die Sitzung erneuert und der Rabatt gelöscht)
  • Eine günstigere Verbindung auswählen
  • Zum Kauf fortschreiten
  • Bezahlen
  • Fertig

So einfach war’s!

Weitere Tests

Doch was passiert, wenn der Preis negativ oder gleich Null ist? Auch hier: Probieren geht über Studieren.

Ein Ticket im SBB-Webshop, dessen Preis negativ ist
So sieht es aus, wenn der Rabatt höher ist als der Ticketpreis

Negative Preise werden zwar angezeigt, versucht man jedoch, das Ticket zu „kaufen“, wird eine Fehlermeldung angezeigt. Vermutlich, weil der Zahlungsprovider keine Rückzahlungen über diesen Weg vorgesehen hat (was auch keinen Sinn machen würde).

… und endlich, das Gratisticket

Ein Ticket im SBB-Webshop, das aufgrund dem Ausnutzen einer Sicherheitslücke gratis ist.
So sieht ein Gratisticket aus (Siehe auch Video unten)

Und wie versprochen: Das Gratisticket. Wählt man die erste Verbindung geschickt (an dieser Stelle musste man ein bisschen ausprobieren), erhält man einen Rabatt, der dem Preis des gewünschten Tickets entspricht.

Hat man zum Beispiel als erste Verbindung Basel -> Bellinzona ohne Halbtax ausgewählt, erhielt man mit dem 20%-Rabattcode eine CHF 16 Vergünstigung. Änderte man nun die Verbindung auf Biel -> Basel (Normalkosten CHF 16), ergab der Endpreis CHF 0.

Dargestellt wird dieses Vorgehen in folgendem Video:

Mit diesem Vorgehen liessen sich so dann Tickets kostenlos bestellen. Die Zieldestination und das Datum liessen sich auch beliebig aussuchen.

So, das war’s schon mit dem technischen Teil. Vielen Dank an alle anderen Beteiligten, die die Sicherheitslücke so souverän und schnell behoben und mir auch noch eine kleine Überraschung bereitet haben.

Die Lücke habe ich einen Tag nach dem auffinden per Mail an der IT-Sicherheitsabteilung der SBB gemeldet und auch noch an einer kleinen Privatvorstellung an Andreas Meyer vorgeführt (an der SmartSuisse; hingereist bin ich übrigens mit einem zweiten Ticket, für das ich den vollen Preis bezahlt habe).

Beitragsbild by 🇨🇭 Claudio Schwarz | @purzlbaum

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.