Une vulnérabilité de stockage temporaire a conduit à une attaque de 300 000 dollars sur le projet Ethereum
Le 30 mars 2025, un système de surveillance de sécurité a détecté une attaque contre un projet de trading à effet de levier sur la chaîne Ethereum, entraînant une perte de plus de 300 000 dollars d'actifs. L'équipe de sécurité a analysé cet événement et partage maintenant les résultats comme suit :
Connaissances de base
La version 0.8.24 de Solidity a introduit la fonctionnalité de stockage transitoire (transient storage), qui est un nouvel emplacement de stockage de données. Sa caractéristique principale est que les données ne sont valides que pendant l'exécution de la transaction actuelle et sont automatiquement supprimées à la fin de la transaction. L'accès et la modification sont réalisés par deux nouvelles instructions EVM, TSTORE et TLOAD.
Le stockage transitoire présente les caractéristiques suivantes :
Coût de gas bas : le coût de gas de TSTORE et TLOAD est fixe à 100
Persistance des données dans les transactions : les données restent valides pendant toute la durée de la transaction.
Nettoyage automatique : réinitialisation automatique à zéro après la fin de la transaction
Cause de la vulnérabilité
La cause fondamentale de cet événement est que la valeur utilisée avec tstore pour le stockage transitoire dans la fonction n'a pas été effacée après la fin de l'appel de fonction. Cela a permis à l'attaquant d'exploiter cette caractéristique pour construire des adresses malveillantes spécifiques et contourner les vérifications de droits pour transférer des jetons.
Processus d'attaque
L'attaquant crée deux jetons malveillants A et B, et crée des pools pour ces deux jetons sur un DEX en injectant de la liquidité, où le jeton A est le contrat d'attaque.
L'attaquant appelle la fonction initialize du contrat Vault, utilisant le jeton A comme jeton de garantie et le jeton B comme jeton de dette pour créer un marché de trading à effet de levier APE-21.
L'attaquant appelle la fonction mint du contrat Vault, dépose le token de dette B pour frapper le token à effet de levier APE. Dans ce processus, l'adresse de la piscine DEX et la quantité frappée sont stockées temporairement l'une après l'autre.
L'attaquant crée un contrat malveillant dont l'adresse est identique à la valeur du stockage transitoire lors de la deuxième fois.
L'attaquant appelle directement la fonction de rappel du contrat Vault via ce contrat malveillant pour transférer des jetons. Étant donné que les valeurs dans le stockage transitoire n'ont pas été effacées, cela entraîne un passage erroné de la vérification d'identité.
Enfin, l'attaquant appelle la fonction de rappel du contrat Vault en attaquant le contrat (token A), ce qui lui permet de transférer d'autres tokens (WBTC, WETH) du contrat Vault pour réaliser un profit.
Analyse des flux de fonds
Selon l'analyse on-chain, l'attaquant a volé environ 300 000 dollars d'actifs, comprenant 17 814,8626 USDC, 1,4085 WBTC et 119,871 WETH.
WBTC a été échangé contre 63.5596 WETH
USDC a été échangé contre 9.7122 WETH
Un total de 193.1428 WETH a été transféré vers un service de mélange de devises.
Les fonds initiaux de l'attaquant proviennent de 0,3 ETH transférés d'un service de mélange de crypto-monnaies.
Résumé et recommandations
L'attaque repose sur l'exploitation de la caractéristique du stockage transitoire qui conserve les valeurs pendant toute la durée de la transaction, contournant ainsi la vérification des autorisations des fonctions de rappel. Il est conseillé aux équipes de projet d'utiliser immédiatement tstore(key, 0) après la fin de l'appel de fonction pour effacer les valeurs du stockage transitoire en fonction de la logique métier. De plus, il est nécessaire de renforcer l'audit du code des contrats et les tests de sécurité afin d'éviter que des situations similaires ne se reproduisent.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 J'aime
Récompense
15
3
Partager
Commentaire
0/400
CommunitySlacker
· Il y a 15h
Un autre projet devenu une machine à retirer.
Voir l'originalRépondre0
BlockchainDecoder
· Il y a 15h
D'un point de vue technique, c'est un usage incorrect du stockage transitoire typique.
Voir l'originalRépondre0
StealthMoon
· Il y a 15h
Encore une vulnérabilité de stockage temporaire ? Réveillez-vous.
Le projet Ethereum a subi une attaque de 300 000 dollars, la défaillance de stockage transitoire étant la principale cause.
Une vulnérabilité de stockage temporaire a conduit à une attaque de 300 000 dollars sur le projet Ethereum
Le 30 mars 2025, un système de surveillance de sécurité a détecté une attaque contre un projet de trading à effet de levier sur la chaîne Ethereum, entraînant une perte de plus de 300 000 dollars d'actifs. L'équipe de sécurité a analysé cet événement et partage maintenant les résultats comme suit :
Connaissances de base
La version 0.8.24 de Solidity a introduit la fonctionnalité de stockage transitoire (transient storage), qui est un nouvel emplacement de stockage de données. Sa caractéristique principale est que les données ne sont valides que pendant l'exécution de la transaction actuelle et sont automatiquement supprimées à la fin de la transaction. L'accès et la modification sont réalisés par deux nouvelles instructions EVM, TSTORE et TLOAD.
Le stockage transitoire présente les caractéristiques suivantes :
Cause de la vulnérabilité
La cause fondamentale de cet événement est que la valeur utilisée avec tstore pour le stockage transitoire dans la fonction n'a pas été effacée après la fin de l'appel de fonction. Cela a permis à l'attaquant d'exploiter cette caractéristique pour construire des adresses malveillantes spécifiques et contourner les vérifications de droits pour transférer des jetons.
Processus d'attaque
L'attaquant crée deux jetons malveillants A et B, et crée des pools pour ces deux jetons sur un DEX en injectant de la liquidité, où le jeton A est le contrat d'attaque.
L'attaquant appelle la fonction initialize du contrat Vault, utilisant le jeton A comme jeton de garantie et le jeton B comme jeton de dette pour créer un marché de trading à effet de levier APE-21.
L'attaquant appelle la fonction mint du contrat Vault, dépose le token de dette B pour frapper le token à effet de levier APE. Dans ce processus, l'adresse de la piscine DEX et la quantité frappée sont stockées temporairement l'une après l'autre.
L'attaquant crée un contrat malveillant dont l'adresse est identique à la valeur du stockage transitoire lors de la deuxième fois.
L'attaquant appelle directement la fonction de rappel du contrat Vault via ce contrat malveillant pour transférer des jetons. Étant donné que les valeurs dans le stockage transitoire n'ont pas été effacées, cela entraîne un passage erroné de la vérification d'identité.
Enfin, l'attaquant appelle la fonction de rappel du contrat Vault en attaquant le contrat (token A), ce qui lui permet de transférer d'autres tokens (WBTC, WETH) du contrat Vault pour réaliser un profit.
Analyse des flux de fonds
Selon l'analyse on-chain, l'attaquant a volé environ 300 000 dollars d'actifs, comprenant 17 814,8626 USDC, 1,4085 WBTC et 119,871 WETH.
Les fonds initiaux de l'attaquant proviennent de 0,3 ETH transférés d'un service de mélange de crypto-monnaies.
Résumé et recommandations
L'attaque repose sur l'exploitation de la caractéristique du stockage transitoire qui conserve les valeurs pendant toute la durée de la transaction, contournant ainsi la vérification des autorisations des fonctions de rappel. Il est conseillé aux équipes de projet d'utiliser immédiatement tstore(key, 0) après la fin de l'appel de fonction pour effacer les valeurs du stockage transitoire en fonction de la logique métier. De plus, il est nécessaire de renforcer l'audit du code des contrats et les tests de sécurité afin d'éviter que des situations similaires ne se reproduisent.