TL;DR – la date de naissance ou le numéro de pesel n’est pas une bonne idée pour garantir l’accès aux données.
L’énigme – ce qui différencie les deux images ci-dessous?
Commençons par le début, cependant. Malheureusement, comme c’est souvent le cas dans le monde de l’informatique, la commodité ne va pas de pair avec la sécurité. Je pense que c’était la même chose cette fois. Cependant, il existe un ensemble de données sensibles où les compromis ne doivent pas être faits. Ces données sont, entre autres, des informations sur notre état de santé.
Alerté par un message de mon ami Kacpra sur la façon dont l’accès aux résultats des tests de laboratoire est accordé, j’ai décidé d’examiner plus en détail la solution responsable.
Comme le montrent les graphiques ci-dessus, deux informations sont nécessaires pour accéder à votre score grâce à la fonctionnalité de « connexion simplifiée »:
- l’identifiant de commande, où les numéros de commande successifs sont en hausse;
- date de naissance de la personne qui commande [day=X&month=X&year=X]
Pour certaines hypothèses, le nombre de combinaisons de dates de naissance atypiables à l’identifiant de commande n’est que d’environ 19 000 combinaisons. Il n’est pas difficile de deviner qu’il n’y a pas beaucoup de problème à générer toutes ces combinaisons et à vérifier si elles correspondent au numéro de commande.
Il s’est avéré que mes suppositions étaient correctes et après quelques centaines d’énumérations, j’ai réussi à faire correspondre les données d’accès:
Cela a permis d’obtenir des informations sur les patients vulnérables telles que:
- nom;
- nom;
- pesel;
- date de naissance;
- adresse de résidence;
- le résultat des études;
Un autre exemple d’une tentative d’énumération réussie:
Immédiatement après avoir confirmé mes hypothèses de vulnérabilité, j’ai signalé cette erreur aux responsables du logiciel avec des recommandations de réparation:
Que faire pour vivre ?
L’une des protections les plus couramment utilisées contre ce type d’attaque est la mise en œuvre du mécanisme captcha. Après plusieurs tentatives infructueuses (par exemple trois) pour accéder aux données de commande, l’utilisateur de l’application sera invité à réécrire le code captcha affiché. Toutefois, il convient de noter que la mise en œuvre d’un tel mécanisme ne constitue qu’un (ou jusqu’à) ralentissement de l’attaquant qui, dans les cas les plus simples, pourra continuer à pousser la date de naissance à l’aide de scanners OCR ou de services de lecture captcha dédiés.
Une meilleure protection que je recommande est d’accéder aux résultats de la commande par un mot de passe aléatoire et suffisamment longqui viendra au numéro de téléphone du donneur d’ordre.
Heureusement, le bogue a été corrigé ement rapidement, grâce à la mise en œuvre du mécanisme reCAPTCHA de google: