Analyse des vulnérabilités du compilateur Solidity et stratégies de réponse
Le compilateur, en tant qu'un des composants fondamentaux des systèmes informatiques modernes, a pour fonction de convertir le code source des langages de programmation de haut niveau en code d'instructions exécutable par l'ordinateur. Cependant, le compilateur lui-même peut également contenir des vulnérabilités de sécurité, ce qui peut, dans certains cas, entraîner des risques de sécurité graves.
Prenons l'exemple du domaine de la blockchain, le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions pour la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM lui-même, les vulnérabilités du compilateur Solidity se manifestent principalement lors de la conversion de Solidity en code EVM, ce qui peut entraîner une incohérence entre le code EVM généré et les attentes des développeurs. Cette incohérence peut avoir des conséquences graves sur les contrats intelligents impliquant des actifs en cryptomonnaie.
Voyons quelques cas réels pour mieux comprendre les vulnérabilités du compilateur Solidity :
SOL-2016-9 HighOrderByteCleanStorage
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity entre (0.1.6 et 0.4.4 ). Dans certains cas, les variables de stockage peuvent être modifiées accidentellement, entraînant des valeurs de retour de fonction inattendues. Ce problème est difficile à détecter par une simple révision de code, mais s'il implique une validation de permissions ou une comptabilité d'actifs, les conséquences peuvent être très graves.
SOL-2022-4 Effets secondaires de la mémoire InlineAssembly
Cette vulnérabilité affecte les compilateurs des versions 0.8.13 à 0.8.15. En raison d'un traitement incorrect des blocs d'assembly lors de l'optimisation de compilation, certaines opérations d'écriture en mémoire peuvent être supprimées par erreur, ce qui entraîne des valeurs de retour de fonction inattendues.
Cette vulnérabilité existe dans les compilateurs des versions 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, certaines données pourraient être nettoyées par erreur, entraînant la modification de données adjacentes et, finalement, une incohérence des données après encodage et décodage.
Sur la base de l'analyse des vulnérabilités du compilateur Solidity, nous proposons les recommandations suivantes aux développeurs et aux responsables de la sécurité :
Pour les développeurs :
Utiliser une version plus récente du compilateur Solidity
Améliorer les cas de test unitaires, augmenter la couverture du code
Évitez d'utiliser des opérations telles que l'assemblage en ligne, le codage/décodage ABI complexe, etc.
Utilisez avec prudence les nouvelles fonctionnalités et les fonctionnalités expérimentales du langage.
Pour le personnel de sécurité :
Considérer les risques de sécurité que le compilateur pourrait introduire lors de l'audit.
Inciter à mettre à niveau la version du compilateur dans le processus de développement
Introduire une vérification automatique de la version du compilateur dans le processus CI/CD
Évaluer l'impact réel de la vulnérabilité du compilateur en fonction du projet spécifique
Quelques ressources utiles :
Alerte de sécurité publiée par l'équipe Solidity
Liste des bugs du dépôt officiel de Solidity
Liste des bugs des compilateurs de différentes versions
Avertissement de sécurité de la page de code de contrat Etherscan
Dans l'ensemble, bien que les vulnérabilités des compilateurs Solidity ne soient pas courantes, leur impact potentiel ne doit pas être négligé. Les développeurs et les responsables de la sécurité doivent rester vigilants et prendre des mesures appropriées pour réduire les risques.
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.
18 J'aime
Récompense
18
5
Reposter
Partager
Commentaire
0/400
SchrodingersFOMO
· Il y a 10h
Encore une journée à être piégé par le compilateur
Voir l'originalRépondre0
PumpDetector
· 08-10 06:17
la même vieille histoire... j'ai vu des problèmes de compilateur depuis '13, les jours de mtgox étaient plus fous pour être honnête
Voir l'originalRépondre0
AirdropHuntress
· 08-10 06:13
Les détails de l'audit de code sont inoffensifs, c'est le portefeuille du capitaliste qui est le vrai problème.
Voir l'originalRépondre0
TokenEconomist
· 08-10 06:06
en fait, tout ce problème EVM vs compilateur solidity fait écho au célèbre bug Y2K... des choses fascinantes à vrai dire
Voir l'originalRépondre0
MidnightTrader
· 08-10 05:59
On a l'impression que le compilateur a mal fonctionné, le risque du projet est très élevé.
Vulnérabilités du compilateur Solidity : risques potentiels et stratégies d'atténuation
Analyse des vulnérabilités du compilateur Solidity et stratégies de réponse
Le compilateur, en tant qu'un des composants fondamentaux des systèmes informatiques modernes, a pour fonction de convertir le code source des langages de programmation de haut niveau en code d'instructions exécutable par l'ordinateur. Cependant, le compilateur lui-même peut également contenir des vulnérabilités de sécurité, ce qui peut, dans certains cas, entraîner des risques de sécurité graves.
Prenons l'exemple du domaine de la blockchain, le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions pour la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM lui-même, les vulnérabilités du compilateur Solidity se manifestent principalement lors de la conversion de Solidity en code EVM, ce qui peut entraîner une incohérence entre le code EVM généré et les attentes des développeurs. Cette incohérence peut avoir des conséquences graves sur les contrats intelligents impliquant des actifs en cryptomonnaie.
Voyons quelques cas réels pour mieux comprendre les vulnérabilités du compilateur Solidity :
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity entre (0.1.6 et 0.4.4 ). Dans certains cas, les variables de stockage peuvent être modifiées accidentellement, entraînant des valeurs de retour de fonction inattendues. Ce problème est difficile à détecter par une simple révision de code, mais s'il implique une validation de permissions ou une comptabilité d'actifs, les conséquences peuvent être très graves.
Cette vulnérabilité affecte les compilateurs des versions 0.8.13 à 0.8.15. En raison d'un traitement incorrect des blocs d'assembly lors de l'optimisation de compilation, certaines opérations d'écriture en mémoire peuvent être supprimées par erreur, ce qui entraîne des valeurs de retour de fonction inattendues.
Cette vulnérabilité existe dans les compilateurs des versions 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, certaines données pourraient être nettoyées par erreur, entraînant la modification de données adjacentes et, finalement, une incohérence des données après encodage et décodage.
Sur la base de l'analyse des vulnérabilités du compilateur Solidity, nous proposons les recommandations suivantes aux développeurs et aux responsables de la sécurité :
Pour les développeurs :
Pour le personnel de sécurité :
Quelques ressources utiles :
Dans l'ensemble, bien que les vulnérabilités des compilateurs Solidity ne soient pas courantes, leur impact potentiel ne doit pas être négligé. Les développeurs et les responsables de la sécurité doivent rester vigilants et prendre des mesures appropriées pour réduire les risques.