Lidmaatschap Ongehoord Nederland kost 1 cent door stevige site-blunder
Omroep Ongehoord Nederland ging afgelopen week voortvarend van start met z’n ledenwerfcampagne. Het doel? 50.000 leden binnenhalen om aspirantomroep bij de NPO te worden.
Het initiatief kreeg na enkele dagen al 40.000 aanmeldingen binnen via het aanmeldformulier op de site. Toch rammelt de beveiliging van dit formulier aan alle kanten. Zo kwam Broadcast Magazine er al achter dat je met onzin-gegevens je lidmaatschap kon volbrengen.
Maar er blijkt nog meer mis te zijn: zo krijg je een lidnummer toegewezen voor de betaling is volbracht én is de site kinderlijk eenvoudig voor de gek te houden waardoor het mogelijk is om lid te worden voor slechts één cent.
Om de tuin geleid
Bij sites die betalingen incasseren is beveiliging vanzelfsprekend een essentieel onderdeel. Een belangrijk onderdeel hiervan luistert naar de zeer begrijpelijke jargonterm ‘server side validation’. In normaal Nederlands: dit is een automatische check die normaliter standaard is ingebouwd bij websites om de juistheid van ingevoerde gegevens na te gaan.
Is er in het veld ‘postcode’ een geldige postcode ingevoerd? Staat er inderdaad een datum bij het veld waarin gevraagd wordt om de geboortedatum? Zulke dingen. Mocht er iets verkeerds zijn ingevoerd, dan krijgt de gebruiker normaliter een foutmelding. Tikfoutjes overkomen immers de besten dus zo’n check is behoorlijk van belang en vrij gebruikelijk.
Dit is zeker van belang bij een inschrijvingsprocedure die aan een aantal wettelijke spelregels moet voldoen. Het ledenbestand van een omroep moet bestaan uit minstens 50.000 natuurlijke personen die ook daadwerkelijk het minimumbedrag van 5,72 hebben betaald voor hun lidmaatschap. Hier gaat echter opnieuw iets mis.
Het lek werd ontdekt door de 19-jarige student Computer Science, Kas Tuin die zijn inschrijving afrekende met 1 cent. „Normaal vindt deze check plaats voor je op de knop ‘bevestigen’ drukt, als er dan verkeerde info is ingevoerd krijg je als gebruiker automatisch een seintje. Dit doet Ongehoord Nederland dus niet. Hierdoor ‘gelooft’ de site dus alles wat je hem vertelt,” legt hij uit.
Toen de student van de Radboud Universiteit hier achter kwam, nam hij de proef op de som. „Door een vrij eenvoudige code naar de site van Ongehoord Nederland te sturen, die de site dus ook niet checkt op de juistheid, zijn hele rare dingen mogelijk. Zo kan je niet bestaande mailadressen invoeren, een leeg formulier versturen én het bedrag dat je moet afrekenen naar eigen voorkeur kan aanpassen.”
Nooit gedacht dat mijn eerste lidmaatschap naast de VI voor een rechtse omroep zou zijn. Nu maar kijken hoe er weer van af te komen… pic.twitter.com/dASGtCWj2o
— Kas (@kas_tuin) November 28, 2019
Fluitje van een cent
Tuin kon hierdoor op kinderlijk eenvoudige wijze zijn inschrijving voltooien voor slechts één cent. En het bewijs legde hij vast op film. Dat het hem lukte, verbaast hem. „Ik denk niet dat ze een expert hebben ingehuurd voor deze WordPress-site. Met WordPress kan je vrij eenvoudig een omgeving bouwen die voorzien is van een veilige aanmeld- en betaalprocedure. Dit is een hele slechte implementatie."
Een site met een betere server side validation zou het verzoek om 1 cent te betalen direct weigeren. Maar bij Ongehoord Nederland kon Tuin gewoon zijn gang gaan. Hij werd zo officieel lid van de ambitieuze omroep.
Hoe erg is dit? Als een webwinkel een soortgelijke kwetsbaarheid zou hebben, dan kon iedereen een mandje volladen met spullen van duizenden euro’s om vervolgens bij het afrekenen slechts een cent te over te maken. De server registreert de betaling en vervolgens wordt de verzending automatisch in orde gemaakt.
Waarom we hier nooit iets over horen in het nieuws? Omdat server side validation juist hierom een topprioriteit bij bedrijven die met online betaalverkeer te maken hebben. Zelfs voor kleine webwinkeltjes is het een vanzelfsprekendheid.
Goedkoop is duurkoop?
Hoogstwaarschijnlijk moet de oorzaak van de kwetsbaarheid gezocht worden bij de plug-in die is gebruikt voor het inschrijfformulier. Dit zou gaan om een zwakke en kosteloze versie die kinderlijk eenvoudig gemakkelijk om de tuin te leiden is en bovendien geen ‘ik-ben-geen-robot’-check doet. Betrouwbare WordPress-plug-in’s voor digitale inschrijfprocedures, voorzien van validatie-checks, kosten doorgaans enkele tientjes.
Kunnen er ook negatieve bedragen ingevuld worden? „Nee," benadrukt de computer science-student. „Zo’n negatieve betaling wordt geweigerd door iDeal omdat zij alleen maar overboekingen met een positief getal kunnen verwerken. Over deze fase van de transactie heeft de site van Ongehoord Nederland niet langer zeggenschap.”
De afrekening van het lidmaatschap werd volbracht via de betaaldienst Mollie. Dit is een veelgebruikte service die ervoor zorgt dat online bestellingen op een veilige gebruiksvriendelijke manier kunnen worden afgerekend via iDeal, PayPal of creditcard. Zij maken het geïncasseerde bedrag vervolgens over op de rekening van de aanbieder.
Mollie’s verdienmodel is gebaseerd op transactiekosten die in dit geval 29 cent bij elke transactie bedragen. Hierbij maakt niet uit of dit bedrag 1 of 1000 euro is. Maar wat gebeurt als het bedrag lager is dan 29 cent? Dan worden de kosten alsnog in rekening gebracht. Een inschrijving van één cent kost volgens hun algemene voorwaarden Ongehoord Nederland dus 28 cent.
Ongehoord laat zich horen
Deze bevindingen zijn voorgelegd aan journalist Arnold Karskens, initiatiefnemer van Ongehoord Nederland. „De site is gebouwd door een externe technische ploeg met ervaring op dit gebied. We zijn op de hoogte van de toewijzing van lidnummers bij onvoltooide transacties. Maar ons systeem en de teller op de site, tellen alleen de volbrachte betalingen mee. We houden bovendien een ruime marge aan van 10 tot 15 procent. Juist om rekening te houden met grappenmakers en foutjes. Je hebt altijd slimme jongens die zulke dingen proberen,” vertelt hij.
Dat de lidnummers doorlopen bij onvoltooide transacties, klopt inderdaad. De teller op de site geeft een lager getal (43.643) aan dan het toegewezen nummer van de onzin-aanmelding van dit artikel (58.583) op hetzelfde moment. Hiermee kan je concluderen dat er 14.940 voortijdig onderbroken, onzinnige of onbetaalde afmeldingen zijn gedaan: iets meer dan een kwart.
Een verklaring voor het naïeve inschrijfformulier dat het lidmaatschap van één cent goedkeurde kan Karskens niet geven. „Ik geef direct toe: ik ben een digibeet en ging er vanuit dat alles goed geregeld was. Dit moet ik echt aan de bouwers voorleggen voor ik hierop kan reageren. Maar ik wil je wel bedanken voor het aangeven.”
De initiatiefnemer houdt desondanks vertrouwen in een goede afloop. „Wij hebben tot dusver geen rare dingen gezien bij de betalingen. Dat is het belangrijkste. Door een ruime marge aan te houden halen we de 50.000 geldige aanmeldingen voor omroep Ongehoord Nederland denk ik wel. Tot nu toe gaat het erg goed, we hebben het erg druk mee. Dagelijks ontvangen we honderden telefoontjes en talloze e-mails.”