Dirty Stream : quand une application Android peut écraser les fichiers d’une autre
Dirty dancing
Dirty Stream agite le Net depuis quelques jours. Il faut dire que cette « faille » fait les gros titres à coups de milliards de smartphones Android touchés. Suivant comment les applications sont programmées, elles peuvent se laisser berner par un pirate qui peut écraser des fichiers pour en prendre le contrôle. Inutile de paniquer pour autant, des correctifs sont déployés.
Le 06 mai à 15h39
6 min
Sécurité
Sécurité
La semaine dernière, Microsoft a publié un billet de blog pour présenter Dirty Stream, présenté comme un « modèle de vulnérabilité courant dans les applications Android ». Les risques sont réels puisque cela peut aller jusqu’à l’exécution de code arbitraire et au vol de jetons d’identification, deux situations très dangereuses.
Avant de paniquer, un point important : Microsoft a prévenu les développeurs bien en avance afin de pouvoir corriger le tir. C’est notamment le cas des applications de gestionnaire de fichier de Xiaomi et WPS Office. Elles ont été mises à jour dès le mois de février, bien avant la publication de ce bulletin d’alerte. Microsoft s’est également rapproché de Google, qui a mis en ligne une page sur son site dédié aux développeurs Android (et une autre ici) afin de prévenir les développeurs et leur proposer des protections à mettre en place.
Content Provider : gare à l’implémentation
Mais de quoi s’agit-il exactement ? Microsoft commence par un rappel sur le fonctionnement du système d’exploitation : « Android impose l’isolation en attribuant à chaque application son propre espace dédié pour le stockage des données et la mémoire. Pour faciliter le partage des données et des fichiers, Android propose un composant appelé Content Provider, qui agit comme une interface pour gérer et exposer les données aux autres applications, de manière sécurisée ».
Utilisé correctement, le Content Provider est décrit par Microsoft comme « une solution fiable ». Mais, comme souvent, une implémentation « inappropriée peut introduire des vulnérabilités qui pourraient permettre de contourner les restrictions de lecture/écriture dans le répertoire personnel d’une application ».
On est donc face à un cas malheureusement assez classique où il faut distinguer le protocole ou la fonctionnalité de son implémentation (c’est-à-dire sa mise en œuvre de manière pratique) dans les applications. Comme on a pu le voir par le passé (ici, là et encore ici ou là… et ce n’est que la partie visible de l’iceberg), il peut y avoir une grande différence entre les deux.
On vous épargne le fonctionnement précis du Content Provider (détaillé ici par Google), mais il arrive que des applications « ne valident pas le contenu du fichier qu’elle reçoive et, ce qui est le plus inquiétant, utilisent le nom de fichier fourni » par l’application qui envoie les données. Ce fichier est alors stocké dans le répertoire de données interne de l’application ciblée. Voyez-vous venir le risque ?
Remplacer des fichiers par ceux des pirates
Avec des noms de fichier taillés sur mesure, l’application d’un pirate peut donc remplacer les fichiers clés de l’application cible et ainsi en prendre le contrôle. Dans tous les cas, l’impact varie en fonction des applications et de leur mise en œuvre.
« Par exemple, il est très courant que les applications Android lisent les paramètres de leur serveur à partir du répertoire shared_prefs. Dans de tels cas, l’application malveillante peut écraser ces paramètres, ce qui l’oblige à communiquer avec un serveur contrôlé par l’attaquant et à envoyer les jetons d’identification de l’utilisateur ou d’autres informations sensibles », explique Microsoft. Ce serait un peu comme si une application pouvait venir remplacer n’importe quel fichier sur votre ordinateur…
Microsoft en ajoute une couche : « Dans le pire des cas (et ce n’est pas si rare), l’application vulnérable peut charger des bibliothèques natives à partir de son répertoire de données dédié (par opposition au répertoire /data/app-lib, plus sécurisé, où les bibliothèques sont protégées contre toute modification). Dans ce cas, l’application malveillante peut écraser une bibliothèque avec du code malveillant, qui est alors exécuté lors du chargement ».
Dans le cas du gestionnaire de fichier de Xiaomi, cette technique a permis d’exécuter du code « arbitraire avec l’ID utilisateur et les autorisations du gestionnaire de fichiers ». On vous laisse imaginer le boulevard que cela ouvre au pirate, qui peut ainsi contrôler l’application et accéder à l’ensemble des fichiers ou presque.
Google confirme et donne des « astuces »
Google confirme les risques sur cette page : « Si un pirate informatique parvient à écraser les fichiers d'une application, cela peut entraîner l'exécution de code malveillant (en écrasant le code de l'application) ou sinon, permettre la modification du comportement de l'application (par exemple, en écrasant les préférences partagées de l'application ou d'autres fichiers de configuration) ».
Au-delà des applications mises à jour, d’autres peuvent encore être vulnérables. Microsoft et Google proposent donc des méthodes pour éviter de tomber dans ce piège.
« La solution la plus sûre consiste à ignorer complètement le nom renvoyé par l’application lors de la mise en cache du contenu. Certaines des approches les plus robustes que nous avons rencontrées utilisent des noms générés aléatoirement, de sorte que, même dans le cas où le contenu d’un flux entrant est mal formé, il n’altère pas l’application ». Une autre solution serait d’enregistrer les fichiers dans un répertoire dédié.
Mille milliards de mille sabords
Terminons avec un mot sur l’emballement autour de cette affaire. On entend souvent parler de milliards de terminaux affectés, ce n’est pas aussi simple. Microsoft explique avoir « identifié plusieurs applications vulnérables dans le Google Play Store qui représentaient plus de quatre milliards d'installations ». Quatre milliards d’installations (dont plus d’un milliard pour la seule application de Xiaomi) ne signifie pas que quatre milliards de smartphones sont touchés, loin de là.
La question est aussi de savoir si on doit parler d‘une mauvaise gestion des données du côté des développeurs qui laissent des données de leur application se faire écraser par des fichiers externes, ou bien d’une faille d’Android qui laisse ce genre d’action passer, peu importe ce qu’en disent les applications.
Dirty Stream : quand une application Android peut écraser les fichiers d’une autre
-
Content Provider : gare à l’implémentation
-
Remplacer des fichiers par ceux des pirates
-
Google confirme et donne des « astuces »
-
Mille milliards de mille sabords
Commentaires (5)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousModifié le 06/05/2024 à 16h41
J'espère que la suite de l'article clarifie ce bordel. Elle le fait.
"Inutile de paniquer pour autant, des correctifs sont déployés."
On parle bien d'Android, hein ?
"cela peut aller jusqu’à l’exécution de code arbitraire et au vol de jetons d’identification, deux situations très dangereuses."
Le titre a du oublier ça.
Au passage un hors sujet, je viens de me rendre compte que les sous titres sont au dessus des titres, perso j'aime pas.
"On vous épargne le fonctionnement précis du Content Provider (détaillé ici par Google), mais il arrive que des applications « ne valident pas le contenu du fichier qu’elle reçoive et, ce qui est le plus inquiétant, utilisent le nom de fichier fourni » par l’application qui envoie les données. Ce fichier est alors stocké dans le répertoire de données interne de l’application ciblée. Voyez-vous venir le risque ? "
Je crois que oui, mais l'appli qui envoie peut envoyer à une appli qui n'a rien demandé ?
Le 06/05/2024 à 17h19
Reste que le problème évoqué par l'article est délicat à aborder. Comme cela a été dit, est-ce qqchose à corriger sur les applis, ou bien un modèle de programmation à revoir côté OS ? Un peu des deux en fait. Android a toujours été un système très (trop ?) brouillon dans ses API, mais les devs ont leur part de responsabilité quand ils ne testent pas bien leurs applis, ou lorsqu'ils ne cherchent pas assez à maîtriser les APIs qu'ils utilisent.
Enfin bon, le nombre d'applis impactées ne devrait pas non plus être dramatique. On peut dormir sur nos deux oreilles, quand bien même nombre de sites de news en font leur beurre et nous pondent des titres putaclics.
Le 06/05/2024 à 20h21
Pour répondre à ta dernière question : il faut que l'appli à qui on envoie ait dit accepter des données et des fichiers venant d'autres applications.
Ils listent les types d'appli qui font souvent ça : Et quand tu charges un fichier, Android te demande à quelle appli tu veux envoyer le fichier mais une appli malveillante peut préciser directement une appli sans te demander pour l'attaquer.
Le 08/05/2024 à 21h41
Le 09/05/2024 à 01h28
Comme je l'ai conseillé plus haut, lis le billet de blog de Microsoft pour plus de détails.