BNR Nieuwsradio: Bedrijf achter online VVD-voorzitterschapsverkiezing heeft beveiliging en privacy niet op orde

Vorige week werd ik gebeld door Eric van den Berg, onderzoeksjournalist bij BNR Nieuwsradio. Hij vroeg zich af hoe veilig de online VVD-voorzitterschapsverkiezing is. Deze week kunnen VVD-leden via een website stemmen wie hun nieuwe voorzitter zou moeten worden. De website waarmee online gestemd kan worden is gebouwd door softwarebedrijf Inkesta.

Inkesta is een bedrijf met zes medewerkers en verzorgt online verkiezingen voor bijvoorbeeld ondernemings-, medezeggenschaps- of ledenraden. Zeker na de zeer discutabele CDA-lijsttrekkersverkiezingen in 2020 is de vraag van BNR terecht of deze belangrijke interne VVD-verkiezing wel zorgvuldig en democratisch verloopt. Ik besloot daarom om vluchtig en oppervlakkig de ICT-infrastructuur van Inkesta te analyseren op beveiligings- en privacyrisico’s.

BNR-verslaggever Martijn de Rijk kwam bij me langs om dit proces mee te maken:

Het BNR-ochtendnieuwsbulletin besteedde aandacht aan de resultaten:

Benieuwd naar alle bevindingen van het onderzoek?

Veiligheid & privacy is voor Inkesta prioriteit nummer 1
Het eerste startpunt daarvoor is de Inkesta-marketingwebsite die bereikbaar is via www.inkesta.nl. Op de website staat dat beveiliging en privacy binnen het bedrijf de hoogste prioriteit heeft:

  • “[..] Onze systemen voldoen aan de hoogste veiligheidseisen. [..] Onze dienstverlening, een digitale verkiezing of enquête wordt uitgevoerd op een streng beveiligde webserver [..] Voor Inkesta heeft het beveiligen van het systeem, net als het waarborgen van eerlijke en anonieme verkiezingen, de hoogste prioriteit. Wij hanteren zeer strikte privacy regels. [..] Aangezien de veiligheid en de privacy voor Inkesta altijd al prioriteit nummer 1 heeft, verandert er in de werkwijze van Inkesta niks [sinds AVG introductie, red.]. Wij voldoen aan alle eisen die de AVG stelt. [..]”

Zo te lezen hebben ze volgens hunzelf alles helemaal op orde, maar is dat ook zo?

Inkesta-marketingwebsite bevat meerdere beveiligingslekken
Het viel me al direct op dat de webserver waar de marketingsite op draait alle bestanden in een bepaalde map op de server laat zien. Zo zijn alle uploads die via het websitebeheersysteem (WordPress) zijn geüpload inzichtelijk voor iedereen (via een open directory):

Toen ik door wat mapjes heen klikte van geüploade bestanden, viel het me al meteen op dat meerdere vertrouwelijke bestanden van Inkesta-klanten ongeautoriseerd inzichtelijk waren:

  • Zo was een 32 pagina tellende akte van statutenwijziging van de Koninklijke Nederlandse Maatschappij ter Bevordering der Pharmacie inzichtelijk.
  • Daarnaast was een 15 pagina tellend document te downloaden waarin de onderhandelingsresultaten van de NS CAO voor 2022-2023 te downloaden was, inclusief 7 handtekeningen van ondertekenaars.

Waarschijnlijk is over acceptatie van bovenstaande documenten gestemd door belanghebbenden via de Inkesta-stemsoftware.

Aanvullend waren ook alle documenten (100+ pagina’s) te downloaden wat een stagiair vorig jaar in opdracht van Inkesta geschreven heeft over nieuw te ontwikkelen stemsoftware. Saillant detail is dat logo’s en de casus van de VVD gebruikt werden om het prototype van deze software vorm te geven.

Daarnaast:

  • Zijn beveiligingsupdates voor de website (PHP, Apache, OpenSSL en jQuery) meerdere jaren niet geïnstalleerd;
  • Draait de webserver nog in debugmodus (PHP-foutmeldingen en TRACE-methode ingeschakeld);
  • Google Analytics en software van Hotjar is actief, terwijl hierover niets is vermeld in het privacybeleid. De website voldoet daarmee niet aan de AVG en verstuurt illegaal bezoekersdata naar de Verenigde Staten.
  • Het WordPress-inlogscherm is te benaderen;
  • Gebruikersnamen hiervoor zijn te achterhalen;
  • Versienummers van gebruikte software worden getoond:
  • Geen enkele security header is gezet.

Volgens de Inkesta-website hebben zij in juni 2020 voor het laatst een beveiligingstest uitgevoerd. Dat is wel weer even geleden. Volgens Inkesta is de marketingsite buiten scope van die pentest geweest. Het is verstandig om alle internet-facing Inkesta-infrastructuur en -websites minimaal één keer per jaar aan een gedegen beveiligingstest te onderwerpen, en zeker ook na doorvoering van ingrijpende veranderingen in de infrastructuur, zoals na migratie naar een nieuwe webhostingprovider, zoals recent is gebeurd met de Inkesta-stemserver.

Volgens Inkesta is de marketingsite inderdaad verouderd en draait op een gedeelde server. Ze hebben plannen om de website binnenkort te vervangen en op een dedicated webserver te installeren.

Beveiligingslek was al een jaar bekend
Na melding van deze beveiligingslekken en risico’s bij Inkesta werd hier ontvankelijk en meewerkend op gereageerd. Ze waren blij met de meldingen. Een medewerker zei dat hij zelf ook al het open directory lek een jaar geleden gemeld had aan zijn baas, maar dat de configuratiefout maar niet werd opgelost.

Na melding dat het functioneel ontwerp voor de nieuwe stemsoftware online stond wat een stagiair vorig jaar heeft geschreven, reageerde de directeur: “Die documenten mag iedereen zien. Dat is niet zo erg.”. Kort na het gesprek waren de documenten wel snel offline gehaald.

Dat een klein bedrijf achterstallig onderhoud heeft aan de ICT-infrastructuur en weinig cybersecurity kennis in huis heeft is niet zo heel opmerkelijk, ware het niet dat Inkesta hele grote dingen doet, zoals interne verkiezingen voor meerdere politieke partijen, maar ook interne verkiezingen voor pensioenfonds ABP waarbij maar liefst twee miljoen stemgerechtigden via de stemsoftware van Inkesta hun stem mogen uitbrengen.

Hoe veilig is de stemsoftware van Inkesta?
Hoe veilig is de stemsoftware waarmee VVD-leden hun nieuwe voorzitter mogen kiezen? Via meerdere verschillende VVD-leden heb ik een stembiljet in handen gekregen zodat ik kon zien hoe de verkiezing vanuit het perspectief van een stemgerechtigde er technisch gezien eruit komt te zien.

Ethisch kader: geen stembeïnvloeding
Laat ik voorop stellen dat ik het ethisch niet verantwoord vind om een lopende verkiezing – waarover dan ook, en hoe minimaal dan ook – mogelijk te beïnvloeden. Dat was voor mij dan ook echt buiten scope van dit onderzoek. Wel heb ik gekeken naar mogelijke beveiligingslekken en -risico’s in het stemsysteem, en aangrenzende systemen.

Stembiljet wordt per mail verstuurd
Elk VVD-lid krijgt een individueel stembiljet gemaild:

Online stembiljet
In deze mail staat een unieke link waarop geklikt kan worden. Eenmaal geklikt op de link wordt een stembiljet getoond:

Blanco stem kan niet direct aangevinkt worden
Hierbij valt op dat een blanco-stem niet als afzonderlijke stemoptie direct aangevinkt kan worden. Als je heel strikt bent, dan zou je kunnen opperen dat dit theoretisch gezien stembeïnvloeding zou kunnen opleveren.

Het is onduidelijk wat er precies gebeurt als op de ‘ik stem blanco’ link klik: wordt de stem dan direct uitgevoerd? Na een proef op de som blijkt dat na het klikken hierop een afzonderlijke pagina wordt geopend waarop tekst en uitleg staat, waarna de blanco stem definitief doorgevoerd kan worden met een muisklik.

Duizenden verkiezingen verlopen via Inkesta-stemsoftware
Het nummer in de adresbalk is 6.976 waarmee deze verkiezing in het systeem bekend staat. Blijkbaar zijn al bijna 7.000 online stemmingen via de Inkesta-stemsoftware uitgevoerd.

Digitaal stembiljet ondoordacht en bevat technische slordigheden
Het digitale stembiljet bevat diverse slordigheden, zoals technische PHP-, CSS- en JavaScript-fouten:

Niet heel netjes. Dit roept de vraag op: wordt het stembiljet precies hetzelfde op elk apparaat, laptop en telefoon weergegeven zoals ontworpen? en kan op elk apparaat ook daadwerkelijk gestemd worden? Wegens beperkte tijd heb ik dit niet uitgezocht. Daarnaast: blijkbaar draait de stemsoftware in debugmodus (want PHP-foutmeldingen worden getoond), wat in een productieomgeving niet zou moeten voorkomen, omdat dit het identificeren van beveiligingsrisico’s makkelijker maakt, en ook om die dan uit te buiten.

Datalek: Pamfletten van kandidaten van andere verkiezingen inzichtelijk
Op het VVD-stembiljet kan ik klikken op de naam ‘Onno Hoes’ of ‘Eric Wetzels’. Als ik dat doe dan krijg ik een webpagina te zien waarop extra informatie (een pamflet) te zien staat over de kandidaat. Kandidaten worden met een (wederom) oplopend nummer in de adresbalk binnen het stemsysteem uniek geïdentificeerd. Als ik dat nummer aanpas, dan krijg ik – tot mijn grote verbazing – opeens een kandidaat van een geheel andere verkiezing te zien die niets met de VVD te maken heeft:

Omdat de pamfletten van kandidaten via een oplopend nummer worden geïdentificeerd, kunnen we hieruit leren dat autorisatiecontroles ontbreken op deze pamfletten. Daarnaast valt aan het oplopend kandidaatnummer af te zien dat er blijkbaar al bijna 43.000 kandidaten verkiesbaar zijn gesteld via het Inkesta-stemsysteem. Via steekproeven heb ik nog drie andere pamfletten van kandidaten kunnen inzien die niets met de VVD-verkiezing te maken hebben.

Voor dit autorisatielek hoef je niet heel technisch onderlegd te zijn, je hoeft niet eens een geldig stembiljet te hebben, je hoeft alleen een nummer in de adresbalk te veranderen. Na melding van dit lek aan Inkesta is het binnen een paar uur verholpen.

Google kan technisch gezien achterhalen welke IP-adres lid is van de VVD
Ik besloot daarna om eens in de HTML-broncode van de webpagina te kijken hoe deze was opgebouwd. Het viel me hierbij op dat het stembiljet een lettertype gebruikt wat op een server van Google staat. Als dit lettertype wordt opgehaald, wordt aan Google verstuurd vanaf welk domeinnaam dit verzoek komt:

Technisch gezien zou Google nu kunnen achterhalen welk IP-adres lid is van de VVD. Zeer waarschijnlijk doet Google niets met deze specifieke informatie, maar dat zou uit het dataverkeer wel af te leiden zijn.

Het lidmaatschap van een politieke partij is een gegeven over de politieke opvatting van een persoon. En dat is volgens de Algemene verordening gegevensbescherming (AVG) een bijzonder persoonsgegeven wat niet zomaar verwerkt mag worden. In het Inkesta privacybeleid staats niets vermeld over een dataverbinding met Google.

Na melding van deze bevinding ziet Inkesta de implicaties nu ook en pakt het issue op.

Inlogschermen benaderbaar met optionele 2FA
Tijdens mijn zoektocht naar de achterliggende infrastructuur achter de stemsoftware viel het me op dat er meerdere inlogschermen via internet benaderbaar zijn. Via een online portaal kan de verkiezingsleiding de verkiezing configureren en beheren, en kunnen kandidaten hun pamflet aanpassen.

Navraag bij Inkesta leert dat twee-factor authenticatie (2FA) optioneel is voor klanten om in te stellen op hun accounts. Er is een reële kans dat gebruikers 2FA te lastig vinden om te gebruiken, en dat dan maar niet instellen op hun account.

Als ooit één verkiezing gehackt wordt wat via het Inkesta-stemsysteem is verlopen, dan straalt dat direct af op het vertrouwen van alle andere verkiezingen die zijn geweest, en nog worden gehouden via het platform. Inkesta zou er daarom goed aan doen om 2Fa verplicht te stelen voor alle accounts in het systeem.

Stemgeheim technisch niet gewaarborgd, wel functioneel richting verkiezingsorganisatie
In het stembiljet wat alle VVD-leden gemaild krijgen, staat:
“[..] Stemmen is geheel anoniem. [..]”

Navraag bij Inkesta leert dat als een stem op een kandidaat wordt uitgebracht, dat dan niet wordt geregistreerd wie op wie stemt, maar: “[..] Het eerlijke verhaal is, het valt in de meeste gevallen indirect wel te achterhalen. [..]”:

  • Als iemand stemt, dan wordt geregistreerd op welke datum en tijd het stembiljet is ingeleverd.
  • Vervolgens krijgt de gekozen kandidaat een extra stem waaraan een datum en tijd is gekoppeld.

“[..] Alhoewel niet direct geregistreerd wordt welk lid op welke kandidaat stemt, kan dit wel worden achterhaal door op een bepaalde datum en tijd uit gebrachte stemmen te linken aan de datum en tijd van ingeleverde stembiljetten. [..]”.

Het stemgeheim kan snel worden doorbroken in de meeste gevallen.

Als op dezelfde seconde meerdere stemmen zijn uitgebracht binnen een verkiezing op verschillende kandidaten, dan is niet precies te achterhalen wie op wie gestemd heeft. Alleen bij hele grote verkiezingen zal dit voorkomen, waarbij honderdduizenden tot miljoenen leden moeten stemmen in een korte periode.

Volgens Inkesta kan de verkiezingsleider van een klant niet zien wie op wie gestemd heeft. Dat betekent dus dat de VVD-leiding niet kan zien welk lid op welke kandidaat heeft gestemd. Dat is goed. Alleen Inkesta-systeembeheerders zouden dit kunnen achterhalen. Daar zijn er drie van.

Inkesta-systeembeheerders kunnen ongezien de uitslag aanpassen
Niets ten nadele van het ICT-personeel van Inkesta, maar het theoretische risico bestaat – hoe klein die ook is – dat een systeembeheerder de uitslag naar zijn hand zou willen zetten en belangenverstrengeling optreedt.

Nu is het zo dat drie systeembeheerders volledige toegang tot de stemserver hebben. Als administrator kunnen ze dan alles doen wat ze willen op die server, en zodoende dus ook de uitslag veranderen. Zeker als dit overeen zou komen met exit polls en verwachtingen, of als het genuanceerd wordt gedaan, dan is er een gerede kans dat niemand achter de fraude zou komen. Bij de meeste stemmingen in het bedrijfsleven is dit een verwaarloosbaar risico, maar als het om belangrijke en relevante stemming gaat, dan kan frauderen opeens een stuk interessanter worden.

Inmenging van buitenlandse statelijke actoren
Voor een vijandige buitenlandse mogendheid, zoals Rusland, is Inkesta ook een interessant doelwit. Als je toegang hebt tot de server waar een belangrijke interne stemming van een politieke partij op draait, dan kan je serieus veel invloed uitoefenen op de koers waar een politieke partij naar toe gaat. Statelijke actoren hebben de capaciteiten om een stemming hoogst waarschijnlijk ongezien te beïnvloeden.

Zij zullen waarschijnlijk weinig moeite ondervinden bij het inbreken in computers van Inkesta-medewerkers. Er is overigens op dit moment geen enkele aanwijzing dat een dergelijke dreiging nu ook aan de orde is.

Stemapplicatie en database draaien op dezelfde server
Navraag bij Inkesta leert dat de stemapplicatie en database op dezelfde server draaien. Hierbij is niet voor een meerlaags beveiligingsmodel gekozen waarbij een aparte applicatieserver is ingericht, die dan alleen invoegrechten heeft op tabellen die op een aparte databaseserver staan. Een hack van de applicatieserver betekent in dat geval dan nog niet direct dat de stemming dan ook zomaar kan worden beïnvloed op de databaseserver.

Mailserver ondersteunen verouderde encryptiealgoritmes en -protocollen
De mailservers van digitaleverkiezing.nl ondersteunen verouderde encryptiealgoritmes en -protollen (TLS-versie 1.0 en 1.1):

Name Type Data
digitaleverkiezing.nl. MX 10 relay1.qsp.nl.
digitaleverkiezing.nl. MX 20 relay2.qsp.nl.

De TLS-configuratie voor relay1.qsp.nl (193.254.215.245) en relay2.qsp.nl (193.254.215.246) laat zien dat nog veel verouderde en onveilig geachte encryptiealgoritmes worden ondersteund (in het zwart, oranje en rood):

Vertrouwelijke gegevens kunnen worden geopenbaard, wanneer de server een door de cliënt voorgestelde zwakke encryptie-algoritme accepteert en een man-in-the-middle aanval op dat moment plaats vindt. Dat is niet een heel waarschijnlijk scenario, tenzij je te maken hebt met de dreiging van een statelijke actor. Wel is het zo dat als de server en de cliënt beide sterkere encryptie-algoritmes ondersteunen, dat dan geen null encryptie-algoritme zal worden geselecteerd om te gaan gebruiken, maar wel de sterkst mogelijke die beide partijen ondersteunen.

Het is onduidelijk of deze mailserver ook de mailtjes uitstuurt waarin de links naar de stembiljetten staan.

WAF, IPS en SOC lijkt te ontbreken
De stemsoftware van Inkesta lijkt niet te zijn uitgerust met een webapplicatiefirewall (WAF), inbraakpreventiesysteem (IPS), of actieve security monitoring (SOC). De focus van Inkesta lijkt te zijn gericht op de operatie: verkiezingen draaien, de software uitbreiden, draaiende houden, en klanten bedienen.

DDOS-bescherming door TransIP
Volgens Inkesta draait het stemsysteem tegenwoordig bij webhostingbedrijf TransIP. Zij zijn veel schaalbaarder dan de oude webhostingomgeving en bieden ook bescherming tegen DDoS-aanvallen.

Eerste indruk en aanbeveling
Mijn eerste indruk is dat Inkesta nog wel wat huiswerk heeft om cybersecurity en privacy naar een hoger niveau te tillen. Ik heb niet direct een mogelijkheid gezien dat het daadwerkelijk stemmen lek is. Wel heb ik in zeer korte tijd al een aantal datalekken gevonden en diverse beveiligings- en privacyrisico’s geïdentificeerd. Dat gaf geen beste eerste indruk.

Het systeem zou aan een gedegen beveiligingsonderzoek moeten worden onderworpen. Hierbij zou een gerenommeerd cybersecuritybedrijf moeten onderzoeken of er nog andere onvolkomenheden in de software aanwezig zijn, zoals bijvoorbeeld in beheerdersschermen, in gebruikte mailsoftware en in de gehele internet-facing infrastructuur van Inkesta. Het is ook verstandig om het interne netwerk, gebruikte cloud infrastructuur en laptops aan een beveilingsanalyse te onderwerpen.

Tot slot
Het is absoluut niet mijn bedoeling om de uitslag van deze VVD-verkiezing in twijfel te trekken, daar is ook helemaal geen enkele aanwijzing of aanleiding voor gevonden. Wel wil ik mensen bewust maken van het feit dat als een volgende keer een vergelijkbare verkiezing wordt georganiseerd, dat wat meer gedegen onderzoek uitvoeren wel verstandig is alvorens een bepaalde oplossing wordt gekozen. Met een online verkiezing worden allerlei risico’s geïntroduceerd op het gebied van veiligheid, betrouwbaarheid, vertrouwbaarheid, anonimiteit, beschikbaarheid en inmenging van binnenuit en buitenaf.

Online stemmen versus een fysieke stemming
Sinds enkele jaren is de populariteit van online interne verkiezing houden binnen het bedrijfsleven snel gegroeid. De recente pandemie heeft daar zeker goed aan meegeholpen. Nu is een online stemtool zoals Inkesta aanbiedt een prima oplossing voor de meeste ledenradenverkiezingen. Alleen moet je je afvragen of het gemak waarmee een online stemming kan worden uitgevoerd, nog opweegt tegen het afbreukrisico dat een belangrijke uitslag voor een politieke partij mogelijk niet 100% betrouwbaar is, of niet helemaal vertrouwd wordt, zoals ze bij de CDA daar nog steeds de pijn van voelen.

Wat is er mis met het ouderwets stemmen op een grote bijeenkomst van een politieke partij? Er kan dan ouderwets, maar geheel vertrouwd op papier gestemd worden. Die kunnen dan handmatig geteld worden. Iedereen begrijpt het proces, kan het observeren van dichtbij, en controleren of alle stemmen wel eerlijk worden geteld. Een discussie over de uitslag kan met een hertelling worden opgelost.

Daarnaast is zo’n congres ook goed voor het moraal. De kandidaten kunnen zichzelf presenteren, politieke discussie en betogen houden, en na de verkiezingsuitslag kan zo’n congres ook weer goed voor de verzoening zijn.

Conclusie
Tijdens een pandemie kan een interne verkiezing via online stemmen faciliteren wellicht uitkomst bieden voor een politieke partij, maar dan wel als daadwerkelijk aan de hoogste privacy- en beveiligingsvoorwaarden wordt voldaan.

Een fysieke stemming organiseren voor belangrijke interne verkiezingen voor politieke partijen verdient de sterke voorkeur versus online verkiezingen, waarbij allerlei beveiligingsrisico’s, privacy uitdagingen en dreigingen worden geïntroduceerd.

Sites die naar dit onderzoek linken

  • BNR.nl: ‘Hackers vinden beveiligingslek bij site VVD-partijverkiezingen: ‘Dit is niet Poetinproof’
  • Trouw.nl: ‘Brabantse ondernemer Eric Wetzels is nieuwe partijvoorzitter VVD’
  • AGconnect.nl: ‘VVD gebruikte lekke site voor verkiezingen’
  • WNL.tv: ‘Eric Wetzels nieuwe voorzitter VVD na ruime overwinning op Onno Hoes’
  • TPO.nl: ‘VVD-stemsite bleek lek te zijn, maar partij zegt vertrouwen te hebben in verkiezing’
  • DvhN.nl: ‘VVD-bestuur twijfelt ondanks lek website niet aan verkiezing’
  • GooiEnEemlander.nl: ‘VVD-bestuur twijfelt ondanks lek website niet aan verkiezing’
  • RD.nl: ‘VVD-bestuur twijfelt ondanks lek website niet aan verkiezing’
  • NoordhollandsDagblad.nl: ‘VVD-bestuur twijfelt ondanks lek website niet aan verkiezing’
  • BarendrechtsDagblad.nl: ‘Niet bestuursfavoriet Hoes maar Wetzels nieuwe VVD-voorzitter’

About Sijmen Ruwhof

Independent IT Security Researcher / Ethical Hacker
This entry was posted in bnr nieuwsradio, radio. Bookmark the permalink.