Microsoft découvre une faille dans macOS liée à A/UX (et déjà corrigée)

Pierre Dandumont |

Microsoft vient de publier un article sur une faille découverte dans différentes versions de macOS, nommée Achille. Elle a été corrigée récemment avec les dernières mises à jour de macOS Ventura, Monterey (12.6.2) et Big Sur (11.7.2).

Une faille liée à A/UX, le premier Unix Apple

La faille CVE-2022-48281 (Achille, donc) a été découverte fin juillet 2022 et permet de passer outre certaines des protections liées à Gatekeeper. Elle se base sur des technologies Apple assez anciennes, qui datent d'A/UX, le premier UNIX d'Apple.

Shoebill : un émulateur pour faire fonctionner A/UX

Shoebill : un émulateur pour faire fonctionner A/UX

Dans les systèmes de fichiers Apple (HFS, HFS+ et maintenant APFS), il existe des métadonnées (pour résumer simplement, des données au sujet des données) utilisées par le système d'exploitation pour gérer certaines fonctions (position dans le Finder, icône, etc.). À la sortie d'A/UX, un UNIX pour les Macintosh 68K, Apple a défini deux méthodes (AppleSingle et AppleDouble) pour prendre en charge les métadonnées avec les systèmes de fichiers qui ne gèrent pas les métadonnées. Cette solution existe toujours en 2022, ce sont les fichiers qui commencent par un ._ que vous pouvez voir sur les clés USB formatées en FAT ou sur les partages réseau. macOS cache normalement les fichiers en question, mais certains OS les affichent tout de même.

Le message si vous avez téléchargé une application sur Internet.

Maintenant, parlons de Gatekeeper. Si vous téléchargez un programme sur Internet, macOS va placer un fichier com.apple.quarantine pour indiquer son origine et afficher un message de prévention. L'idée de la faille Achille est d'empêcher la création de ce fichier, ce qui permet d'éviter le message d'erreur. Les premiers essais n'ont pas été fructueux, mais en regardant en détail comment fonctionne la technologie AppleDouble, les chercheurs de chez Microsoft ont trouvé une solution.

Les détails sont dans l'article, mais l'idée est simple : définir des autorisations qui empêchent Safari de créer le fichier. Dans les systèmes UNIX (comme macOS), chaque fichier est lié à des autorisations, qui indiquent ce que l'utilisateur (au sens UNIX du terme, pas la personne derrière l'écran) peut faire. En modifiant manuellement les informations liées à AppleDouble, il devenait donc possible — avant la correction — de créer un fichier qui (une fois décompressé) empêchait de créer le fichier com.apple.quarantine. Microsoft a publié une vidéo pour bien montrer le problème.

La faille ne passait par contre pas toutes les mesures liées à Gatekeeper : le programme modifié devait tout de même être signé et notarié pour être lancé sans message de prévention.

avatar marc_os | 

En modifiant manuellement les informations liées à AppleDouble, il devenait donc possible...

Donc en trafiquant la serrure de la porte depuis l'intérieur, on pouvait entrer dans la maison.
 
 
Edit : Le problème a été résolu sur les OS récents. Mais c'est cool, Microsoft, ces b.t.rds, donnent la recette à ceux qui voudraient tenter d'attaquer les vieux Macs qui n'y ont pas droit. Quel est leur intérêt ? Nuire à Apple ? Aider les pirates ?

avatar codeX | 

@marc_os

J'aurais tendance à penser que Facebook et consorts ne se seraient pas privés d'une telle joie.

avatar r e m y | 

C'est généralement la pratique lorsqu'une faille est découverte. Une fois la faille officiellement corrigée, le découvreur détaille sa découverte. (Pas de sa faute si ici, Apple considère que les Macs un peu vieux ne méritent pas d'être immunisés).

C'est pas non plus la faille du siècle ! Ils ont réussi à empêcher la création du fichier com.Apple.quarantine pour éviter l'affichage du message d'alerte sur l'origine inconnue de l'application mais... "le programme modifié devait tout de même être signé et notarié pour être lancé sans message de prévention" donc le message s'affiche quand même 🤪

avatar Ginger bread | 

@marc_os

Acheter Microsoft 😝

avatar occam | 

@marc_os

☣️"Quel est leur intérêt ? Nuire à Apple ? Aider les pirates ?"

En votre faveur, il faut présumer que le complotisme virulent du fil du jour au sujet de Twitter vient de déteindre — temporairement, on l’espère — sur votre jugement. Parce que même à votre niveau habituel de hargne, vous devriez bien savoir que non. Revenez-nous en meilleure forme, distillant un poison plus subtilement insidieux. Sinon, ce n’est pas du jeu.

avatar marc_os | 

@ occam

Ah, désolé, je croyais que le complotisme était devenu la règle.
Et oui, il semblerait que je sois mûr pour quelques jours de vacances.

Et comme je l'ai écrit sous-entendu au départ, modifier manuellement les informations liées à AppleDouble, il faut déjà pouvor le faire... Du coup, pas sûr que ce soit une vraie faille avec les vielles versions de macOS, même celles d'avant la notarisation et autres mesures de sécurité introduites plus tard.
Bon, et puis j'avais pas ma dose quotidienne de râlage, il fallait que je me défoule.

avatar Sillage | 

@marc_os

« Donc en trafiquant la serrure de la porte depuis l'intérieur, on pouvait entrer dans la maison. »
 
Bravo Sherlock. Ceci est la même chose pour nombre de failles de sécurités découvertes. 👏
 

« Microsoft, ces b.t.rds »
Quelle haine. Oh, c’est vrai, forum pro Mac. Je parie que si c’était un white hacker indépendant, il n’y aurait pas eu de venin. En attendant, petite parenthèse, entre la pomme et crosoft, il y en a qui se pense mieux que vous en vous dictant tel un dictateur ce qui est bon pour vous et comment vivre, il y en a qui n’est quasiment jamais à l’écoute de ses utilisateurs, etc… Bref, l’autre n’est pas un saint non-plus, mais le balancier a changé de position depuis plusieurs années. 😉

« donnent la recette à ceux qui voudraient tenter d'attaquer les vieux Macs qui n'y ont pas droit. »

Il me semble que c’est la chose courante. Je vous invite à vous renseigner sur le nombre de failles publiées et jamais corrigées de Windows XP par exemple, et même Windows 2000, qui sont des systèmes utilisés encore par le système de santé en France par exemple ! Distribution de venin ciblée ?

« Quel est leur intérêt ? Nuire à Apple ? Aider les pirates ? »

Je vous invite à regarder comment fonctionne la publication de découvertes. Vous le dites vous-même « Le problème a été résolu sur les OS récents. ». Étonnant de ne pas voire une réflexion un peu plus poussée.
[venin]
Classe de psychologie, année 2054.
Chers élèves, ici présent le parfait exemple de l’utilisateur conditionné Apple, qui est membre d’un culte pas reconnu comme tel officiellement suivant et protégeant son gourou coûte que coûte. Sujet très intéressant qui a laissé son libre arbitre de côté, mais je le sait pas encore… »
[/venin]

Bonne recherche (ou simplement lire la réponse de “@r e m y”.

Cordialement.

PS
Avant de lâcher plus de venin, j’espère que les balises satiriques sont comprises.

avatar marc_os | 

@ Sillage

Cf. ma réponse à occam

avatar Sillage | 

@marc_os

🤝👍

Comment fais-tu toutes ces mises en forme ?
(Je n’utilise que l’application iOS, sûrement effectué depuis un navigateur sur ordinateur)

avatar marc_os | 

@ Sillage

> Comment fais-tu toutes ces mises en forme ?

Via le site web qui autorise quelque tags HTML, dont em, strong, b, i, s et a.
J'ai supprimé l'app de mon iPhone il y a longtemps car elle le faisait chauffer à outrance alors que l'app du Monde par exemple le laisse froid. Cela s'est peut-être amélioré depuis, mais en même temps comme ça ça limite mes visites à quand je suis devant un ordi...

avatar mat16963 | 

@marc_os

C’est sûr que ce n’est pas Apple qui va dévouer une équipe à trouver et signaler gratuitement les failles chez la concurrence…
Qu’est-ce qu’il ne faut pas entendre…. C’est une pratique courante dans le milieu.

avatar Alex Giannelli | 

Que représente l’icône dans la miniature de l’article ?

avatar r e m y | 
avatar Alex Giannelli | 

@r e m y

Merci 👍🏻

avatar BeePotato | 

@ Pierre Dandumont :
« Si vous téléchargez un programme sur Internet, macOS va placer un fichier com.apple.quarantine pour indiquer son origine »

Ce n’est pas un fichier, mais un attribut étendu, placé sur le fichier qu’on vient de télécharger.

avatar BeePotato | 

Ce que je ne comprends pas, c’est pourquoi l’article de Microsoft insiste autant sur AppleDouble. Car la faille qu’ils ont identifiée provient avant tout des ACL, et du fait qu’il est possible de les utiliser pour empêcher la création de l’attribut étendu servant à la mise en quarantaine.

Dans l’histoire, AppleDouble ne sert que de moyen de transport pour ces ACL au sein d’une archive ZIP. Et il n’est probablement pas nécessaire de s’embêter à créer manuellement la partie cachée de la paire de fichiers AppleDouble comme ils l’ont fait : ça marche sans doute tout aussi bien si on crée l’archive sur un Mac (après avoir réglé les ACL qui vont bien).

avatar koko256 | 

@BeePotato

J'imagine que mettre un ACL dans un zip téléchargé sur Internet n'est pas possible. C'est probablement une astuce pour mettre l'ACL avec un téléchargement.

avatar BeePotato | 

@ koko256 : « J'imagine que mettre un ACL dans un zip téléchargé sur Internet n'est pas possible. »

Si, justement, c’est ce sur quoi repose l’exploitation de la faille : l’existence du format AppleDouble, qui permet précisément ça. Si on crée un fichier ZIP dans lequel se trouve une paire de fichiers au format AppleDouble (un fichier toto est accompagné d’un fichier ._toto au bon format), lors de l’extraction MacOS associe à toto les métadonnées contenues dans ._toto (et si on est sur un système de fichiers HFS+ ou APFS, on se retrouve avec un seul fichier, puisqu’il y a de quoi stocker ces métadonnées).
C’est ce que décrit l’article de Microsoft.

Mais ce que je faisais remarquer, c’est que dans cette histoire le format AppleDouble et son traitement n’est pas le cœur de la faille, mais juste un vecteur. Et surtout, qu’il y a un moyen plus simple que de créer manuellement le fichier ._toto pour utiliser ce vecteur, puisqu’il suffit de créer l’archive sur MacOS, qui s’occupe alors de faire tout ça pour nous.

En gros, je trouve cette longue description du fonctionnement d’AppleDouble et de comment en créer manuellement constitue une distraction qui éloigne le lecteur de la base du problème, qui réside dans l’usage possible d’ACL pour éviter la mise en quarantaine.

avatar gaurejac | 

@BeePotato : personne ne dit que la faille vient d'AppleDouble en soit, mais la faille vient du fait que le traitement des ressources/metadonnées AppleDouble se faisait en priorité et en amont de l'attribution du tag ACL de quarantaine.

de fait si tu désactives la partie qui traite AppleDouble, la faille n'existe pas, car il est absolument impossible de télécharger un fichier sur internet qui possède déjà des ACL "apple" (et il me semble qu'aucun protocole de téléchargement - ftp ou http - ne conserve non plus d'ailleurs les ACL posix)

En gros quand tu dis qu'on pourrait créer manuellement un fichier ._toto sous macOS... ben oui mais non : car après si tu veux transmettre le fichier à une cible tu passes obligatoirement par un serveur avec un filesystem et par des protocoles de transfert (ftp http) qui ignorent ces ACL apple, et ce faisant cassent l'attaque potentielle.
c'est bien le traitement des ACL via AppleDouble qui est la faille ici

il n'y aurait eu aucune faille si le tag de quarantaine ACL (com.apple.quarantaine) était appliqué sur le fichier téléchargé avant la restitution/fusion des métadonnées sur le fichier téléchargé.

avatar BeePotato | 

@ gaurejac : « personne ne dit que la faille vient d'AppleDouble en soit »

Si je voulais chipoter, je citerais la première phrase de ton commentaire précédent. 😉
Mais je me contenterai de faire remarquer que ce qui tombe bien, c’est que je n’ai écrit nulle part que personne avait dit ça.

J’ai juste fait remarquer que je trouvais l’article de Microsoft déséquilibré dans sa présentation de la faille, d’autant plus qu’il passe beaucoup de temps à présenter une recherche de comment créer le fichier ._ qui va bien (me donnant une impression de « je découvre AppleDouble ») alors qu’il y existe une méthode très simple pour le créer.

Au passage, ça permet d’éclaircir les choses pour ceux qui, d’après leurs commentaires plus haut, semblent penser que cette faille est compliquée à exploiter à cause du passage de l’article de MacG parlant de « modification manuelle des informations liées à AppleDouble » : non, il n’y a rien de compliqué. Il suffit d’être sur un Mac, de faire un coup de chmod sur l’application qu’on veut distribuer, puis d’en faire un ZIP à placer sur le serveur de distribution. Pas la peine de se prendre la tête comme l’ont fait les gars de Microsoft dans leur article, MacOS règle tous les détails pour nous. 🙂

« mais la faille vient du fait que le traitement des ressources/metadonnées AppleDouble se faisait en priorité et en amont de l'attribution du tag ACL de quarantaine. »

Ce qui est l’ordre normal des choses : on reconstitue d’abord un fichier d’après le contenu de l’archive, avant de le mettre en quarantaine. Si cet attribut de quarantaine était traité de façon spéciale comme il se doit et non comme n’importe quel autre vulgaire attribut étendu, le problème de ne serait pas posé.
À une époque, pour une telle fonction Apple aurait ajouté un attribut supplémentaire à son système de fichiers (en utilisant un des bits marqués comme « réservés pour usage futur » dans HFS+, et en prévoyant directement cet attribut parmi les métadonnées des fichiers lors de la création d’APFS), au lieu d’utiliser un simple attribut étendu puis de se rendre compte au fur et à mesure que ce n’est pas une bien bonne solution pour une fonction de sécurité.

« il est absolument impossible de télécharger un fichier sur internet qui possède déjà des ACL "apple" »

Il est parfaitement possible de télécharger des fichiers conservant leurs ACL Apple sans utiliser le format AppleDouble. Il suffit de les mettre dans une archive dont le format préserve ces ACL. Par exemple le format XAR (plus maintenu mais existant toujours) ou, surtout, une image-disque incluant un système de fichiers Apple. Je ne sais pas si le format Stuffit, dans ses dernières versions, prenait en charge les ACL.
AppleDouble, c’est utilisé pour les formats d’archives venus d’autres OS (ZIP, TAR) et qui, du coup, ne prévoient rien pour les métadonnées de MacOS.

« En gros quand tu dis qu'on pourrait créer manuellement un fichier ._toto sous macOS... »

Euh… je n’ai pas dit ça. Au contraire, j’ai rappelé qu’en préparant l’archive sur MacOS, on n’avait pas besoin de créer manuellement ce fichier.

« ben oui mais non : car après si tu veux transmettre le fichier à une cible tu passes obligatoirement par un serveur avec un filesystem et par des protocoles de transfert (ftp http) qui ignorent ces ACL apple, et ce faisant cassent l'attaque potentielle. »

Ben non : si tu as préparé le fichier ._toto (que ce soit manuellement ou en laissant MacOS faire le boulot), c’est bien pour ensuite le distribuer conjointement avec le fichier toto, dans une archive, permettant aux métadonnées (dont les ACL) de survivre au passage via les divers systèmes de fichiers et protocoles de transfert.

avatar gaurejac | 

@BeePotato : bien vu, effectivement j'ai corrigé je voulais bien dire que ça venait de l'implémentation d'Appledouble et pas du format en soit.

Juste pour résumer sur un point, quand tu dis que "l’ordre normal des choses : on reconstitue d’abord un fichier d’après le contenu de l’archive, avant de le mettre en quarantaine" je ne suis pas d'accord avec le fait que ce soit l'ordre normal des choses.

Pour moi c'est l'inverse. On télécharge un fichier (une archive) depuis internet ?
Dans ce cas le fichier n'existe pas encore sur le disque local donc :
1 - Safari crée le nouveau fichier sur le disque (touch) et lui attribue immédiatement l'attribut com.apple.quarantaine (pourquoi attendre que le fichier soit fini de télécharger ?)
2 - les données sont écrites dans le fichier, une fois fini le téléchargement le "stream" est clos, le fichier est nommé

Et ensuite lors de la décompression de l'archive (lancée par Safari) il y a là aussi un ordre pour appliquer l'attribut quarantaine.
l'attribut quarantaine étant déjà présent sur le fichier archive à décompresser, quand les fichiers sont recréés à partir de l'archive, l'approche sécuritaire devrait être de commencer par écrire l'attribut quarantaine (qui est hérité de l'archive) avant d'écrire les ACL reconstitués de la 2e partie Appledouble.

avatar BeePotato | 

@ gaurejac : « quand les fichiers sont recréés à partir de l'archive, l'approche sécuritaire devrait être de commencer par écrire l'attribut quarantaine (qui est hérité de l'archive) avant d'écrire les ACL reconstitués de la 2e partie Appledouble. »

En effet, tu as raison, c’est plus sécurisé dans cet ordre.

avatar koko256 | 

@BeePotato

Donc il y a bien besoin d'AppleDouble pour que la faille existe. Il ne suffit pas "juste de mettre une ACL", il faut mettre les ACL sur un mac et sur un support avec un système de fichiers qui n'a pas d'ACL. L'article est effectivement assez romancé mais bon, laissons MS gouter son plaisir d'avoir trouvé une faille chez son meilleur ennemi.

avatar gaurejac | 

@BeePotato : non la faille ne vient pas des ACL en soit.. la faille vient justement de l'implémentation d'AppleDouble.

En gros les serveurs Webs unix/linux et microsoft, soit 99,999% des serveurs, sont en systèmes de fichiers ext4/btrfs/NTFS etc... qui ne gèrent pas les ACL ou ne gèrent pas les ACL Apple, qui sont ici utilisés pour l'exploit.

Donc en cas normal, on ne peut pas faire télécharger à une "cible" un fichier avec des ACL Apple qui empêcheraient la mise en quarantaine.

Par contre ce que montre microsoft c'est on peut très bien préparer un fichier avec ces attributs étendus (ACL) qui vont interdire tout autre rajout d'attribut étendu donc l'ACL de mise en quarantaine..
et grâce à AppleDouble :
- on peut stocker ce fichier avec ses ACL Apple sur des serveurs web non Apple
- Safari peut télécharger ce fichier et décoder l'AppleDouble
- et Safari va restaurer les ACL venant d'AppleDouble AVANT d'appliquer l'ACL de quarantaine... oups !
le fichier peut donc être lu sans être bloqué par Gatekeeper.

avatar BeePotato | 

@ gaurejac : « non la faille ne vient pas des ACL en soit.. »

Le problème de base est bien que l’écriture de l’attribut com.apple.quarantine utilisé par Gatekeeper respecte les ACL liées aux attributs étendus, alors que cet attribut devrait être traité comme un cas spécial et pouvoir être lu et écrit quelles que soient les autorisations du fichier concerné.

AppleDouble est juste un vecteur permettant de transporter ces ACL dans un format d’archive généraliste (ainsi que sur les systèmes de fichiers non Apple, mais la démo de Microsoft porte sur les archives, puisque c’est ça qu’on va télécharger depuis un serveur HTTP).

avatar gaurejac | 

@BeePotato : pas d'accord, je trouverais ça dangereux de pouvoir appliquer le tag com.apple.quarantaine quelles que soient les autorisations.
ça semble un peu le meilleur moyen de planter des systèmes entiers : en pouvant appliquer ce tag à tort sur des exécutables indispensables au système.

Oui AppleDouble est un vecteur permettant de transporter des ACL et c'est bien dans l'implémentation de ça qu'il y a un problème, et non pas dans la gestion des ACL en général.

La faille concerne ici uniquement la gestion de l'AppleDouble qui applique des attributs à des fichiers téléchargés en amont de l'application du tag quarantaine et pas l'inverse, et c'est ça qui est problématique.

avatar BeePotato | 

@ gaurejac : « pas d'accord, je trouverais ça dangereux de pouvoir appliquer le tag com.apple.quarantaine quelles que soient les autorisations.
ça semble un peu le meilleur moyen de planter des systèmes entiers : en pouvant appliquer ce tag à tort sur des exécutables indispensables au système. »

Vu comment le système et les exécutables indispensables sont maintenant protégés sur un volume APFS interdit d’écriture, je pense que ce risque n’en est plus un.

« et c'est bien dans l'implémentation de ça qu'il y a un problème, et non pas dans la gestion des ACL en général. »

Je n’ai pas dit que c’était dans la gestion des ACL en général — mais dans la gestion de la quarantaine via un simple attribut étendu, soumis aux ACL dédiées aux attributs étendus.

Et tu le reconnais toi-même implicitement, puisque la solution que tu proposes consiste à contourner ces ACL (en les ignorant le temps d’écrire l’attribut en question).

« La faille concerne ici uniquement la gestion de l'AppleDouble qui applique des attributs à des fichiers téléchargés en amont de l'application du tag quarantaine et pas l'inverse, et c'est ça qui est problématique. »

La faille n’est déclenchée que par cette gestion de l’AppleDouble lors de la décompression parce que les autres cas problèmatiques ont déjà été identifiés et contournés de la même façon (par exemple, la copie, depuis une image-disque en quarantaine, d’un fichier doté des mêmes ACL). Ce que je dis, c’est que si l’attribut dédié à la quarantaine était un peu plus spécial, il n’y aurait pas besoin d’identifier et corriger un par un tous les cas problématiques (au risque d’en oublier, comme ça avait été le cas jusqu’ici pour le cas présenté dans l’article).

CONNEXION UTILISATEUR