3 millions d’applications iOS et macOS ont été exposées à de puissantes attaques de la chaîne d’approvisionnement

Aurich Lawson

Des vulnérabilités passées inaperçues pendant une décennie ont exposé des milliers d’applications macOS et iOS à des attaques sur leur chaîne d’approvisionnement. Des pirates informatiques auraient pu ajouter du code malveillant compromettant la sécurité de millions ou de milliards de personnes qui les ont installées, ont déclaré des chercheurs lundi.

Les vulnérabilités, qui ont été corrigées en octobre dernier, résidaient dans un serveur « trunk » utilisé pour gérer CocoaPods, un référentiel pour les projets Swift et Objective-C open source dont dépendent environ 3 millions d’applications macOS et iOS. Lorsque les développeurs apportent des modifications à l’un de leurs « pods » (terme utilisé par CocoaPods pour désigner des packages de code individuels), les applications dépendantes les intègrent généralement automatiquement via des mises à jour d’applications, généralement sans aucune interaction requise de la part des utilisateurs finaux.

Vulnérabilités d’injection de code

« De nombreuses applications peuvent accéder aux informations les plus sensibles d’un utilisateur : informations de carte de crédit, dossiers médicaux, documents privés, etc. », ont écrit les chercheurs d’EVA Information Security, la société qui a découvert la vulnérabilité. « L’injection de code dans ces applications pourrait permettre aux attaquants d’accéder à ces informations à toutes fins malveillantes imaginables : ransomware, fraude, chantage, espionnage industriel… Ce faisant, les entreprises pourraient être exposées à des responsabilités juridiques majeures et à un risque de réputation. »

Les trois vulnérabilités découvertes par EVA proviennent d’un mécanisme de vérification par courrier électronique non sécurisé utilisé pour authentifier les développeurs de pods individuels. Le développeur a saisi l’adresse e-mail associée à son pod. Le serveur trunk a répondu en envoyant un lien vers l’adresse. Lorsqu’une personne a cliqué sur le lien, elle a eu accès au compte.

Dans un cas, un attaquant a pu manipuler l’URL du lien pour la faire pointer vers un serveur sous son contrôle. Le serveur a accepté un XFH falsifié, un en-tête HTTP permettant d’identifier l’hôte cible spécifié dans une requête HTTP. Les chercheurs d’EVA ont découvert qu’ils pouvaient utiliser un XFH falsifié pour construire les URL de leur choix.

Normalement, l’e-mail contiendrait un lien valide vers le serveur CocoaPods.org tel que :

À quoi ressemble un e-mail de vérification valide.
Agrandir / À quoi ressemble un e-mail de vérification valide.

Sécurité des informations EVA

Les chercheurs pourraient plutôt modifier l’URL pour qu’elle mène à leur propre serveur :

Une vérification d'e-mail après qu'il ait été manipulé.
Agrandir / Une vérification d’e-mail après qu’il ait été manipulé.

Sécurité des informations EVA

Cette vulnérabilité, identifiée comme CVE-2024-38367, résidait dans la classe session_controller du code source du serveur trunk, qui gère l’URL de validation de session. La classe utilise le mécanisme sessions_controller.rb, qui donne la priorité au XFH par rapport à l’en-tête d’hôte d’origine. Le code d’exploitation des chercheurs était le suivant :

POST /api/v1/sessions HTTP/1.1
Host: trunk.cococapods.org
Content-Type: application/json; charset=utf-8
Accept: application/json; charset=utf-8
User-Agent: CocoaPods/1.12.1
Accept-Encoding: gzip, deflate
X-Forwarded-Host: research.evasec.io
Content-Length: 78

{
  "email":"[email protected]",
  "name":"EVAResearch",
  "description":null
}

Une vulnérabilité distincte, identifiée comme CVE-2024-38368, permettait aux attaquants de prendre le contrôle de pods qui avaient été abandonnés par leurs développeurs mais qui continuaient d’être utilisés par des applications. Une interface de programmation permettant aux développeurs de récupérer leurs pods est restée active près de 10 ans après sa première mise en œuvre. Les chercheurs ont découvert que quiconque trouvant l’interface d’un pod orphelin pouvait l’activer pour en prendre le contrôle, sans qu’aucune preuve de propriété ne soit requise.

Une simple requête curl contenant le nom du pod était tout ce qui était requis :

# Curl request for changing ownership of a targeted orphaned pod
curl -X 'POST' 
  -H 'Host: trunk.cocoapods.org' 
  -H 'Content-Type: application/x-www-form-urlencoded' 
  --data-binary 'owner[name]=EVA&[email protected]'
  --data-binary 'pods[]=[TARGET_UNCLAIMED_POD]&button=SEND'
  'https://trunk.cocoapods.org/claims'

La troisième vulnérabilité, CVE-2024-38366, permettait aux attaquants d’exécuter du code sur le serveur de jonction. Le serveur de jonction s’appuie sur la RFC822 formalisée en 1982 pour vérifier l’unicité des adresses e-mail des développeurs enregistrés et vérifier si elles respectent le format correct. Une partie du processus consiste à examiner l’enregistrement MX pour le domaine d’adresse e-mail tel qu’implémenté par cette implémentation RFC822.

Source-147