Analyse des vulnérabilités du compilateur Solidity et mesures de prévention
Le compilateur est l'un des composants fondamentaux des systèmes informatiques modernes, sa principale fonction étant de convertir le code source des langages de programmation de haut niveau en code d'instructions exécutable par l'ordinateur. Bien que la plupart des développeurs et des professionnels de la sécurité se concentrent généralement sur la sécurité du code des applications, la sécurité du compilateur lui-même ne doit pas non plus être négligée. En effet, en tant que programme informatique, le compilateur peut également présenter des vulnérabilités de sécurité, ce qui peut entraîner des risques de sécurité graves dans certains cas.
Le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions (EVM) pour la machine virtuelle Ethereum. Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity se réfèrent principalement aux problèmes survenant lors du processus de conversion de code. Ce type de vulnérabilité n'affecte pas directement le réseau Ethereum, mais peut entraîner une génération de code EVM qui diffère des attentes des développeurs, ce qui peut avoir de graves conséquences.
Voici quelques exemples réels de vulnérabilités des compilateurs Solidity :
SOL-2016-9 HighOrderByteCleanStorage
Cette vulnérabilité existe dans les premières versions du compilateur Solidity version (>=0.1.6 <0.4.4). Elle peut entraîner le retour de valeurs inattendues pour les variables de stockage sans modification. Cette incohérence peut causer de graves problèmes dans des opérations critiques telles que la validation des autorisations ou la comptabilité des actifs.
SOL-2022-4 Effets de côté de mémoire InlineAssembly
Cette vulnérabilité affecte les versions de compilateurs >=0.8.13 <0.8.15. Elle provient d'une erreur du compilateur qui, lors du processus d'optimisation, a supprimé de manière incorrecte des instructions de manipulation de mémoire qui semblent redondantes mais qui sont en réalité nécessaires, entraînant une discordance entre la valeur de retour de la fonction et la valeur attendue.
Cette vulnérabilité affecte les compilateurs de versions >= 0.5.8 et < 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, le compilateur nettoie incorrectement certaines données, ce qui entraîne la modification de données adjacentes et, finalement, une incohérence des données après encodage et décodage.
Pour faire face aux risques posés par les vulnérabilités du compilateur Solidity, l'équipe de sécurité blockchain de Cobo propose les recommandations suivantes :
Pour les développeurs :
Utilisez une version plus récente du compilateur Solidity
Améliorer les cas de test unitaire pour augmenter la couverture du code
Évitez d'utiliser des assemblages en ligne, des opérations de codage et de décodage ABI complexes, faites preuve de prudence lors de l'utilisation de nouvelles fonctionnalités et de fonctionnalités expérimentales
Pour le personnel de sécurité:
Faites attention aux risques que le compilateur peut introduire lors de l'audit de sécurité.
Promouvoir la mise à niveau de la version du compilateur dans le processus de développement SDL, envisager d'introduire des vérifications automatiques dans CI/CD.
Évaluer l'impact réel sur la sécurité des vulnérabilités du compilateur en fonction des spécificités du projet.
Quelques ressources utiles :
Alerte de sécurité publiée par l'équipe officielle de Solidity
Liste des bugs dans le dépôt GitHub de Solidity
Avertissement de sécurité sur la page de code de contrat Etherscan
En se concentrant sur la sécurité des compilateurs et en utilisant judicieusement les ressources associées, les développeurs et les professionnels de la sécurité peuvent mieux prévenir les risques potentiels liés aux vulnérabilités des compilateurs Solidity et améliorer la sécurité globale des contrats intelligents.
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
6
Partager
Commentaire
0/400
MEVSupportGroup
· 07-24 16:22
C'est un véritable désastre lorsque le compilateur a des problèmes...
Voir l'originalRépondre0
MetaverseLandlord
· 07-24 02:50
Alerte de profession à risque élevé pour les développeurs !
Voir l'originalRépondre0
Ramen_Until_Rich
· 07-22 03:21
On ne meurt pas tant qu'on n'a pas atteint le fleuve Jaune.
Voir l'originalRépondre0
AirdropHunterXM
· 07-22 03:15
Comment commencer à gagner de l'argent avec les tests
Voir l'originalRépondre0
LiquidityWitch
· 07-22 03:15
Risque de débordement, c'est la folie !
Voir l'originalRépondre0
SelfStaking
· 07-22 03:06
C'est très urgent, mettez à jour vers la dernière version.
Analyse des vulnérabilités du compilateur Solidity et mesures de prévention
Analyse des vulnérabilités du compilateur Solidity et mesures de prévention
Le compilateur est l'un des composants fondamentaux des systèmes informatiques modernes, sa principale fonction étant de convertir le code source des langages de programmation de haut niveau en code d'instructions exécutable par l'ordinateur. Bien que la plupart des développeurs et des professionnels de la sécurité se concentrent généralement sur la sécurité du code des applications, la sécurité du compilateur lui-même ne doit pas non plus être négligée. En effet, en tant que programme informatique, le compilateur peut également présenter des vulnérabilités de sécurité, ce qui peut entraîner des risques de sécurité graves dans certains cas.
Le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions (EVM) pour la machine virtuelle Ethereum. Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity se réfèrent principalement aux problèmes survenant lors du processus de conversion de code. Ce type de vulnérabilité n'affecte pas directement le réseau Ethereum, mais peut entraîner une génération de code EVM qui diffère des attentes des développeurs, ce qui peut avoir de graves conséquences.
Voici quelques exemples réels de vulnérabilités des compilateurs Solidity :
Cette vulnérabilité existe dans les premières versions du compilateur Solidity version (>=0.1.6 <0.4.4). Elle peut entraîner le retour de valeurs inattendues pour les variables de stockage sans modification. Cette incohérence peut causer de graves problèmes dans des opérations critiques telles que la validation des autorisations ou la comptabilité des actifs.
Cette vulnérabilité affecte les versions de compilateurs >=0.8.13 <0.8.15. Elle provient d'une erreur du compilateur qui, lors du processus d'optimisation, a supprimé de manière incorrecte des instructions de manipulation de mémoire qui semblent redondantes mais qui sont en réalité nécessaires, entraînant une discordance entre la valeur de retour de la fonction et la valeur attendue.
Cette vulnérabilité affecte les compilateurs de versions >= 0.5.8 et < 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, le compilateur nettoie incorrectement certaines données, ce qui entraîne la modification de données adjacentes et, finalement, une incohérence des données après encodage et décodage.
Pour faire face aux risques posés par les vulnérabilités du compilateur Solidity, l'équipe de sécurité blockchain de Cobo propose les recommandations suivantes :
Pour les développeurs :
Pour le personnel de sécurité:
Quelques ressources utiles :
En se concentrant sur la sécurité des compilateurs et en utilisant judicieusement les ressources associées, les développeurs et les professionnels de la sécurité peuvent mieux prévenir les risques potentiels liés aux vulnérabilités des compilateurs Solidity et améliorer la sécurité globale des contrats intelligents.