WhatsApp maakt grootschalige dataverzameling mogelijk

English version

Het is voor iedereen mogelijk om een database aan te leggen van telefoonnummers, profielfoto’s en statussen van bijna alle WhatsApp-gebruikers. De gebruiker hoeft niet in uw contactlijst te staan. Op z’n minst mogen we wat vraagtekens zetten bij deze privacygevoelige ‘mogelijkheid’ van WhatsApp. Ik leg uit hoe het zit.

Sinds enkele jaren kun je WhatsApp ook gebruiken in een webbrowser. Dat is makkelijk want een appje typen op een toetsenbord gaat wat sneller dan met de telefoon. Daarnaast kun je makkelijker wat kopiëren/plakken en bijlagen verzenden. Tot zover het positieve nieuws. Het slechte nieuws is dat het technisch mogelijk blijkt te zijn om dankzij die Web WhatsApp een gehele database aan te leggen van alle mogelijke WhatsApp-gebruikers. De enige eis is dat de gebruiker z’n privacy-instellingen niet heeft aangepast. De meeste mensen passen hun privacy-instellingen niet aan en WhatsApp moedigt dat ook niet aan. Dat opent de deur tot grootschalige dataverzameling en dat laat ik nu zien.

Eenvoudige uitleg

Web WhatsApp maakt via uw telefoon verbinding met de WhatsApp-servers. Grofweg vraagt de browser aan de server: geef mij informatie over de gebruiker behorende bij dit telefoonnummer. De server stuurt dan onder meer de volgende informatie terug naar de browser:

  • De profielfoto
  • De statustekst, dat is de tekst die standaard ‘Hey there! I am using Whatsapp’ is
  • De online/offline-status van de gebruiker

Het blijkt zo te zijn dat server dit terugstuurt voor elk denkbaar telefoonnummer. Zo is het niet nodig dat het telefoonnummer in uw contactlijst staat. En dat maakt het mogelijk om een database aan te leggen waarin telefoonnumers, profielfoto’s, statusteksten en on/offlinestatussen staan. De database is zo in te richten dat daarmee een tijdlijn per telefoonnummer is te construeren waarin naar voren komt wanneer de gebruiker online was met WhatsApp.

Een denkbeeldige tijdlijn die op te bouwen is voor bijna alle gebruikers van WhatsApp

Bijna elke website stuurt software mee die bepaalt hoe de website in uw browser functioneert. Zulke software is geschreven in Javascript. Die software bepaalt wat er gebeurt als u op een knop drukt, als u iets typt of als u de muis beweegt. Maar de software kan verbinding maken met een server om informatie op te vragen. De Web WhatsApp doet dat ook in uw browser. De software verzendt een telefoonnummer naar de server van WhatsApp om vervolgens de hierboven genoemde informatie te ontvangen. Het mooie van de software is dat het voor iedereen is in te zien én aan te passen. En dat betekent ook dat de software gewoon los te gebruiken is. Daarvan heb ik gebruik gemaakt bij het schrijven van een script om van een hele lading telefoonnummers de statusinformatie op te vragen. Het script wordt als het ware in de Web WhatsApp geplugd en maakt vervolgens gebruik van de meegestuurde software in de browser. Iedereen kan dat script gebruiken.

Het door mij geschreven script in actie waarin van 400 telefoonnummers opgevraagd wordt wat de statusinformatie en profielfoto is

Privacyzorgen

De grote vraag is natuurlijk: wat kan iemand met al die informatie? U moet zich voorstellen dat iemand met de bovenstaande informatie een database kan vullen waarin alle Nederlandse telefoonnummers staan met de bijbehorende profielfoto en statusinformatie. Die database kan mij vertellen wanneer een telefoonnummer online en offline is geweest. Het kan mij vertellen welke profielfoto bij een telefoonnummer hoort. Verder vertelt het mij wat de statustekst is van iemand. De technieken van gezichtsherkenning worden steeds beter en ook toegankelijker. Ik loop over straat, maak een foto van iemand en vraag mijn database welk telefoonnummer bij de foto hoort. Dat is allemaal toch wel een beetje eng.

Reactie WhatsApp

In het kader van responsible disclosure heb ik de mogelijkheid van deze grootschalige dataverzameling eerst bij WhatsApp neergelegd. Of beter gezegd, bij Facebook want zij zijn de eigenaar van WhatsApp. In het kort komt het erop neer dat zij bekend zijn met de mogelijkheid van deze dataverzameling. Zij zien het niet als een probleem. Ik laat het aan u of u het daarmee eens bent…

Reactie van Facebook na het melden van de mogelijkheid van deze dataverzameling

Technische uitleg

Hier volgt een technische uitleg die voor leken wat moeilijk te volgen zou kunnen zijn.

Web WhatsApp maakt gebruik van een ongedocumenteerde API. Zo’n API is wel te gebruiken maar je moet zelf uitzoeken de API werkt. De javascript API communiceert met de servers van WhatsApp via een WebSocket.

Een gedeelte van de javascript API van Web WhatsApp

Er zijn drie API calls die ik gebruik  in mijn script om informatie over een telefoonnummer op te vragen. De eerste is Store.ProfilePicThumb.find(<telefoonnummer>) om de urls van de profilepictures op te vragen. Die zou als volgt gebruikt kunnen worden:

Voorbeeld van het opvragen van de profilepicture van een telefoonnummer. Denk er wel om dat de urls alleen op vragen zijn in hetzelfde tabblad als waar Web WhatsApp in staat. Je moet dus een <img> element aan de DOM toevoegen.

De tweede is Store.Wap.statusFind( <telefoonnummer>) om de statustekst op vragen en die kan als volgt gebruikt worden:

Voorbeeld van het opvragen van de statustekst van een telefoonnummer

De laatste is Store.Presence.find( <telefoonnummer>) waarmee op te vragen is of iemand on- of offline is en die kan als volgt gebruikt worden:

Voorbeeld van het opvragen van onder andere de on/offlinestatus van een telefoonnummer

Door al deze API calls in een loop te laten lopen, is het mogelijk om van elk denkbaar telefoonnummer informatie op de vragen.

Aan het begin van het artikel ziet u een UI die ik gemaakt heb. Die maakt gebruik van de bovenstaande API calls. Het script voor die UI kunt u hier vandaan halen. Dat scriptje kunt u naar de developer console kopiëren/plakken en vervolgens verschijnt direct de UI in beeld. Gebruik het a.u.b. met verstand!

Update 15-05-2017 16:20

Er zijn mensen die wat opmerkingen hebben gemaakt n.a.v. de bovenstaande berichtgeving. Natuurlijk ga ik daar graag even op in:

Opmerking 1:  ‘Ik zie de nieuwswaarde niet, ik kan zelf toch een telefoonnummer toevoegen en vervolgens dezelfde informatie tevoorschijn toveren?’
Zeker, en dan heb je dezelfde info. Maar het verschil is dat ik gebruik maak van geautomatiseerde verzameling. Kan iemand zelf 100 telefoonnummers toevoegen en vervolgens al die informatie in een overzichtelijke tabel onderbrengen? Het gaat dus om de grote schaal van verzameling en niet zo zeer om het onthullen van geheime informatie. Het gaat dus ook niet beveiligingsprobleem.

Opmerking 2: ‘De informatie is niet geheim of privé. Waarom is dit nieuws?’ 
Jaha, ik snap dat maar bedenk dan dit: ik kan een complete database opzetten van profielfoto’s gekoppeld aan telefoonnummers. Dat lukt iemand niet met z’n telefoon. Op die manier kan ik door middel van gezichtsherkenning een telefoonnummer koppelen aan een persoon waar ik even een foto van maak. Zoals bij opmerking 1: het gaat om de potentiële schaal van verzameling wat dit nieuwswaardig maakt.

Opmerking 3: ‘Dit heb ik jaren geleden al ontdekt, waarom is dit nieuws?
Dat weet ik niet? Het kreeg toen blijkbaar niet de aandacht die het wel had verdiend. Wees er wel blij mee dat het nu wel de aandacht krijgt die het verdient. Er zijn veel mensen die hun privacy-instellingen in WhatsApp hebben aangepast n.a.v. dit artikel en het scriptje. 🙂

Update 16-05-2017 14:00

Andreas Buchenscheit heeft de gevaren van het delen van on/offline statussen in kaart gebracht . Dit is zijn paper daarover.

Update 16-05-2017 21:45

Ik heb een erg simpele Chrome extension geschreven die de UI zichtbaar maakt.