Jeder kennt die Leergutautomaten in unseren Supermärkten. Sie stehen halb versteckt in einer Ecke, sammeln alte Flaschen ein und machen dadurch die Umwelt ein Stück besser. Wer hätte gedacht, dass es sich bei ihnen um wahre Goldesel handeln könnte?

Es ist so einfach wie das Einmaleins. Man legt die Flasche in den Automaten, der Automat bestimmt einen Geldwert und wenn man fertig ist, wird ein Kupon mit einem Barcode ausgedruckt, den man bei der Kassa einscannen kann. Aber woher weiß das Kassensystem wie viele Flaschen man zurückgebracht hat und welchen Geldwert es abziehen soll? Ist der Leergutautomat mit dem Kassensystem verbunden und schickt er den genauen Betrag im Hintergrund das Kassensystem? Wenn ja, wie kann ein Kupon nach mehreren Wochen immer noch einlösen? Werden diese Daten bis zur Verwendung aufbewahrt?

Die Antwort für diese letztere Frage ist (leider) nein. Tatsächlich wird der Betrag ungeschützt im Barcode hinterlegt. Auf dem folgenden Bild sieht man einen Beispielkupon.

In diesem Barcode sind mehrere Informationen enkodiert, von denen einige zum Zeitpunkt des Schreibens dieses Blogartikels unbekannt sind:

  • 22630000 – unbekannt jedoch vermutlich Filialen-ID oder Gerät-ID
  • 33010 – unbekannt jedoch vermutlich Filialen-ID oder Gerät-ID
  • 33862 – Bon-ID (eigentlich Bon-ID plus 1, da rechts oben eine andere Bon-ID gedruckt wurde)
  • 00018 – Leergutwert in Cent

Da es keine Sicherheitsmechanismen, wie kryptographische Signaturen oder Verschlüsselung, verwendet werden, kann man an dieser Stelle versuchen solche Barcodes zu fälschen. Mittels Smartphone-Apps lassen sich solche Barcodes einscannen und editieren. Da man für den Leergutwert 5 Zeichen hat, kann man theoretisch einen Bon bis zu einem Wert von €999,99 ausstellen.

Doch wie kann ein solcher Bon eingelöst werden? Normalerweise gibt man den Kupon dem Kassenmitarbeiter, der einen Barcode am Handydisplay wohl nicht akzeptieren wird. Mit einem Thermodrucker und ein wenig mehr Aufwand, lässt sich dieses Problem jedoch lösen.

Alternativ nutzt man eine Selbstbedienungskasse. Beim Einlösen verlangt das Kassensystem zwar, dass der Bon gescannt und dann eingeworfen wird. Hier genügt jedoch ein einfaches Blatt Papier. Der Barcode kann zuvor vom Telefon gescannt werden und wird vom Kassensystem ohne Weiteres akzeptiert.

Diese Schwachstelle wurde im Zuge eines Responsible-Disclosure-Prozesses an die betroffenen Lebensmittelhandelsketten gemeldet.