Analyse de l'attaque par réentrance des Prêts Flash sur Jarvis Network
Le 15 janvier 2023, le projet Jarvis_Network a subi une attaque majeure, entraînant une perte de 663,101 MATIC. Cette attaque a exploité une combinaison de Prêts Flash et d'attaques de réentrance, révélant de graves vulnérabilités dans le contrat du projet.
L'attaquant a habilement exploité une vulnérabilité dans la fonction remove_liquidity. Cette fonction renvoie les jetons ajoutés par l'utilisateur lors de la suppression de la liquidité. Étant donné que la chaîne Polygon est compatible avec EVM, lorsque MATIC est transféré au contrat, cela déclenche la logique de réentrées du contrat.
L'analyse a révélé que la clé de l'attaque réside dans l'appel de la fonction getUnderlyingPrice. Cette fonction renvoie des prix significativement différents avant et après la réentrée : avant la réentrée, le prix était de 1002157321772769944, tandis qu'après, il atteignait 10091002696492234934, soit une différence d'environ 10 fois.
La racine du problème réside dans le moment inapproprié de la mise à jour de la variable self.D dans le contrat. L'ordre d'exécution de la fonction remove_liquidity est le suivant : 1) destruction des tokens LP de l'utilisateur ; 2) envoi des fonds de staking à l'utilisateur ; 3) mise à jour de self.D. L'attaquant a effectué une réinjection à l'étape deux, exploitant la valeur self.D non mise à jour pour obtenir des informations de prix erronées, ce qui a permis d'effectuer des opérations de prêt rentables.
Bien que la fonction remove_liquidity utilise le décorateur @nonreentrant('lock') pour empêcher les réentrées, cette mesure de protection a échoué en raison de l'attaque impliquant des opérations entre contrats.
Cet événement met en évidence plusieurs principes de sécurité clés :
Les modifications de variables doivent être effectuées avant l'appel externe pour éviter l'incohérence de l'état.
Le mécanisme d'obtention des prix doit adopter une approche multi-sources de données pour renforcer la fiabilité.
La logique du code doit suivre le modèle "Checks-Effects-Interactions"(, c'est-à-dire d'abord effectuer des vérifications de conditions, puis modifier les variables d'état, et enfin effectuer des appels externes.
![Analyse de l'incident d'attaque par réinjection de Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-a0f03c13dd2d37ba67ccf538fec62aa0.webp(
![Analyse de l'incident d'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-fcd66f4cc03bb8e822c9414526681442.webp(
![Analyse de l'incident d'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Analyse de l'incident d'attaque par réinjection de Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
![Analyse de l'incident d'attaque par réentrées des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-d41ac025ee561569cce3b941d7e07967.webp(
Cette attaque prouve une fois de plus que l'audit de sécurité des contrats intelligents est crucial. Les équipes de projet devraient accorder plus d'importance à la sécurité des contrats et s'assurer que le code a été soumis à un examen complet et rigoureux afin de prévenir l'apparition de vulnérabilités similaires.
![Analyse de l'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-2c4474781d661306bc8c432dad3942c0.webp(
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.
Le réseau Jarvis a subi une attaque de réentrance par prêts flash, entraînant une perte de 660 000 MATIC.
Analyse de l'attaque par réentrance des Prêts Flash sur Jarvis Network
Le 15 janvier 2023, le projet Jarvis_Network a subi une attaque majeure, entraînant une perte de 663,101 MATIC. Cette attaque a exploité une combinaison de Prêts Flash et d'attaques de réentrance, révélant de graves vulnérabilités dans le contrat du projet.
L'attaquant a habilement exploité une vulnérabilité dans la fonction remove_liquidity. Cette fonction renvoie les jetons ajoutés par l'utilisateur lors de la suppression de la liquidité. Étant donné que la chaîne Polygon est compatible avec EVM, lorsque MATIC est transféré au contrat, cela déclenche la logique de réentrées du contrat.
L'analyse a révélé que la clé de l'attaque réside dans l'appel de la fonction getUnderlyingPrice. Cette fonction renvoie des prix significativement différents avant et après la réentrée : avant la réentrée, le prix était de 1002157321772769944, tandis qu'après, il atteignait 10091002696492234934, soit une différence d'environ 10 fois.
La racine du problème réside dans le moment inapproprié de la mise à jour de la variable self.D dans le contrat. L'ordre d'exécution de la fonction remove_liquidity est le suivant : 1) destruction des tokens LP de l'utilisateur ; 2) envoi des fonds de staking à l'utilisateur ; 3) mise à jour de self.D. L'attaquant a effectué une réinjection à l'étape deux, exploitant la valeur self.D non mise à jour pour obtenir des informations de prix erronées, ce qui a permis d'effectuer des opérations de prêt rentables.
Bien que la fonction remove_liquidity utilise le décorateur @nonreentrant('lock') pour empêcher les réentrées, cette mesure de protection a échoué en raison de l'attaque impliquant des opérations entre contrats.
Cet événement met en évidence plusieurs principes de sécurité clés :
![Analyse de l'incident d'attaque par réinjection de Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-a0f03c13dd2d37ba67ccf538fec62aa0.webp(
![Analyse de l'incident d'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-fcd66f4cc03bb8e822c9414526681442.webp(
![Analyse de l'incident d'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Analyse de l'incident d'attaque par réinjection de Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
![Analyse de l'incident d'attaque par réentrées des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-d41ac025ee561569cce3b941d7e07967.webp(
Cette attaque prouve une fois de plus que l'audit de sécurité des contrats intelligents est crucial. Les équipes de projet devraient accorder plus d'importance à la sécurité des contrats et s'assurer que le code a été soumis à un examen complet et rigoureux afin de prévenir l'apparition de vulnérabilités similaires.
![Analyse de l'attaque par réinjection des Prêts Flash de Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-2c4474781d661306bc8c432dad3942c0.webp(