Faille critique Komodo (KMD) : l’autopsie partielle du wallet Agama
Nous vous en parlions hier, alors que la situation était pour le moins tendue et confuse : une faille critique a été découverte dans Agama, le wallet du projet Komodo (KMD). Alors que la poussière commence doucement à retomber, des informations plus précises nous parviennent concernant le détail de cette faille, exploitée tant offensivement par des hackers que défensivement par l’équipe de développeurs Komodo. Explications.
Dans l’épisode précédent
Pour les retardataires, rappelons que la journée d’hier a été un tantinet agitée du côté de la communauté Komodo, qui s’est réveillée en pleine situation de crise : une vulnérabilité critique avait été découverte dans le wallet historique Agama. Cette dernière permettait de récupérer les clés privées d’un nombre très conséquent d’adresses, devenues de facto à risques. Alors que des pirates gourmands et avisés se mettaient en chasse de toutes les crypto rattachées à ces clés (aussi bien KMD, que BTC ou encore les autres assetchains liés à KMD), l’équipe des développeurs en charge du projet exploitaient également la faille. Se lançant dans une course au siphonnage des fonds des utilisateurs, ils ont annoncé avoir réussi à récupérer et « sécuriser » 8 millions de KMD et 96 BTC.
Les fonds sont désormais « à l’abri » sur les adresses suivantes, gérées par l’équipe KMD :
Satanée porte dérobée
Alors qu’hier peu d’informations circulaient à propos du détail de la faille à proprement parler, on en sait plus aujourd’hui. L’équipe d’audit informatique en charge des dépôts du projet npm dévoile ainsi dans une note de blog une partie des soubassements techniques ayant permis à la vulnérabilité d’être d’abord implanté dans le wallet Agama, puis exploitée.
La technique utilisée est maligne, dans toutes les acceptions du terme.
Il s’agit de soumettre des propositions de modification à un projet open-source, incluant un certain nombre de dépendances. Ces dépendances sont ensuite utilisées comme bases et comme liants entre paquets informatiques, lors de l’utilisation des outils du projet en question. Dans le cas d’Agama, un utilisateur nommé sawlysawly a proposé d’intégrer une dépendance electron-native-notify
^1.1.5
à l’utilitaire EasyDEX-GUI, servant à l’interface graphique du wallet.
Mais il y a un piège : si dans un premier temps, la mise à jour est utile et paraît anodine, vient un moment où l’attaquant passe à l’action et injecte un payload malicieux, lui permettant de se jouer des liens établis entre les différents paquets informatiques pour en profiter dans son propre intérêt. Concernant encore Agama, c’est quinze jours après sa proposition que sawlysawly a profité de la situation pour introduire un payload vérolé, et c’est le 16 avril que l’attaquant a pu rendre le wallet Agama vulnérable.
Par ce jeu d’addition de dépendances détournées, l’attaquant a donc incorporé une fonctionnalité bien utile : un serveur distant pouvait maintenant récupérer toutes les clés privées générées et rentrées au sein du wallet Agama.
Notons tout de même que l’on se doit de considérer pour l’heure cette explication comme seulement partielle : si l’on comprend mieux une partie du mode d’action du pirate initial, elle n’explique en effet pas totalement comment la faille a pu être également exploitée aussi rapidement par l’équipe de développeurs Komodo.
[MAJ 1] Selon des informations non confirmées mais communiquées sur le Discord de l’équipe Komodo, il semblerait que les développeurs aient eu à « hacker le hackeur » : ils auraient réussi à remonter jusqu’au serveur distant obscurci où étaient stockées les clés privées récupérées par l’attaquant, pour les récupérer eux aussi et récupérer les fonds en une attaque coordonnée massive. En effet, le hackeur s’est pour sa part comporté normalement pendant des mois pour faire croire qu’il était un simple contributeur, et il avait également pris la peine d’étaler dans le temps ses vols pour éviter d’être repéré rapidement.
Des modalités de récupération discutées
Si l’équipe npm dédiée a annoncé que la fonction npm audit alerterait les utilisateurs à risques, l’équipe Komodo a pour sa part annoncé la mise en stand-by d’Agama et invité les utilisateurs résiduels du wallet qui y stockeraient encore des fonds à les sortir d’urgence sur des adresses nouvellement générées par d’autres moyens. En effet, ce n’est pas parce que les fonds apparaissent toujours là qu’ils ne sont pas à risques, au vu de la situation.
Les discussions se poursuivent concernant le mécanisme précis de redistribution des fonds qui ont pu être sauvés par l’équipe Komodo : les utilisateurs affectés sont invités à remplir un formulaire, pour entrer dans la liste d’attente du dédommagement à venir. Pour l’heure, il est envisagé que les pertes soient mutualisées entre certains développeurs et les plus gros comptes touchés, afin de rembourser intégralement les petits épargnants crypto tout en impactant le moins possible les plus gros possédants. Affaire à suivre sur le Journal du Coin !