Analyse des vulnérabilités du compilateur Solidity et mesures d'atténuation
Le compilateur est l'un des composants fondamentaux des systèmes informatiques modernes, sa fonction étant de convertir le code source des langages de programmation de haut niveau en instructions exécutables par l'ordinateur. Bien que les développeurs et les experts en sécurité se concentrent généralement sur la sécurité du code des applications, le compilateur lui-même, en tant que programme informatique, peut également présenter des vulnérabilités de sécurité, ce qui peut, dans certains cas, entraîner des risques de sécurité graves.
Le rôle du compilateur Solidity est de transformer le code des contrats intelligents en code d'instructions pour la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity se manifestent principalement lors de la conversion de Solidity en code EVM, ce qui peut poser des problèmes, sans affecter directement le réseau Ethereum lui-même, mais pouvant entraîner une incohérence entre le code EVM généré et les attentes du développeur.
Voici quelques exemples réels de vulnérabilités des compilateurs Solidity :
SOL-2016-9 HighOrderByteCleanStorage :
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity (\u003e=0.1.6 \u003c0.4.4). En raison du fait que le compilateur ne nettoie pas correctement les bits supérieurs lors du traitement des débordements d'entiers, cela peut entraîner la modification accidentelle de variables adjacentes.
SOL-2022-4 Effets de bord de mémoire d'InlineAssembly :
Cette vulnérabilité existe dans les compilateurs des versions 0.8.13 à 0.8.15. En raison de l'optimisation de la compilation qui analyse des blocs d'assembly individuels, il est possible que des instructions d'écriture en mémoire apparemment redondantes mais en réalité utiles soient supprimées par erreur.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup :
Cette vulnérabilité affecte les compilateurs de la version 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, certaines données sont incorrectement nettoyées, ce qui entraîne la modification de données adjacentes.
Concernant les vulnérabilités du compilateur Solidity, l'équipe de sécurité de Cobo Blockchain propose les recommandations suivantes :
Pour les développeurs :
Utiliser une version plus récente du compilateur Solidity
Améliorer les cas de test unitaire
Évitez d'utiliser l'assemblage en ligne, des opérations de décodage et d'encodage ABI complexes, etc.
Pour le personnel de sécurité :
Considérer les risques de sécurité que le compilateur peut introduire lors de l'audit.
Inciter à mettre à jour la version du compilateur dans le processus de développement
Évaluer l'impact réel de la vulnérabilité du compilateur en fonction des circonstances spécifiques.
Quelques ressources utiles :
Alerte de sécurité officielle de Solidity
Liste des bugs dans le dépôt GitHub de Solidity
Liste des bugs des compilateurs de chaque version
Avertissement de sécurité de la page de code de contrat Etherscan
En somme, les développeurs et les professionnels de la sécurité doivent être attentifs aux risques de sécurité que peuvent présenter les vulnérabilités du compilateur Solidity, en réduisant les risques associés par des mesures telles que la mise à niveau du compilateur et l'amélioration des tests.
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.
24 J'aime
Récompense
24
6
Partager
Commentaire
0/400
StakeWhisperer
· 07-21 09:21
Tu as déjà suivi le bug du compilateur ? Ce Débutant me fait mourir de rire.
Voir l'originalRépondre0
OnchainGossiper
· 07-21 06:50
Je viens de corriger un bug et en voici un nouveau... je lève les mains.
Voir l'originalRépondre0
blockBoy
· 07-20 10:39
C'est un vieux problème difficile... Qui peut vraiment le résoudre
Voir l'originalRépondre0
BearMarketSage
· 07-20 10:39
Développez mais ne testez pas vous-même le contrat?
Analyse des vulnérabilités du compilateur Solidity et des stratégies de réponse
Analyse des vulnérabilités du compilateur Solidity et mesures d'atténuation
Le compilateur est l'un des composants fondamentaux des systèmes informatiques modernes, sa fonction étant de convertir le code source des langages de programmation de haut niveau en instructions exécutables par l'ordinateur. Bien que les développeurs et les experts en sécurité se concentrent généralement sur la sécurité du code des applications, le compilateur lui-même, en tant que programme informatique, peut également présenter des vulnérabilités de sécurité, ce qui peut, dans certains cas, entraîner des risques de sécurité graves.
Le rôle du compilateur Solidity est de transformer le code des contrats intelligents en code d'instructions pour la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity se manifestent principalement lors de la conversion de Solidity en code EVM, ce qui peut poser des problèmes, sans affecter directement le réseau Ethereum lui-même, mais pouvant entraîner une incohérence entre le code EVM généré et les attentes du développeur.
Voici quelques exemples réels de vulnérabilités des compilateurs Solidity :
SOL-2016-9 HighOrderByteCleanStorage : Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity (\u003e=0.1.6 \u003c0.4.4). En raison du fait que le compilateur ne nettoie pas correctement les bits supérieurs lors du traitement des débordements d'entiers, cela peut entraîner la modification accidentelle de variables adjacentes.
SOL-2022-4 Effets de bord de mémoire d'InlineAssembly : Cette vulnérabilité existe dans les compilateurs des versions 0.8.13 à 0.8.15. En raison de l'optimisation de la compilation qui analyse des blocs d'assembly individuels, il est possible que des instructions d'écriture en mémoire apparemment redondantes mais en réalité utiles soient supprimées par erreur.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup : Cette vulnérabilité affecte les compilateurs de la version 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, certaines données sont incorrectement nettoyées, ce qui entraîne la modification de données adjacentes.
Concernant les vulnérabilités du compilateur Solidity, l'équipe de sécurité de Cobo Blockchain propose les recommandations suivantes :
Pour les développeurs :
Pour le personnel de sécurité :
Quelques ressources utiles :
En somme, les développeurs et les professionnels de la sécurité doivent être attentifs aux risques de sécurité que peuvent présenter les vulnérabilités du compilateur Solidity, en réduisant les risques associés par des mesures telles que la mise à niveau du compilateur et l'amélioration des tests.