Il y avait une discussion dans les commentaires pour savoir si cela pouvait être considéré comme une vulnérabilité. Mais j'étais accro à un commentaire de l'auteur:
Cela pourrait-il être implémenté, par exemple, sous la forme d'une DLL qui, lorsqu'elle est appelée par son API, vérifierait la signature numérique du programme appelant?
Le fait est que juste avant cela, j'ai fait des recherches sur plusieurs programmes qui reposaient de la même manière sur la vérification de signature numérique. Et ce chèque était très facile à contourner.
La signature numérique d'un fichier ne correspond qu'à l'exécutable lui-même, mais un programme en cours d'exécution n'est pas seulement un exécutable. Il existe plusieurs façons d'influencer le fonctionnement du programme sans changer le fichier exécutable: vous pouvez remplacer les bibliothèques chargées ou injecter du code directement en mémoire.
J'ai regardé le profil de l'auteur: "Travaille dans: Doctor Web". Mais que se passe-t-il si vous regardez si les produits de cette société utilisent le chèque dont parle l'auteur? J'ai décidé de regarder et, spoiler, j'ai trouvé une vulnérabilité qui vous permet d'élever vos privilèges à l'utilisateur système Dr.Web Security Space pour Windows.
Service de renseignements
Je ne comprends pas les produits Doctor Web, j'ai donc pris le premier que j'ai pu télécharger sur le site Web - c'était Dr.Web Security Space 12 pour Windows. Aux paramètres par défaut, ce produit vérifie les mises à jour toutes les demi-heures. Et une vulnérabilité a été trouvée dans le mécanisme de mise à jour.
Ci-dessous, je propose une vidéo d'opération décrivant ce qui se passe dans la vidéo avec une référence au temps. Il y aura également une description de ce qu'était exactement la vulnérabilité.
Vidéo d'opération
La démo s'exécute sur Windows 10 x64 à partir d'un utilisateur sans droits d'administrateur.
0: 00-0: 12 afficher via la console Windows que l'utilisateur actuel n'est pas un administrateur
0: 12-0: 24 afficher la version installée de Dr.Web Security Space
0: 24-0: 29 Le fichier drweb_eop_upd_dll.dll se trouve dans le dossier sur le bureau (les codes source et le fichier sont joints au ticket)
0: 29-0: 34 Je montre qu'il y a 3 fichiers dans le dossier C: \ ProgramData \ Doctor Web \ Updater \ etc
0: 34-0: 47 Je copie la bibliothèque drweb_eop_upd_dll.dll dans le dossier sur desktop et une copie, j'appelle version.dll, une autre - cryptui.dll
0: 47-0: 56 Je copie le fichier C: \ Program Files \ Common Files \ Doctor Web \ Updater \ drwupsrv.exe dans le dossier sur le bureau, à côté de la dll ...
0: 56-1: 00 exécuter le fichier copié
Le fichier exécutable drwupsrv.exe du dossier sur le bureau charge le version.dll situé à proximité. Cette bibliothèque crée le fichier C: \ ProgramData \ Doctor Web \ Updater \ etc \ drwupsrv.xml.new. L'utilisateur a le droit de créer des fichiers dans le dossier C: \ ProgramData et en profondeur, il s'agit donc d'une opération légale. Si vous essayez de créer un tel fichier manuellement, il est probable que les mécanismes de sécurité de Dr.Web empêchent une telle opération. Mais en fonctionnement, le fichier est créé pour le compte de drwupsrv.exe, qui contourne probablement les contrôles internes et le fichier est créé. En fait, il s'agit d'un contournement de la vérification de signature même qui est discutée au début de l'article.
1: 00-1: 22: démonstration du fichier créé et de son contenu. Dans un sens général, le fichier a le même contenu que le fichier C: \ ProgramData \ Doctor Web \ Updater \ etc \ drwupsrv.xml, mais tous les chemins pointent vers un dossier sur le bureau (C: \ Users \ User \ Desktop \ dwtest)
1: 22-2 : 00 rien ne se passe (à ce stade, j'attends le processus de mise à jour du logiciel, qui par défaut se produit toutes les demi-heures et l'heure prévue peut être trouvée dans les journaux)
2: 00-2: 14 apparemment, en prenant le fichier de configuration créé, le programme de mise à jour voit que il n'y a pas de fichiers logiciels Dr.Web dans le dossier C: \ Users \ User \ Desktop \ dwtest, il commence à y copier les fichiers logiciels.
Les fichiers copiés incluent le fichier dwservice.exe, qui est lancé au moment de la mise à jour en tant qu'utilisateur NT AUTHORITY \ SYSTEM. Ce fichier charge la bibliothèque cryptui.dll, qui se trouvait dans le dossier C: \ Users \ User \ Desktop \ dwtest. Le code de la bibliothèque lance simplement la console interactive, qui est visible à l'écran. Utilisez la commande whoami pour vous assurer que les droits système sont obtenus.
Résumé
Le rapport de vulnérabilité a été envoyé à Doctor Web et, semble-t-il, les développeurs ont tout corrigé.
Calendrier:
15/05/2020 - Contacter le support technique avec une demande de fournir un contact de sécurité.
20/05/2020 - Je reçois une réponse indiquant qu'il est possible d'envoyer un rapport dans cet appel.
20/05/2020 - Je transmets un rapport
14/06/2020 - Je reçois une réponse indiquant que la vulnérabilité a été corrigée pour la version 12. En attente de portage pour la version 11.
07/07/2020 - Les développeurs confirment que les correctifs ont été publiés.
Cet article en anglais.