Dévoiler le mot de passe à la place de l’indice, c’est ce que faisait l’Utilitaire de disque de High Sierra concernant les volumes APFS chiffrés avant qu’Apple ne sorte en catastrophe un correctif.
Quelle est la cause de ce bug énorme ? En l’absence d’explications précises de la part d’Apple, l’auteur du blog Cocoa Engineering s’est livré à un exercice détaillé de rétro-ingénierie.
Le développeur a commencé par comparer la version de l’Utilitaire de disque de High Sierra avec la nouvelle incluse dans la Supplemental Update. Résultat : aucune différence.
Il a alors poursuivi ses recherches dans les frameworks liés, dont StorageKit, le composant qui fait le lien entre APFS et l’Utilitaire de disque. En examinant son code, il a trouvé des différences entre les deux versions de StorageKit… et l’origine du bug.
Logiquement, il y a une variable pour le mot de passe et une autre pour l’indice. Or, c’était la même variable, celle du mot de passe, qui était utilisée comme valeur dans les deux cas, ce qui signifie que le mot de passe était considéré comme l’indice (et qu’il était stocké en clair).
Pas de faille dans APFS donc, il s’agissait d’une bête erreur de programmation — mais avec une lourde conséquence. « C’est un exemple typique de bugs où du code avec une structure commune est copié-collé sans que le développeur pense à effectuer toutes les modifications nécessaires », commente le chercheur.
Mais pourquoi le bug se produisait avec l’Utilitaire de disque mais pas avec les lignes de commandes ? Parce que ces deux méthodes n’utilisent pas exactement le même cheminement.
Rappelons que l’application de la mise à jour n’est pas suffisante à elle seule pour protéger les volumes APFS chiffrés créés avant son arrivée. Il faut supprimer et restaurer les volumes concernés, indique Apple.