Retorische vraag: heb je een mobieltje? Zo ja, dan ben je misschien vatbaar voor een door mij ontdekt beveiligingsprobleem: het ‘slimme’ toetsenbord op je mobieltje kent je pincodes en is niet bang om deze gevraagd en ongevraagd uit te spuwen.
Het probleem
Een paar maanden geleden typte ik een appje naar een vriend. Ik heb een toetsenbord (Microsoft SwiftKey) op mijn telefoon dat automatisch woordsuggesties doet terwijl je typt.
Op een bepaald moment zag ik opeens drie van mijn pincodes in beeld staan.
Dat kan volgens mij nooit de bedoeling zijn. Ik opende een leeg notitiedocument en probeerde wat ‘handige’ zinnetjes uit:
“Je kunt de volgende code gebruiken:”
“You can use the following code:”
“Use my pin code:”
En ja hoor, steeds als ik op enter drukte na het typen van een zinnetje, verschenen de drie pincodes in beeld. Dat is zorgelijk. Microsoft SwiftKey is nog loslippiger dan drie oma’s tijdens een theekransje. Het toetsenbord kent mijn pincodes én is niet beroerd om deze aan iedereen met toegang tot mijn telefoon te verstrekken.
Oorzaak
Na kort onderzoek blijkt dat SwiftKey alles opslaat wat je ooit hebt getypt. In mijn SwiftKey-account vond ik lijsten met duizenden opgeslagen woorden. Zodra je een woord typt, beschouwt SwiftKey het als onderdeel van het ‘persoonlijke woordenboek’. En dat persoonlijke woordenboek wordt onder andere gebruikt voor het doen van suggesties. Het is onduidelijk wat voor soort mechanisme SwiftKey gebruikt voor het doen van suggesties, maar het toetsenbord is in elk geval in staat is om vier-of zescijferige codes te linken aan de term ‘pin codes’.
Wat ik misschien wel het meest schokkend vind is dat SwiftKey duidelijk onderscheid kan maken tussen gewone cijferreeksen en mijn pincodes. In mijn persoonlijke woordenboek staan honderden cijferreeksen, waaronder bijvoorbeeld reeksen van de vorm ’75xx’. Dat zijn postcodes in Enschede, mijn woonplaats. Dit soort andere reeksen suggereert SwiftKey allemaal niet als ik vraag om ‘pincodes’.
Toch ligt de schuld van dit probleem slechts voor een deel bij Microsoft. Andere schuldigen zijn app-ontwikkelaars en webbouwers. Microsoft claimt dat SwiftKey niets opslaat dat in ‘wachtwoordvelden’ wordt ingetypt. Een wachtwoordveld kun je herkennen aan dat getypte tekst niet als tekst zichtbaar is, maar als bolletjes. Een app-ontwikkelaar moet zelf instellen of iets een wachtwoordveld is. En dit gaat meestal goed (wanneer heb je voor het laatst een wachtwoord niet in bolletjes zien staan?). Behalve bij pincodes dus. Mijn experiment bewijst dat er tenminste drie apps of websites op mijn telefoon zijn waar een pincodeveld niet bestempeld is tot ‘wachtwoord’. En dan slaat SwiftKey de pincodes dus op, om ze vervolgens te suggereren. Oeps.
Mogelijk misbruik
Hoe groot is het veiligheidsrisico nou echt? Iemand met kwade intenties én toegang tot de telefoon van een ander kan de notitie-truc gebruiken die ik eerder in dit artikel beschreef. Maar ook op gedeelde devices kan dit lek voor problemen zorgen. Daar zou je zomaar de pincodes van iemand anders voorgeschoteld kunnen krijgen. En wat dacht je van de tablet bij het gemeentehuis waar je misschien wel je burgerservicenummer en geboortedatum moet invullen om een afspraak te maken? Ook die gegevens kunnen mogelijk worden opgevraagd door misbruik te maken van het SwiftKey-toetsenbord.
Momenteel is fysieke toegang tot het apparaat van een slachtoffer vereist. Maar ik voorzie dat slimme jongens gauw met oplossingen zullen komen waarbij dat geen must meer is. Misschien worden scams op afstand mogelijk waarbij slachtoffers hun scherm delen terwijl ze een nutteloze code intypen. En ondertussen kijkt de cybercrimineel mee met de échte pincodes die het toetsenbord suggereert.
Reactie van Microsoft
Al mijn bevindingen stuurde ik, op de dag van de ontdekking, naar Microsoft. Microsoft heeft een responsible-disclosureprogramma dat mensen in staat stelt onbekende beveiligingslekken te melden. Twee weken na mijn melding ontving ik een reactie. Microsoft schrijft dat het gemelde lek geen acuut beveilingsprobleem veroorzaakt en dat het oplossen voor hen een lage prioriteit heeft, omdat fysieke toegang van een hacker vereist is.
Microsoft meldt ook dat het probleem is doorgespeeld naar de SwiftKey-afdeling en dat de ontwikkelaars zullen werken aan een fix. Momenteel – ruim een maand later – is het probleem op mijn telefoon nog niet verholpen.
Als laatste geeft Microsoft het advies om de ‘incognitomodus’ te activeren. Als die modus actief is, slaat het toetsenbord geen woorden meer op.
Mijn kritische mening
Ik waardeer het dat Microsoft de moeite heeft genomen om naar mijn melding te kijken. Toch denk ik dat SwiftKey meer kan doen om het probleem op te lossen. Als het toetsenbord in staat is om een rijtje nummers te verbinden met het woord ‘pincode’, dan zou het ook mogelijk moeten zijn om deze pincodes te verbergen. En als dat om wat voor technische reden dan ook niet implementeerbaar is, dan zou SwiftKey gewoon geen getallen tussen de 4 en 8 cijfers moeten opslaan.
Voor de volledigheid nuttig om te vermelden: SwiftKey heeft een ingebouwde oplossing om woorden op te geven die vervolgens niet meer gesuggereerd worden. Je zou dus in theorie al jouw pincodes op die lijst kunnen zetten.
Feit: het is niet heel handig om een onbeveiligde lijst met al je pincodes te hebben. En deze ‘oplossing’ werkt helaas niet op gedeelde apparaten.
Daarnaast zette dit onderzoek me aan het denken. Is het wenselijk dat mijn toetsenbord alles ziet wat ik typ? En alhoewel de slimme suggesties van SwiftKey me veel tijd besparen, hoe vrolijk word ik van de gelekte pincodes? Moet ik naar een ander toetsenbord switchen? Maar hoe zeker weet ik dat dezelfde problemen ook niet bij andere systemen bestaan?
Tot de dag van vandaag ben ik nog steeds SwiftKey-gebruiker; ik heb nog geen waardig alternatief gevonden.
Het doel van dit artikel is dan ook zeker niet om iedereen ervan te overtuigen SwiftKey te deïnstalleren. Ik ben al blij als mijn onderzoek bijdraagt aan de discussie over hoe ver bedrijven zoals Microsoft mogen gaan in het verzamelen van je gegevens, en hoeveel ze zouden moeten doen om kwetsbare gegevens af te schermen. Als dit artikel je aan het denken heeft gezet, of je op z’n minst een leeg notitiedocument heeft laten openen om te testen of dit lek ook op jouw telefoon te misbruiken is, dan is mijn missie geslaagd.
Tijdspad
4 juli 2023: Ik ontdek het probleem en stel dezelfde dag Microsoft op de hoogte via het responsible-disclosureprogramma.
6 juli 2023: Microsoft start met het onderzoeken van het probleem.
18 juli 2023: Microsoft laat weten dat dit probleem een lage prioriteit heeft, omdat een aanvaller fysieke toegang tot het apparaat van een slachtoffer moet hebben.
4 augustus 2023: Ik stuur een versie van dit artikel naar Microsoft, waarin ik ze, conform hun beleid, 14 dagen de tijd geef om te reageren.
22 augustus 2023: Ik heb geen aanvullende reactie van Microsoft ontvangen en ik publiceer het artikel. Mocht Microsoft na publicatie toch iets willen toevoegen, dan zal ik dat hieronder neerzetten.
Disclosure
Stach Redeker is niet verwant met Microsoft, SwiftKey, of een concurrent van deze bedrijven. Dit artikel is, conform het responsible-disclosurebeleid, voorgelegd aan Microsoft. Microsoft heeft 14 dagen gekregen om te inhoudelijk te reageren, maar heeft dit niet gedaan.