Analyse en profondeur des vulnérabilités du compilateur Solidity
Le compilateur est l'un des composants de base des systèmes informatiques modernes, sa fonction principale étant de convertir le code source des langages de programmation de haut niveau en instructions exécutables par le bas niveau de 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 est souvent négligée. En fait, le compilateur, en tant que programme informatique, peut également présenter des vulnérabilités de sécurité, qui dans certains cas peuvent entraîner des risques de sécurité graves.
Par exemple, lors de l'exécution de code JavaScript dans le navigateur, une vulnérabilité du moteur d'analyse JavaScript peut permettre à un utilisateur d'être victime d'une attaque par exécution de code à distance en accédant à une page Web malveillante, ce qui peut finalement conduire à ce que l'attaquant prenne le contrôle du navigateur de la victime, voire de son système d'exploitation. De plus, des recherches montrent que des bugs dans le compilateur Clang C++ peuvent également entraîner des conséquences graves, telles que l'exécution de code à distance.
Le compilateur Solidity présente également des vulnérabilités de sécurité. Selon l'alerte de sécurité publiée par l'équipe de développement de Solidity, plusieurs versions du compilateur Solidity présentent des risques de sécurité. Le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions (EVM) pour la machine virtuelle Ethereum, ces codes d'instructions étant finalement téléchargés sur Ethereum via des transactions et exécutés par l'EVM.
Il est important de noter que les vulnérabilités du compilateur Solidity sont différentes des vulnérabilités de l'EVM elle-même. Les vulnérabilités de l'EVM font référence aux problèmes de sécurité qui surviennent lorsque la machine virtuelle exécute des instructions, ce qui peut affecter l'ensemble du réseau Ethereum. En revanche, les vulnérabilités du compilateur Solidity concernent les problèmes rencontrés par le compilateur lors de la conversion du code Solidity en code EVM, et n'affectent pas directement le réseau Ethereum lui-même.
Les vulnérabilités du compilateur Solidity peuvent entraîner une incohérence entre le code EVM généré et les attentes des développeurs. Étant donné que les contrats intelligents sur Ethereum impliquent généralement des actifs cryptographiques des utilisateurs, tout bug causé par le compilateur peut entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. Les développeurs et les auditeurs de contrats se concentrent généralement sur la mise en œuvre logique des contrats et les problèmes de sécurité courants, tandis que les vulnérabilités du compilateur sont difficiles à détecter uniquement par l'audit du code source, nécessitant une analyse conjointe des versions spécifiques du compilateur et des modèles de code.
Voici quelques exemples réels de vulnérabilités du compilateur Solidity :
SOL-2016-9 HighOrderByteCleanStorage
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity (\u003e=0.1.6 \u003c0.4.4). Dans certains cas, la valeur des variables de stockage peut être modifiée accidentellement, entraînant des valeurs de retour de fonction qui ne correspondent pas aux attentes. Cette incohérence peut avoir des conséquences graves dans des scénarios tels que la vérification des autorisations ou la comptabilisation des actifs.
SOL-2022-4 InlineAssemblyMemorySideEffects
Cette vulnérabilité existe dans les compilateurs des versions 0.8.13 à 0.8.15. En raison d'un problème de stratégie d'optimisation du compilateur, certaines modifications de la mémoire dans le code d'assemblage en ligne peuvent être incorrectement supprimées, entraînant une erreur dans la valeur de retour de la fonction.
Cette vulnérabilité affecte les versions du compilateur de 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, il se peut que certaines données soient incorrectement nettoyées, entraînant la modification de données adjacentes et provoquant une incohérence des données après encodage et décodage.
Concernant les vulnérabilités du compilateur Solidity, l'équipe de sécurité blockchain de Cobo propose les recommandations suivantes :
Pour les développeurs:
Utiliser 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, et utilisez avec prudence les nouvelles fonctionnalités et les fonctionnalités expérimentales.
Pour le personnel de sécurité :
Considérer les risques de sécurité potentiels introduits par le compilateur lors de l'audit.
Il est recommandé que l'équipe de développement mette à jour la version du compilateur en temps utile.
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 pratiques:
Avertissement de sécurité du blog officiel de Solidity
Liste des bugs du dépôt GitHub de Solidity
Liste des bugs des compilateurs de chaque version
Alerte de vulnérabilité sur la page de code de contrat d'Etherscan
En comprenant les caractéristiques et les impacts des vulnérabilités du compilateur Solidity, les développeurs et les responsables de la sécurité peuvent évaluer de manière plus globale les risques de sécurité des contrats intelligents et prendre des mesures adéquates pour réduire les menaces potentielles.
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.
16 J'aime
Récompense
16
6
Partager
Commentaire
0/400
0xSoulless
· Il y a 4h
Encore un outil pour prendre les gens pour des idiots
Voir l'originalRépondre0
RumbleValidator
· 07-12 19:34
Cette vulnérabilité peut-elle provoquer des erreurs dans la couche de consensus ? Les risques pour les nœuds de validation sont élevés.
Voir l'originalRépondre0
SocialFiQueen
· 07-12 19:29
Il semble que les smart contracts vont échouer~ Haha, c'est trop excitant.
Voir l'originalRépondre0
CryptoTherapist
· 07-12 19:27
juste un autre cas du syndrome d'anxiété des développeurs... respirez à travers le processus de débogage fam
Voir l'originalRépondre0
StablecoinAnxiety
· 07-12 19:14
Les compilateurs ne sont pas sûrs, qui oserait coder ?
Voir l'originalRépondre0
Blockwatcher9000
· 07-12 19:06
Les développeurs c'est vraiment difficile, je serre mon btc et je fais un Rug Pull.
Analyse des vulnérabilités du compilateur Solidity : risques cachés affectant la sécurité des smart contracts
Analyse en profondeur des vulnérabilités du compilateur Solidity
Le compilateur est l'un des composants de base des systèmes informatiques modernes, sa fonction principale étant de convertir le code source des langages de programmation de haut niveau en instructions exécutables par le bas niveau de 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 est souvent négligée. En fait, le compilateur, en tant que programme informatique, peut également présenter des vulnérabilités de sécurité, qui dans certains cas peuvent entraîner des risques de sécurité graves.
Par exemple, lors de l'exécution de code JavaScript dans le navigateur, une vulnérabilité du moteur d'analyse JavaScript peut permettre à un utilisateur d'être victime d'une attaque par exécution de code à distance en accédant à une page Web malveillante, ce qui peut finalement conduire à ce que l'attaquant prenne le contrôle du navigateur de la victime, voire de son système d'exploitation. De plus, des recherches montrent que des bugs dans le compilateur Clang C++ peuvent également entraîner des conséquences graves, telles que l'exécution de code à distance.
Le compilateur Solidity présente également des vulnérabilités de sécurité. Selon l'alerte de sécurité publiée par l'équipe de développement de Solidity, plusieurs versions du compilateur Solidity présentent des risques de sécurité. Le rôle du compilateur Solidity est de convertir le code des contrats intelligents en code d'instructions (EVM) pour la machine virtuelle Ethereum, ces codes d'instructions étant finalement téléchargés sur Ethereum via des transactions et exécutés par l'EVM.
Il est important de noter que les vulnérabilités du compilateur Solidity sont différentes des vulnérabilités de l'EVM elle-même. Les vulnérabilités de l'EVM font référence aux problèmes de sécurité qui surviennent lorsque la machine virtuelle exécute des instructions, ce qui peut affecter l'ensemble du réseau Ethereum. En revanche, les vulnérabilités du compilateur Solidity concernent les problèmes rencontrés par le compilateur lors de la conversion du code Solidity en code EVM, et n'affectent pas directement le réseau Ethereum lui-même.
Les vulnérabilités du compilateur Solidity peuvent entraîner une incohérence entre le code EVM généré et les attentes des développeurs. Étant donné que les contrats intelligents sur Ethereum impliquent généralement des actifs cryptographiques des utilisateurs, tout bug causé par le compilateur peut entraîner des pertes d'actifs pour les utilisateurs, avec des conséquences graves. Les développeurs et les auditeurs de contrats se concentrent généralement sur la mise en œuvre logique des contrats et les problèmes de sécurité courants, tandis que les vulnérabilités du compilateur sont difficiles à détecter uniquement par l'audit du code source, nécessitant une analyse conjointe des versions spécifiques du compilateur et des modèles de code.
Voici quelques exemples réels de vulnérabilités du compilateur Solidity :
Cette vulnérabilité existe dans les versions antérieures du compilateur Solidity (\u003e=0.1.6 \u003c0.4.4). Dans certains cas, la valeur des variables de stockage peut être modifiée accidentellement, entraînant des valeurs de retour de fonction qui ne correspondent pas aux attentes. Cette incohérence peut avoir des conséquences graves dans des scénarios tels que la vérification des autorisations ou la comptabilisation des actifs.
Cette vulnérabilité existe dans les compilateurs des versions 0.8.13 à 0.8.15. En raison d'un problème de stratégie d'optimisation du compilateur, certaines modifications de la mémoire dans le code d'assemblage en ligne peuvent être incorrectement supprimées, entraînant une erreur dans la valeur de retour de la fonction.
Cette vulnérabilité affecte les versions du compilateur de 0.5.8 à 0.8.16. Lors de l'opération abi.encode sur un tableau de type calldata, il se peut que certaines données soient incorrectement nettoyées, entraînant la modification de données adjacentes et provoquant une incohérence des données après encodage et décodage.
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é :
Quelques ressources pratiques:
En comprenant les caractéristiques et les impacts des vulnérabilités du compilateur Solidity, les développeurs et les responsables de la sécurité peuvent évaluer de manière plus globale les risques de sécurité des contrats intelligents et prendre des mesures adéquates pour réduire les menaces potentielles.