Beveiliging bij mobiele apps. Zo belangrijk, en zo onderbelicht…

Voor de tweede keer dit jaar wist ik binnen vijf minuten wie de zakelijke klanten zijn van een app (die ik aan het onderzoeken was). Ik ben geen hacker en dat is ook niet nodig want de manier waarop sommige bedrijven de communicatie tussen app en server opzetten is bedroevend.

Ik bedoel niet dat voor de communicatie geen gebruik van HTTPS wordt gemaakt, want daar maakten beide apps wel netjes gebruik van. Ik heb het over linken met nummertjes erin waar HTTPS geen invloed op heeft.

Ter illustratie om uit te kunnen leggen wat ik bedoel, gebruik ik even een e-mail bevestiging van een bestelling in een webwinkel die ik een tijd geleden ontving. In de mail zat een link waarmee ik de factuur kon downloaden. Die link zag er aan het eind zo uit: …/facturen/index.php?id=12345. De factuur werd als PDF in mijn browser geopend. Toen ik bovenin de link zag heb ik het nummer gewijzigd in 12344 en daar was de factuur van de vorige klant.

Dat je bij een app de linken niet ziet houdt niet in dat je ze niet kunt achterhalen. Bij de twee apps in kwestie zag ik in het communicatie log van mijn proxyserver dezelfde onbeveiligde links naar de logo’s van de zakelijke klanten. Met een eenvoudig scriptje dat de link keer op keer aanroept maar het nummer ophoogt stonden alle logos in een mum van tijd op mijn beeldscherm.

Als ervoor gekozen wordt afbeeldingen via links in de app te laden (er zijn betere mogelijkheden) kan met enkele simpele architectuur oplossingen, die onderdeel zouden moeten zijn van ieder ontwerp, worden voorkomen wat ik deed. Neem bijvoorbeeld vijftien random karakters als identificatie van de afbeeldingen in plaats van een oplopend nummer. Of beter, gebruik een hash bij iedere link zodat de combinatie van nummer en hash correct moet zijn. Wordt in de hash ook nog een timestamp verwerkt waardoor de link beperkt geldig is, dan wordt het vrijwel onmogelijk de afbeeldingen ongeautoriseerd op te vragen.

Zouden de klanten weten dat data beveiliging geen standaard onderdeel was van het ontwerp. Of moesten ze daar extra voor betalen (en hadden ze dat er niet voor over)?