Récemment, le projet écosystémique MobiusDAO de la BNB Chain a subi une attaque, l'attaquant a tiré parti d'une vulnérabilité logique dans le contrat du projet pour frapper une grande quantité de tokens MBU et en tirer profit. L'équipe de sécurité Beosin a analysé la vulnérabilité de cet incident et suivi les fonds, et partage les résultats comme suit :
Étapes détaillées de l'attaque
(1) L'attaquant a d'abord déployé le contrat d'attaque (0x631adFF068D484Ce531Fb519Cda4042805521641)
et a utilisé ce contrat pour appeler la fonction de dépôt du contrat proxy Mobius 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531, puis le contrat Mobius a frappé plus de 9.7x10^15 tokens MBU et les a envoyés au contrat d'attaque.
Hachage de transaction d’attaque : 0x2a65254b41b42f39331a0bcc9f893518d6b106e80d9a476b8ca3816325f4a150
(2) Le contrat d'attaque appelle le contrat associé à PancakeSwap pour vendre des jetons MBU après avoir reçu les jetons MBU afin de réaliser des bénéfices.
Analyse des vulnérabilités
La fonction de dépôt du contrat Mobius émettra une quantité équivalente de jetons MBU au déposant après avoir reçu un dépôt. Dans cette fonction, chaque fois qu'un utilisateur dépose des WBNB, la fonction récupère le prix du BNB pour calculer le nombre de jetons MBU à émettre et à transférer.
Le prix de BNB provient de la fonction getBNBPriceInUSDT, qui retourne un prix précis à 18 décimales. Comme indiqué dans l'image ci-dessus, le prix retourné est d'environ 656 dollars.
En raison du fait que le contrat logique de Mobius n'est pas open source, nous avons découvert par rétro-ingénierie qu'une vulnérabilité se produisait lorsque la fonction retournait un résultat de 18 décimales. Le contrat multipliait à nouveau cette valeur par 10^18, produisant ainsi une quantité de jetons MBU supérieure de 10^18 fois par rapport au résultat normal.
Suivi des fonds volés
Beosin Trace a suivi les fonds volés et a découvert : les fonds volés ont été convertis par les attaquants en environ 2,15 millions de jetons USDT, dont 1,35 million de jetons USDT ont été échangés contre des BNB puis déposés dans Tornado Cash, et les 800 000 jetons USDT restants ont été échangés par chaîne pour des ETH sur la chaîne Ethereum, avant d'être déposés dans Tornado Cash. Beosin Trace a ajouté les adresses liées aux hackers à la base de données des adresses noires et continuera à suivre la situation.
Selon l'analyse de Beosin Trace, tous les fonds volés ont été déposés dans Tornado Cash.
Résumé
Le cœur de cette attaque est que l’attaquant a profité d’une erreur arithmétique dans le contrat du projet pour frapper une énorme quantité de jetons et les vendre à profit. Cela aurait été un bogue de code très facile à trouver, mais l’équipe de projet de Mobius n’avait pas auparavant effectué de tests de code exhaustifs sur le contrat pour trouver le bogue et n’a pas effectué d’audit, ce qui a entraîné une perte de plus de 2,15 millions de dollars. L’équipe de sécurité de Beosin a suggéré à l’équipe de projet de renforcer l’audit et les tests de sécurité du code contractuel du projet afin d’éviter des situations similaires.
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
Perte de 2,15 millions de dollars ! Analyse de la vulnérabilité de l'événement MobiusDAO et suivi des fonds volés
Rédigé par : Beosin
Récemment, le projet écosystémique MobiusDAO de la BNB Chain a subi une attaque, l'attaquant a tiré parti d'une vulnérabilité logique dans le contrat du projet pour frapper une grande quantité de tokens MBU et en tirer profit. L'équipe de sécurité Beosin a analysé la vulnérabilité de cet incident et suivi les fonds, et partage les résultats comme suit :
Étapes détaillées de l'attaque
(1) L'attaquant a d'abord déployé le contrat d'attaque (0x631adFF068D484Ce531Fb519Cda4042805521641)
et a utilisé ce contrat pour appeler la fonction de dépôt du contrat proxy Mobius 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531, puis le contrat Mobius a frappé plus de 9.7x10^15 tokens MBU et les a envoyés au contrat d'attaque.
Hachage de transaction d’attaque : 0x2a65254b41b42f39331a0bcc9f893518d6b106e80d9a476b8ca3816325f4a150
(2) Le contrat d'attaque appelle le contrat associé à PancakeSwap pour vendre des jetons MBU après avoir reçu les jetons MBU afin de réaliser des bénéfices.
Analyse des vulnérabilités
La fonction de dépôt du contrat Mobius émettra une quantité équivalente de jetons MBU au déposant après avoir reçu un dépôt. Dans cette fonction, chaque fois qu'un utilisateur dépose des WBNB, la fonction récupère le prix du BNB pour calculer le nombre de jetons MBU à émettre et à transférer.
Le prix de BNB provient de la fonction getBNBPriceInUSDT, qui retourne un prix précis à 18 décimales. Comme indiqué dans l'image ci-dessus, le prix retourné est d'environ 656 dollars.
En raison du fait que le contrat logique de Mobius n'est pas open source, nous avons découvert par rétro-ingénierie qu'une vulnérabilité se produisait lorsque la fonction retournait un résultat de 18 décimales. Le contrat multipliait à nouveau cette valeur par 10^18, produisant ainsi une quantité de jetons MBU supérieure de 10^18 fois par rapport au résultat normal.
Suivi des fonds volés
Beosin Trace a suivi les fonds volés et a découvert : les fonds volés ont été convertis par les attaquants en environ 2,15 millions de jetons USDT, dont 1,35 million de jetons USDT ont été échangés contre des BNB puis déposés dans Tornado Cash, et les 800 000 jetons USDT restants ont été échangés par chaîne pour des ETH sur la chaîne Ethereum, avant d'être déposés dans Tornado Cash. Beosin Trace a ajouté les adresses liées aux hackers à la base de données des adresses noires et continuera à suivre la situation.
Selon l'analyse de Beosin Trace, tous les fonds volés ont été déposés dans Tornado Cash.
Résumé
Le cœur de cette attaque est que l’attaquant a profité d’une erreur arithmétique dans le contrat du projet pour frapper une énorme quantité de jetons et les vendre à profit. Cela aurait été un bogue de code très facile à trouver, mais l’équipe de projet de Mobius n’avait pas auparavant effectué de tests de code exhaustifs sur le contrat pour trouver le bogue et n’a pas effectué d’audit, ce qui a entraîné une perte de plus de 2,15 millions de dollars. L’équipe de sécurité de Beosin a suggéré à l’équipe de projet de renforcer l’audit et les tests de sécurité du code contractuel du projet afin d’éviter des situations similaires.