Sparklegate - une vulnérabilité ciblant les utilisateurs sous OS X

Sécurité des applications
Sparklegate - une vulnérabilité ciblant les utilisateurs sous OS X

Vous en avez rêvé, ou vous en avez fait des cauchemars, la voici : une vulnérabilité critique ciblant les utilisateurs d’OS X, le système d’exploitation d’Apple, vient d’être découverte.

Cette vulnérabilité, publiée il y a quelques jours , permet d’obtenir l’exécution de commandes système sur toute machine OS X depuis un réseau adjacent (par exemple un point d’accès public sans-fil ou un réseau d’entreprise). Vite nommée « Sparklegate », elle implique l’utilisation du framework Sparkle, utilisé dans de nombreuses applications OS X pour gérer les mises à jour logicielles.

Le composant logiciel à l’origine de la vulnérabilité est une bibliothèque (Webkit) du framework « Sparkle », utilisé par de nombreuses applications OS X populaires. Citons par exemple :

  • Le client de messagerie instantanée Adium ;
  • Le lecteur multimédia VLC ;
  • Le logiciel de décompression UnrarX ;
  • Le client VPN Tunnelblick ;
  • Le logiciel de prise de note Evernote ou encore la JRE Java ;
  • Etc… 

Si vous utilisez une de ces applications (ce qui est probablement le cas si vous avez un Mac), vous êtes directement concernés par cette vulnérabilité.

Ce qui est frappant dans cette faille est l’extrême facilité avec laquelle elle peut être exploitée et les impacts importants qui en découlent. Il est d’ailleurs étonnant que tout ceci n’ait pas été publié plus tôt ; une preuve de plus que la sécurité des systèmes d’exploitation d’Apple est encore trop peu étudiée.

À l’origine, Sparkle possède pourtant des mécanismes de protection d’intégrité des binaires fournis lors des mises à jour, notamment à l’aide d’une signature DSA. Malgré cela, les composants utilisés par le framework, mis bout-à-bout, sont vulnérables et permettent aux attaquants d’accéder au « graal », c’est-à-dire la possibilité d’exécuter du code arbitraire sur une machine distante.

Trois facteurs se combinent pour rendre Sparkle (et incidemment les applications l’utilisant) vulnérable :

  • Les fichiers XML utilisés pour récupérer l’état des mises à jour peuvent être téléchargés sans chiffrement ni vérification d’intégrité (en HTTP)
  • Le code JavaScript présent dans ce fichier est interprété par le framework Sparkle
  • L’outil Finder, par défaut sous OS X, n’active pas le Gatekeeper (une des protections logicielles du système d’exploitation) lors de l’exécution de binaires à partir de Sparkle, rendant l’exécution de code possible

Puisque nous ne sommes pas dans le contexte d’un navigateur, l’exécution de code JavaScript a donc un impact bien plus important et peut aller jusqu’à l’exécution de commandes système ou l’injection de programmes malveillants.

C’est ce facteur d’exécution qui rend la vulnérabilité particulièrement critique. Elle est d’ailleurs assez similaire à une autre vulnérabilité affectant les services WSUS mal configurés, et présentée en août dernier à la Black Hat US. Mais contrairement à son homologue, elle touche tous les logiciels s’appuyant sur Sparkle, par défaut.

 

Suis-je vulnérable ?

La commande suivante (lancée avec les privilèges d’administration) permet d’identifier les applications utilisant le framework Sparkle : 

$ sudo find / -iname Info.plist -exec grep -a -A 1 -i SUFeedURL {} \;
              <key>SUFeedURL</key>
              <string>http://www.unrarx.com/update.xml</string>
[…]

Si vous trouvez une URL en « http » dans les sources de mise à jour, vous venez d’identifier une application vulnérable.

 

Exemple de scénario d’exploitation

L’exploitation est assez simple lorsque la victime et l’attaquant sont présents sur le même réseau local, et se déroule en plusieurs étapes. L’exemple ci-dessous illustre une exploitation réussie ciblant le logiciel XQuartz‑X11: 

  • L’attaquant est en position d’interception (les paquets réseaux des victimes transitent par sa machine) ;
  • L’utilisateur victime lance un logiciel utilisant le framework Sparkle. Le logiciel va alors télécharger le fichier XML contenant les mises à jour. C’est le processus appelé « AppCast », utilisé comme un flux RSS pour récupérer les mises à jours ;
  • L’attaquant va alors modifier le fichier XML à la volée et rajouter un bloc contenant une fausse mise à jour ;

  • Ce bloc contient une redirection en JavaScript vers un serveur FTP (remplaçable par un serveur SMB ou AFP), bien évidemment contrôlé par l’attaquant. Il contient également une seconde redirection vers un volume local pointant sur un fichier exécutable ;

  • La victime exécute donc le code JavaScript présent, à son insu (typique des attaques « Cross-Site Scripting »). Le système monte un nouveau volume correspondant au serveur FTP et va télécharger et exécuter le fichier fourni ;

  • C’est ce fichier, contrôlé par l’attaquant, qui permettra de compromettre la machine de la victime. Pour notre démonstration, le code injecté lance une calculatrice :

 

Si cette première démonstration est très ciblée, il est tout à fait possible d’automatiser l’attaque en utilisant des logiciels tels que « bettercap » (https://bettercap.org/) ou mitmproxy (https://mitmproxy.org/) :

Un module ruby a d’ailleurs été créé afin de rendre l’attaque automatique . Elle ne cible pour le moment que l’application VLC, mais est adaptable à d’autres logiciels vulnérables.

Le module bettercap développé pour cette attaque utilise un serveur FTP pour envoyer le fichier exécutable. Nous avons également testé avec succès la création et l’utilisation d’un partage SMB avec Impacket, qui se révèle être une approche plus efficace que l’utilisation d’un serveur FTP car l’application associée au lancement d’un lien FTP est en général le navigateur Firefox, ce qui annule la possibilité d’exploitation.

Enfin, Il existe également d’autres moyens de l’exploiter mais présentant un impact plus faible, notamment en injectant des entités externes XML.

 

Comment me protéger ?

 La correction de cette vulnérabilité peut se faire par plusieurs moyens :

  • Mettre à jour le framework Sparkle, et donc l’application l’utilisant, vers la version 1.13.1 ;
  • Remplacer le lien dans les fichiers « Infos.plist » de « http:// » vers « https:// ». Toutefois,  il est possible que cette opération bloque les mises à jour si le serveur « AppCast » de l’application ne supporte par le HTTPS. Notez que le framework est configuré pour vérifier correctement les certificats serveurs, rendant une attaque MITM complexe lors de l’utilisation de SSL/TLS.

Dans une optique de défense en profondeur, il est aussi possible de complexifier l’exploitation de cette vulnérabilité en :

  • Configurant la liste des logiciels appelés par défaut lors du traitement d’un lien (ftp://, smb://, etc.). Vous pouvez pour cela utiliser l’outil duti :
brew install duti
duti -s org.mozilla.firefox ftp
duti -s com.apple.Safari afp
duti -s com.apple.Safari smb
  • Utilisant Little Snitch afin de désactiver les connexions LAN et Finder
  • N’oubliant pas d’activer Gatekeeper dans le menu de configuration « sécurité et confidentialité ». L’option « Autoriser les applications téléchargées de : » ne doit pas être configurée à « N’importe où » :

Un article du site « taoeffect » mentionne également le fait d’installer Firefox pour se protéger de la possibilité d’exécution. Dans les versions testées chez Advens, son utilisation ne nous a toutefois pas protégés.

Enfin, Apple est évidemment au courant de la vulnérabilité et fera son possible pour trouver des mesures de protection adaptées. L’une des pistes consistera à complexifier la mise en place de telles attaques, par exemple en renforçant le rôle du Gatekeeper ou en empêchant ou demandant une confirmation à chaque montage de ressource non fiable.

 

Conclusion 

Cette vulnérabilité fait beaucoup parler d’elle dans la communauté des experts sécurité, notamment en raison de son impact et sa couverture large. De plus, cette vulnérabilité n’affecte pas directement le système d’exploitation d’Apple mais un composant tiers, qui est fortement utilisé. Il est difficile d’accepter qu’une faille critique dans un système de mise à jour automatique soit passée si longtemps inaperçue ; mais quelle leçon pouvons-nous tirer pour éviter que cela ne se reproduise ?

Tout d’abord, souvenons-nous que contrairement à un mythe très répandu, les systèmes conçus par Apple ne sont pas mieux protégés contre les attaques que les autres. Il reste beaucoup à faire pour que la sécurité soit correctement prise en compte par les applications et le système d’exploitation d’Apple. Ces systèmes étant de plus en plus présents en entreprise (notamment dans des situations de BYOD – « Bring your own device »), ils posent un risque croissant pour la sécurité du système d’information, et constituent un vecteur de compromission initial à ne pas négliger.

N’oublions pas non plus que les bonnes pratiques habituelles contribuent, sur un Mac comme sur un PC, à élever le niveau de sécurité. Soyez particulièrement attentifs lors d’une navigation à partir des points d’accès publics sur des postes sensibles. L’utilisation d’une solution VPN robuste, par exemple, permet de ne pas être la cible d’interception réseau. Pour cette vulnérabilité en particulier, de telles pratiques permettent de réduire considérablement votre exposition – et donc de diminuer la probabilité que vous soyez la cible d’une attaque.

 

Démo : exécution d'un binaire "Calculette.app" présent sur le serveur de l'attaquant à partir de l'exploitation de la vulnérabilité

 

Loïc Castel, Auditeur sécurité, Advens