Analyse des vulnérabilités du compilateur Solidity et stratégies d'atténuation
Le compilateur est une composante essentielle des systèmes informatiques modernes, dont le rôle est de convertir le code source des langages de programmation de haut niveau en instructions exécutable par l'ordinateur. Comparé au code des applications, la sécurité du compilateur lui-même est souvent négligée. Cependant, les vulnérabilités du compilateur peuvent, dans certains cas, engendrer des risques de sécurité graves.
Le principal objectif du compilateur Solidity est de convertir le code des contrats intelligents en instructions de la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity affectent principalement les développeurs de contrats intelligents et ne mettent pas directement en danger la sécurité du réseau Ethereum.
Les vulnérabilités des compilateurs peuvent entraîner une divergence entre le code EVM généré et les attentes des développeurs. Étant donné que les contrats intelligents impliquent souvent des actifs en cryptomonnaie, tout bug causé par le compilateur peut entraîner des pertes d'actifs pour les utilisateurs. Il est difficile de détecter ce type de problème uniquement par un audit du code source du contrat, il est nécessaire de combiner l'analyse avec des versions spécifiques du compilateur et des modèles de code.
Exemples de vulnérabilités du compilateur Solidity
SOL-2016-9 HighOrderByteCleanStorage
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity ( >=0.1.6 <0.4.4). Dans certains cas, les variables de stockage peuvent être modifiées accidentellement, entraînant des valeurs de retour de fonction non conformes aux attentes. Cette incohérence peut avoir de graves conséquences lors de la vérification des autorisations ou de la comptabilisation des actifs.
La cause de la vulnérabilité est que le compilateur ne nettoie pas correctement les données de haut niveau lors du traitement des types de données inférieurs à 32 octets, ce qui entraîne une écriture incorrecte des données de haut niveau dans des variables adjacentes lors d'un débordement d'entier.
SOL-2022-4 InlineAssemblyMemorySideEffects
Cette vulnérabilité affecte les compilateurs des versions >=0.8.13 et <0.8.15. Le problème provient d'un traitement incorrect des opérations mémoire lors des optimisations du compilateur. Dans certains cas, le compilateur peut supprimer incorrectement des instructions d'écriture mémoire apparemment redondantes, ce qui entraîne des valeurs de retour de fonction anormales.
Cette vulnérabilité existe dans les compilateurs version >= 0.5.8 < 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, le compilateur a nettoyé incorrectement certaines données, ce qui a entraîné la modification de données adjacentes, provoquant une incohérence des données après encodage et décodage.
Il est à noter que lors des appels externes et de l'émission d'événements, une abi.encode est effectuée de manière implicite, donc l'impact de cette vulnérabilité pourrait être plus étendu que prévu.
Conseils de sécurité
Concernant 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 décodage et d'encodage ABI complexes, et utilisez avec prudence les nouvelles fonctionnalités et les fonctionnalités expérimentales.
Pour le personnel de sécurité :
Lors d'un audit, prêter attention aux risques de sécurité que le compilateur peut introduire.
Pousser la mise à jour de la version du compilateur dans le processus de développement, envisager d'introduire une vérification automatique de version dans le CI/CD.
Évaluer l'impact réel de la vulnérabilité du compilateur en fonction du projet spécifique.
Ressources pratiques:
Blog d'alerte de sécurité officiel de Solidity
Liste des bugs dans le référentiel GitHub de Solidity
Liste des bugs des compilateurs de chaque version
Alerte de vulnérabilité du compilateur sur la page de code de contrat d'Etherscan
En somme, les développeurs et les professionnels de la sécurité doivent porter une attention particulière aux risques potentiels liés aux vulnérabilités du compilateur Solidity et prendre des mesures appropriées pour réduire les risques de sécurité. Il est également important d'évaluer objectivement les impacts spécifiques afin d'éviter une panique excessive.
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.
13 J'aime
Récompense
13
4
Partager
Commentaire
0/400
AirdropChaser
· 08-02 03:03
Une autre raison de se faire prendre pour des cons est apparue.
Voir l'originalRépondre0
BearMarketBuilder
· 08-02 02:55
Ah, toute la journée à développer, j'ai juste peur de ce truc.
Voir l'originalRépondre0
TeaTimeTrader
· 08-02 02:53
La littérature de blâme des compilateurs, ça va encore ?
Voir l'originalRépondre0
0xOverleveraged
· 08-02 02:42
Les compilateurs de contrats intelligents ne sont pas fiables, pourquoi jouer avec les contrats ?
Analyse des vulnérabilités du compilateur Solidity : les risques potentiels que les développeurs ne doivent pas ignorer
Analyse des vulnérabilités du compilateur Solidity et stratégies d'atténuation
Le compilateur est une composante essentielle des systèmes informatiques modernes, dont le rôle est de convertir le code source des langages de programmation de haut niveau en instructions exécutable par l'ordinateur. Comparé au code des applications, la sécurité du compilateur lui-même est souvent négligée. Cependant, les vulnérabilités du compilateur peuvent, dans certains cas, engendrer des risques de sécurité graves.
Le principal objectif du compilateur Solidity est de convertir le code des contrats intelligents en instructions de la machine virtuelle Ethereum (EVM). Contrairement aux vulnérabilités de l'EVM elle-même, les vulnérabilités du compilateur Solidity affectent principalement les développeurs de contrats intelligents et ne mettent pas directement en danger la sécurité du réseau Ethereum.
Les vulnérabilités des compilateurs peuvent entraîner une divergence entre le code EVM généré et les attentes des développeurs. Étant donné que les contrats intelligents impliquent souvent des actifs en cryptomonnaie, tout bug causé par le compilateur peut entraîner des pertes d'actifs pour les utilisateurs. Il est difficile de détecter ce type de problème uniquement par un audit du code source du contrat, il est nécessaire de combiner l'analyse avec des versions spécifiques du compilateur et des modèles de code.
Exemples de vulnérabilités du compilateur Solidity
SOL-2016-9 HighOrderByteCleanStorage
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity ( >=0.1.6 <0.4.4). Dans certains cas, les variables de stockage peuvent être modifiées accidentellement, entraînant des valeurs de retour de fonction non conformes aux attentes. Cette incohérence peut avoir de graves conséquences lors de la vérification des autorisations ou de la comptabilisation des actifs.
La cause de la vulnérabilité est que le compilateur ne nettoie pas correctement les données de haut niveau lors du traitement des types de données inférieurs à 32 octets, ce qui entraîne une écriture incorrecte des données de haut niveau dans des variables adjacentes lors d'un débordement d'entier.
SOL-2022-4 InlineAssemblyMemorySideEffects
Cette vulnérabilité affecte les compilateurs des versions >=0.8.13 et <0.8.15. Le problème provient d'un traitement incorrect des opérations mémoire lors des optimisations du compilateur. Dans certains cas, le compilateur peut supprimer incorrectement des instructions d'écriture mémoire apparemment redondantes, ce qui entraîne des valeurs de retour de fonction anormales.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup
Cette vulnérabilité existe dans les compilateurs version >= 0.5.8 < 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, le compilateur a nettoyé incorrectement certaines données, ce qui a entraîné la modification de données adjacentes, provoquant une incohérence des données après encodage et décodage.
Il est à noter que lors des appels externes et de l'émission d'événements, une abi.encode est effectuée de manière implicite, donc l'impact de cette vulnérabilité pourrait être plus étendu que prévu.
Conseils de sécurité
Concernant 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é :
Ressources pratiques:
En somme, les développeurs et les professionnels de la sécurité doivent porter une attention particulière aux risques potentiels liés aux vulnérabilités du compilateur Solidity et prendre des mesures appropriées pour réduire les risques de sécurité. Il est également important d'évaluer objectivement les impacts spécifiques afin d'éviter une panique excessive.