Die prijsmanipulatie bij Just-Eat

just-eat-hack-screenshot.pngHonderden studenten hebben maandenlang bijna gratis pizza’s kunnen bestellen via de website Justeat.nl, meldde Nu.nl vrijdag. Er bleek een fout in de website te zitten waardoor je eenvoudig de prijs kon manipuleren net voordat de betaalprocedure bij een externe partij in gang werd gezet. Tweakers meldt:

De kwetsbaarheid bleek ontstellend simpel te misbruiken, blijkt uit een test van Tweakers.net: het aanpassen van de html-code bleek genoeg om goedkoop pizza of shoarma te bestellen. Het lek zat bij Just-Eat op de pagina, waar de bestellingsmethode gekozen kon worden. Daar werden in verborgen input-velden de parameters voor de betaling doorgegeven, waaronder het bedrag in centen.

De reacties die ik her en der lees, zijn allemaal in de trant van “dom bedrijf, hadden ze dat lek maar moeten fiksen”. Zeker nu bekend is dat het lek al een jaar open ligt. Maar ligt dat nu aan mij of is dit gewoon crimineel?

Als je zo’n fout ontdekt en het dan meldt, dan ben je keurig bezig. Wil je het een keertje testen om zeker te weten dat die fout er (nog) in zit, nou vooruit. Maar voor 30.000 euro aan pizza’s bestellen, dat heeft toch niets meer met white-hat hacken te maken? Dat is gewoon profiteren van een domme fout.

Ik begrijp dit echt niet. Stel de supermarkt laat een prijstang onbeheerd liggen in het schap. Dan zullen er heus mensen proberen om wat goedkope prijsjes op dure producten te plakken en die te gaan afrekenen? Maar het lijkt me evident dat dat gewoon oplichting is. Waarom zou het voor hidden input fields anders zijn dan voor prijsstickers?

(Overigens heb ik nul komma nul sympathie voor directeur Laurens Groenendijk van Just-Eat die meende laatdunkend te moeten spreken van “slimste jongetjes van de klas”, terwijl het een fout die ie zelf een jaar lang heeft laten liggen. Ik hoop dat z’n rechtsbijstandsverzekeraar niet uitkeert.)

Arnoud

21 reacties

  1. Maar voor 30.000 euro aan pizza???s bestellen, dat heeft toch niets meer met white-hat hacken te maken? Het ging om studenten op 5 locaties. Waarschijnlijk waren het honderden studenten. Als elke student dan het 1 keer wil “proberen” heb je snel die 30.000 euro bij elkaar hoor.

    @Dennis: Er is iemand naar just-eat gegaan, maar die laurens groenendijk heeft ’t vervolgens nonchalant laten liggen. Ik heb zelf ook wel eens beveiligingsfouten aangemeld bij bedrijven, ze doen er gewoon niets mee tot ze een keer genaaid worden.

  2. Het droevige is dat veel IT gemaakt wordt vanuit het idee dat het goed is als het werkt. De happy flow zoals dat heet. Maar dat ligt niet alleen aan de programmeurs.

    Er speelt veel meer mee. Moderne ontwerpmethoden die alleen de happy flow specificeren, testers die stelselmatig veel te weinig tijd krijgen om het echt te testen, projectmatig werken waardoor zaken buiten scope gesteld worden (in de beginfase om de business case rond te krijgen en in de eind fase om de deadline te halen), organisaties die architectuur en structurele oplossingen te duur vinden en die van quick wins aan elkaar hangen, en een organisatie krijgt nu eenmaal de medewerkers die het verdient. Programmeurs dus die niet stoppen als het goed is maar die stoppen als het er goed uitziet.

    Ik zal wel oud worden… 😉

    En natuurlijk hebben degenen die misbruik hebben gemaakt van de situatie gewoon gestolen. En het woord hacken kun je met droge ogen alleen van toepassing verklaren op wat de ontdekker van deze “voorziening” deed. Alle anderen waren gewoon uitvreters.

  3. Arnoud, ik had begrepen dat de hoogste rekening rond de ???1200 lag; het merendeel van de rekeningen gaat om enkele tientjes: “even proberen”, maar dan wel door honderden studenten.

    @Hans, sympathie! Het zou me trouwens niet verbazen als er meer “onafhankelijke ontdekkers” van het gat waren, dit is zo’n triviaal (en bekend) veiligheidsgat.

    De door Groenendijk ingehuurde programmeurs waren incompetent. Ik weet niet of dat de enige oorzaak is dat de bug er ruim een jaar na de eerste(?) melding steeds in de applicatie zat. Heeft Groenendijk in de tussentijd de applicatie laten testen?

    Ik zou de hacker/uitvreters het advies geven om de pizza te betalen, maar de administratiekosten niet. Er is geen reden om incompetentie te belonen. (Is er een jurist een gemotiveerde andere mening toegedaan?)

  4. Dit is prutswerk van de bovenste plank. Ik hoop voor Just Eat dat ze niet veel meer dan een paar pizza’s voor dat broddelwerk hebben betaald… E?n van de hoofdregels bij programmeren, zeker als dat voor het web is: ga ervan uit dat je gebruikers kwaadwillend zijn. Ga ervan uit dat ze op elke manier zullen proberen je werk om zeep te helpen of van gaten te profiteren. Ga ervan uit dat je gebruikers je ergste vijand zijn, en dat je dus moet zorgen dat je programmatuur waterdicht is.

    Gezemel over waar het precies is foutgegaan is wat mij betreft irrelevant. Bedragen zodanig neerzetten dat je gebruiker ze kan veranderen (en dan maar aannemen dat ze ze niet z?llen veranderen) is oerstom, punt. Het is ook nog eens niet nodig.

    Ik denk verder dat dit gewoon een stukje menselijke natuur aan het werk is. Een deel van de mensheid zal keurig netjes de fout melden (wat ook gebeurd is, als ik het goed begrijp) en een deel zal er gewoon glashard ge/misbruik van maken.

    Is dat “netjes”? Niet echt, misschien, maar ik leg niet alle schuld bij de studenten die simpelweg gebruik maakten van een bekend, gemeld en niet-gedicht gat. Het grootste deel van de schuld ligt wat mij betreft bij de programmeur(s) van JustEat — die een hele belangrijke regel zijn vergeten.

    Een ander interessant puntje uit het WebWereld-artikel: men gaat achter het profiterende geboefte aan om alsnog het geld te halen. Hoe zit het eigenlijk met de juridische onderbouwing daarvan? Er is een koop gesloten, en met een beetje fantasie zou je kunnen zeggen dat J.E. (geautomatiseerd) accoord is gegaan. Of bekijk ik het dan te simpel? =]

  5. @Max R. Iemand zonder fantasie zal beargumenteren dat er sprake is van fraude of oplichting. Nu bekend is dat de bug al 14 maanden eerder gemeld is, is (naar mijn mening als software ingenieur) er sprake van nalatigheid aan de kant va Just Eat.

    Hoe los je dat als rechter op in een civiel proces? Wat doe je in een strafproces, heeft Just Eat de acties uitgelokt?

  6. Bij een civiel proces (eis tot nakoming/schadevergoeding) kan ik me voorstellen dat hier een stuk eigen schuld (art. 6:101 BW) gaat meewegen. Just-Eat zou bijvoorbeeld hooguit de prijs van de echte bestelling kunnen vorderen, maar geen administratiekosten.

    In een strafproces zou deze nalatigheid bij Just-Eat mee kunnen wegen in de strafmaat. Dan word je veroordeeld (want hoe dan ook is dit fraude/oplichting) maar de straf is bv. 4 uur werkstraf of zo. Of misschien seponeert de OvJ meteen omdat het wel duidelijk is dat dit geen hackzaak is waar hij mee kan scoren maar gewoon een domme actie van een bedrijf.

  7. Er is een koop gesloten, en met een beetje fantasie zou je kunnen zeggen dat J.E. (geautomatiseerd) accoord is gegaan.

    J-E deed een aanbod, de student wees dit af door een tegenaanbod te doen. J-E lijkt dat te hebben aanvaard.

    J-E zal moeten aantonen dat het niet hun wil was om het tegenaanbod te aanvaarden (art. 3:33 BW). Daar is natuurlijk iets voor te zeggen. De student kan dan proberen een beroep te doen op art. 3:35 BW, nl. dat hij gerechtvaardigd mocht vertrouwen dat J-E het tegenaanbod heeft willen aanvaarden. Op het eerste gezicht lijkt dat niet veel kans te maken. De conclusie is dan dat er geen koopovereenkomst tot stand is gekomen. De pizza is onverschuldigd betaald. De student dient de waarde van de pizza op het ogenblik van ontvangst te vergoeden (art. 6:210 lid 2 BW), plus wettelijke rente (art. 6:74 jo. 6:205 jo. 6:119 BW). Het gaat hierbij om de waarde van de pizza in het economisch verkeer. Die zal waarschijnlijk kunnen worden begroot op de prijs die er door J-E voor werd gevraagd.

    Het is natuurlijk geen doen om al die studenten aan te spreken (misschien uitgezonderd die student die voor ??? 1200 heeft besteld), dus J-E zal het verlies zelf moeten dragen (of dit verhalen op een eventuele externe ontwikkelaar van de website). Erg schokkend voor mijn rechtvaardigheidsgevoel vind ik dit niet.

    Hebben de studenten een misdrijf begaan? Diefstal of verduistering is het natuurlijk niet. Computervredebreuk ook niet. Alleen oplichting (art. 326 Sr, “listige kunstgrepen”) komt volgens mij in aanmerking. Maar is de pizzaverkoper die niet goed controleert wat hij voor zijn pizza krijgt betaald niet gewoon veel te goedgelovig? Art. 326 Sr is volgens de wetsgeschiedenis niet bedoeld om tegen na?viteit en goedgelovigheid te beschermen. J-E is hier de sukkel die zich bij de neus laat nemen.

    In HR 4 april 2006, LJN AU5719 (met in de conclusie van de A-G een uitgebreide verhandeling over “listige kunstgrepen”) lijkt de HR het begrip “listige kunstgrepen” echter ruimer uit te leggen dan voorheen:

    4.6. Voor wat de klacht aangaande de listige kunstgrepen betreft moet worden vooropgesteld dat de wet dienaangaande niet meer eist dan dat het slachtoffer daardoor in concreto is bedrogen. Daarbij komt het aan op alle omstandigheden van het geval, de persoonlijkheid van het slachtoffer daaronder begrepen. Gelet op de uit de gebezigde bewijsmiddelen blijkende manier waarop de verdachte en zijn mededader(s) genoemde [slachtoffer] hebben bewogen tot afgifte van geld, wetende dat het ging om “een oudere, eenzame man die de consequenties van zijn handelen niet meer voldoende overziet”, naar het Hof heeft vastgesteld, getuigt ’s Hofs oordeel dat zij listige kunstgrepen in de zin van art. 326 Sr hebben aangewend en dat dit oplichting oplevert, niet van een onjuiste rechtsopvatting.
    Misschien is J-E te vergelijken met deze “oudere, eenzame man die de consequenties van zijn handelen niet meer voldoende overziet”, en moet worden aangenomen dat de studenten dit wisten.

  8. Andere vraag: als de code door een externe partij gebouwd is, is die dan aansprakelijk voor de schade (voor zover die niet verhaald kan worden op de studenten) ?

    Ik zou denken van wel, aangezien dit toch wel bijzonder slordig is. Of zouden ze hier onder uit kunnen komen?

  9. In principe kan dat, er is een werkende site besteld en je mag verwachten dat die ook veilig is. Dus het is wanprestatie. Tenzij de algemene voorwaarden dit uitsluiten, wat mag in zakelijke relaties. Dan is de bouwer alleen aansprakelijk bij opzet of grove nalatigheid. En dat is altijd een leuke: nalatig was dit, maar grof nalatig?

  10. Kan het niet helpen om te denken aan de begindagen van het hacken, toen hacker Cap’n Crunch met een eenvoudig fluitje uit een cornflakesdoos gratis long-distance wist te bellen. Daar kijken we nu bijna weemoedig naar terug (’those were the days’), niet op z’n minst omdat Steve Jobs en Steve Wozniak (oprichters Apple) tijdens hun studie met een vergelijkbaar foefje wat bijverdienden. De geschiedenis wordt geschreven door winnaars, dus wellicht herinneren we ons deze jongens over twintig jaar ook op een heel andere manier… nu zijn het (volgens de letter der wet) criminelen, maar als ze in de toekomst maar genoeg presteren vergeven we ze wel.

    Meer ontopic: zo’n lek ontdekken is nauwelijks een grote uitdaging. Maar het niet opmerken of ingrijpen door Just-Eat is wat mij betreft net zo fout als het gedrag van de ‘hackers’ in kwestie. Je auto, ondanks waarschuwingen (van de dief zelf of anderen), toch ’s nachts open laten met de sleutel in het slot praat niet goed dat ie uiteindelijk toch echt gestolen wordt. Je kunt aangifte doen van diefstal, maar je verzekeringsmaatschappij betaalt niet uit.

    Stukje historie, voor wie het interesseert: http://www.neatorama.com/2006/08/28/a-short-history-of-hacking/

  11. @9 Erik. Ik zou in de specs kijken. Als daar in staat dat het “veilig” moet zijn (heel veel meer zal er wel niet staan over dit aspect) dan schiet de externe partij blijkbaar tekort. In het andere geval wordt het een rondje “wat gebruikelijk is”, denk ik. En ’t is pijnlijk, maar ik ben bang dat gebruikelijk is dat dit soort fouten er nog in zitten.

    Los daarvan hoeft het natuurlijk ook niet zo te zijn dat een externe partij de site gemaakt heeft. Het kan net zo goed de buurjongen van de eigenaar geweest zijn. Of ben ik nu TE cynisch? 😉

  12. Is dit wel zo illegaal als het lijkt,

    In de supermarkt vergelijking zou ik het zo schetsen :


    Ik reken een mand met boodschappen af bij de kasse

    “dat is dan 100 euro” geeft de kassiere aan.

    Ik geef haar een 10tje,

    “tot de volgende keer !”, geeft de kassiere aan, en begint de volgende klant te helpen.

    Het is volgens mij niet alleen het Ideal gebeuren, Ideal zal de site een seintje geven, “er is 15 cent betaald voor bestelling X”

    Als JustEat akkoort gaat met de levering dan accepteren ze toch dat het bedrag voldaan is ? dat ze niet controleren hoeveel ze krijgen is volgens mij hun eigen probleem, net als de kassiere.

    ALhoewel ik het er niet mee ben dat er misbruik van wordt gemaakt denk ik wel dat het hun eigen schuld en verantwoordelijkheid is om te controleren hoeveel geld er is afgerekend.

  13. @kaas, nee, die vergelijking zou opgaan als Ideal, door een fout in haar software, klanten te weinig afrekende zonder dat die klant daar iets voor hoefde te doen. Een betere vergelijking zou zijn dat je bewust de meeste boodschappen in je mandje liet zitten. Als de kassier(e) dat dan niet opmerkt en je veel te weinig afrekent ben je nog wel fout.

  14. @10: Dit lijkt me zeker grof nalatig. Als je iets als dit bouwt als professionele ontwikkelpartij, dan doe je dat willens en wetens om snel af te ronden en de weg van de minste weerstand te kiezen. Je bent je als ontwikkelaar absoluut bewust van de gevaren als je op deze manier een betaalproces bouwt.

    De “handige buurjongen” die hierboven genoemd werd is overigens ook een optie. Als je bedenkt dat ze net een redesign hebben doorgevoerd wat vol bugs zit in alle browsers behalve IE, dan ben je in ieder geval niet met een professionale partij in zee gegaan die er marktconforme ontwikkelmethodes op nahoudt.

  15. @Roy, 15: Incompetentie is goed voor de economie, de klant mag extra betalen voor het verhelpen van de bugs en wat er daarna staat is zo goed dat het binnen twee jaar vervangen moet worden, wat weer een leuke klus oplevert voor een bedrijf. Als softwareontwikkelaar moet je blij zijn dat je zoveel incompetente collega’s hebt, ze zorgen ervoor dat jij werk houdt. Als je een beetje opleiding genoten hebt: in het land der blinden…

    *MathFox maakt excuses aan de visueel gehandicapten.

  16. De vergelijking van #13 vind ik zo slecht nog niet. Het bezwaar van #14 gaat niet op, aangezien JE wel degelijk wist wat er besteld werd en er nergens producten stiekem werden meegenomen (dat kan ook niet vanwege de thuisbezorging). Het heeft hier veel weg van afdingen, JE is alleen zo dom om automatisch met elke afdinging akkoord te gaan.

    Zolang het geen verbaal geweld (SQL-injecties e.d.) is, dan moet je toch tegen een kassi?re (website) kunnen zeggen wat je wilt. De reactie van de kassi?re daarop, is verantwoordelijkheid van de supermarkt (JE).

    En dan is er nog de vraag: ben je strafbaar als je een browser gebruikt die het type-attribuut van het input-element niet ondersteund (waardoor het type de standaardwaarde text krijgt en de prijs bewerkbaar wordt)?

  17. Ik zie toch wel een wezenlijk verschil tussen een cassi?re en een website. Een website is een dom ding dat alleen verwerkt wat er binnenkomt. (Geen grappen over blonde kassajuffen graag.) De cassi?re kan dingen controleren, van hem/haar mag je dat ook verwachten. Als ik appels afreken met een sticker voor bananen, hoort zij daar iets van te zeggen.

    Ik zie het meer als zo’n zelfscanwinkel waarbij je door een poortje loopt en alles via RFID gescand wordt. Het is niet de fout van de scanner als ik een product in aluminiumfolie wikkel zodat het niet gescand wordt.

    Als jouw browser toevalligerwijs iets niet ondersteunt, dan kom je er wel mee weg denk ik. Maar het is net zoiets als “ik had even geen mandje dus ik dacht ik stop het in mijn rugzak die toevallig gevoerd is met aluminiumfolie maar ik wilde heus wel betalen hoor”; je hebt de schijn tegen je.

  18. Dat de website een dom ding is: zo heel moeilijk is het nou ook weer niet (voor deze programmeurs blijkbaar wel) om hem zo goed te programmeren dat hij slim genoeg is voor het correct afhandelen van betalingen. Blijkbaar dachten ze wat kosten te besparen door een blonde kassajuf domme kassi?re die met alle afdingpogingen akkoord gaat in dienst te nemen in plaats van fatsoenlijk opgeleid personeel. Eigen risico van de onderneming.

    De vergelijking met het uit een winkel smokkelen van producten gaat niet op want JE wist precies hoeveel pizza’s ze bezorgden. Dat ze dat voor een veel te lage prijs deden, is geautomatiseerde domheid.

    Als je appels afrekent met stickers voor bananen en dat wordt geaccepteerd door de kassi?re, wiens verantwoordelijkheid is dat dan? Dat is de hamvraag. Ik vind ook dat deze studenten strafbaar moeten zijn, maar dan omdat afrekenen met 1 cent per pizza toch wel wat vraagtekens in hun hoofden had moeten opleveren: het afdingen (wijzigen van de prijs) op zich is dan niet verkeerd maar wel als je dit buiten alle proporties doet. Ik vind dus dat beide partijen deels verantwoordelijk zijn. Waar de grens ligt, is aan de rechter.

  19. Ik blijf erbij dat je een website niet kunt vergelijken met een kassajuf. Een website kan niet detecteren dat iemand rare trucs uithaalt, een kassajuf wel. Daarom kun je uit een acceptatie door een geautomatiseerd systeem niet afleiden dat de winkel akkoord was.

    In de Otto-zaak werd bv. een automatische bevestigingsmail niet geaccepteerd als bewijs dat er een koopovereenkomst was. Het systeem bevestigde gewoon wat er was gebeurd, maar dat was wezenlijk iets anders dan een winkelier die zegt “we hebben een deal.”

  20. Los van het feit of het juridisch fout was — ik ben het daarin wel met Arnoud eens — vind ik het ook ethisch dubieus om dit vaker dan één keer (om te testen en vervolgens het bedrijf te waarschuwen) te doen. Er zijn genoeg situaties waarin diefstal eenvoudig wordt gemaakt en vaak is het ook gewoon eenvoudig te voorkomen (fiets die niet op slot staat, achterdeur van huis/winkel die gewoon open staat) en ik hoop toch niet dat we dan maar vinden dat het daarom dus geen probleem is.

Geef een reactie

Handige HTML: <a href=""> voor hyperlinks, <blockquote> om te citeren, <UL>/<OL> voor lijsten, en <em> en <strong> voor italics en vet.