Análise Profundidade de Vulnerabilidades do Compilador Solidity
O compilador é um dos componentes fundamentais dos sistemas de computação modernos, e sua principal função é converter o código-fonte da linguagem de programação de alto nível em código de instruções executáveis de baixo nível para o computador. Embora a maioria dos desenvolvedores e profissionais de segurança geralmente se concentre na segurança do código de aplicação, a segurança do próprio compilador muitas vezes é negligenciada. Na verdade, o compilador, como um programa de computador, também pode ter vulnerabilidades de segurança, que em certas situações podem representar riscos de segurança graves.
Por exemplo, durante o processo de execução de código JavaScript pelo navegador, uma vulnerabilidade no mecanismo de análise do JavaScript pode levar os usuários a sofrerem ataques de execução remota de código ao visitar páginas da web maliciosas, resultando na eventual tomada de controle do navegador ou até mesmo do sistema operacional da vítima pelo atacante. Além disso, estudos mostram que um bug no compilador Clang C++ também pode causar consequências graves, como execução remota de código.
O compilador Solidity também apresenta vulnerabilidades de segurança. De acordo com o alerta de segurança publicado pela equipe de desenvolvimento do Solidity, várias versões do compilador Solidity contêm riscos de segurança. A função do compilador Solidity é converter o código do contrato inteligente em código de instrução da Máquina Virtual Ethereum (EVM), que é finalmente carregado na Ethereum através de transações e executado pela EVM.
É importante notar que as vulnerabilidades do compilador Solidity são diferentes das vulnerabilidades da própria EVM. As vulnerabilidades da EVM referem-se a problemas de segurança que surgem durante a execução de instruções pela máquina virtual, o que pode afetar toda a rede Ethereum. Já as vulnerabilidades do compilador Solidity referem-se a problemas que ocorrem quando o compilador converte o código Solidity em código EVM, não afetando diretamente a rede Ethereum em si.
Vulnerabilidades no compilador Solidity podem levar a que o código EVM gerado não corresponda às expectativas do desenvolvedor. Como os contratos inteligentes na Ethereum geralmente envolvem os ativos em criptomoeda dos usuários, qualquer bug causado pelo compilador pode resultar em perdas de ativos para os usuários, com consequências graves. Desenvolvedores e auditores de contratos costumam se concentrar na implementação da lógica do contrato e em problemas de segurança comuns, enquanto vulnerabilidades no compilador são difíceis de detectar apenas por auditoria de código-fonte, necessitando de uma análise conjunta de versões específicas do compilador e padrões de código.
Aqui estão alguns exemplos reais de vulnerabilidades do compilador Solidity:
SOL-2016-9 HighOrderByteCleanStorage
A vulnerabilidade existe em versões anteriores do compilador Solidity (>=0.1.6 <0.4.4). Em certas circunstâncias, o valor das variáveis de storage pode ser acidentalmente modificado, levando a um retorno de valor da função que não corresponde ao esperado. Essa inconsistência pode causar consequências graves em cenários como verificação de permissões ou contabilidade de ativos.
SOL-2022-4 Efeitos Colaterais de Memória em InlineAssembly
A vulnerabilidade existe nas versões do compilador de 0.8.13 a 0.8.15. Devido a um problema nas estratégias de otimização do compilador, algumas modificações de memória em códigos de assembly inline podem ser removidas incorretamente, levando a erros nos valores de retorno das funções.
A vulnerabilidade afeta os compiladores das versões 0.5.8 a 0.8.16. Ao realizar a operação abi.encode em um array do tipo calldata, pode ocorrer a limpeza incorreta de certos dados, resultando na modificação de dados adjacentes, causando inconsistências nos dados codificados e decodificados.
Em relação a vulnerabilidades do compilador Solidity, a equipe de segurança da Cobo Blockchain recomenda as seguintes sugestões:
Para desenvolvedores:
Utilize uma versão mais recente do compilador Solidity
Melhorar os casos de teste unitários, aumentar a profundidade do código
Evite usar montagem em linha, operações de codificação e decodificação ABI complexas, e use com cautela novos recursos e funcionalidades experimentais.
Para o pessoal de segurança:
Considerar os riscos de segurança que o compilador pode introduzir durante a auditoria
Recomenda-se que a equipe de desenvolvimento atualize a versão do compilador a tempo.
Introduzir a verificação automática da versão do compilador no processo CI/CD
Avaliar o impacto real da segurança das vulnerabilidades do compilador com base em projetos específicos.
Alguns recursos práticos:
Aviso de segurança do blog oficial do Solidity
Lista de bugs do repositório GitHub do Solidity
Lista de bugs do compilador de várias versões
Aviso de vulnerabilidade na página de código de contrato do Etherscan
Ao compreender as características e impactos das vulnerabilidades do compilador Solidity, os desenvolvedores e profissionais de segurança podem avaliar de forma mais abrangente os riscos de segurança dos contratos inteligentes e tomar medidas adequadas para reduzir ameaças potenciais.
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 gostos
Recompensa
16
6
Partilhar
Comentar
0/400
0xSoulless
· 3h atrás
Outra ferramenta para fazer as pessoas de parvas
Ver originalResponder0
RumbleValidator
· 07-12 19:34
Esta vulnerabilidade pode provocar erros na camada de consenso? O risco dos nós de validação é grande.
Ver originalResponder0
SocialFiQueen
· 07-12 19:29
Parece que os contratos inteligentes vão falhar~ Haha, muito emocionante
Ver originalResponder0
CryptoTherapist
· 07-12 19:27
apenas mais um caso de síndrome de ansiedade de dev... respire durante o processo de depuração família
Ver originalResponder0
StablecoinAnxiety
· 07-12 19:14
Compiladores não são seguros, quem se atreve a codificar?
Ver originalResponder0
Blockwatcher9000
· 07-12 19:06
Desenvolvedores são tão difíceis, abracei meu btc e puxei o tapete.
Análise de vulnerabilidades do compilador Solidity: riscos ocultos que afetam a segurança dos contratos inteligentes
Análise Profundidade de Vulnerabilidades do Compilador Solidity
O compilador é um dos componentes fundamentais dos sistemas de computação modernos, e sua principal função é converter o código-fonte da linguagem de programação de alto nível em código de instruções executáveis de baixo nível para o computador. Embora a maioria dos desenvolvedores e profissionais de segurança geralmente se concentre na segurança do código de aplicação, a segurança do próprio compilador muitas vezes é negligenciada. Na verdade, o compilador, como um programa de computador, também pode ter vulnerabilidades de segurança, que em certas situações podem representar riscos de segurança graves.
Por exemplo, durante o processo de execução de código JavaScript pelo navegador, uma vulnerabilidade no mecanismo de análise do JavaScript pode levar os usuários a sofrerem ataques de execução remota de código ao visitar páginas da web maliciosas, resultando na eventual tomada de controle do navegador ou até mesmo do sistema operacional da vítima pelo atacante. Além disso, estudos mostram que um bug no compilador Clang C++ também pode causar consequências graves, como execução remota de código.
O compilador Solidity também apresenta vulnerabilidades de segurança. De acordo com o alerta de segurança publicado pela equipe de desenvolvimento do Solidity, várias versões do compilador Solidity contêm riscos de segurança. A função do compilador Solidity é converter o código do contrato inteligente em código de instrução da Máquina Virtual Ethereum (EVM), que é finalmente carregado na Ethereum através de transações e executado pela EVM.
É importante notar que as vulnerabilidades do compilador Solidity são diferentes das vulnerabilidades da própria EVM. As vulnerabilidades da EVM referem-se a problemas de segurança que surgem durante a execução de instruções pela máquina virtual, o que pode afetar toda a rede Ethereum. Já as vulnerabilidades do compilador Solidity referem-se a problemas que ocorrem quando o compilador converte o código Solidity em código EVM, não afetando diretamente a rede Ethereum em si.
Vulnerabilidades no compilador Solidity podem levar a que o código EVM gerado não corresponda às expectativas do desenvolvedor. Como os contratos inteligentes na Ethereum geralmente envolvem os ativos em criptomoeda dos usuários, qualquer bug causado pelo compilador pode resultar em perdas de ativos para os usuários, com consequências graves. Desenvolvedores e auditores de contratos costumam se concentrar na implementação da lógica do contrato e em problemas de segurança comuns, enquanto vulnerabilidades no compilador são difíceis de detectar apenas por auditoria de código-fonte, necessitando de uma análise conjunta de versões específicas do compilador e padrões de código.
Aqui estão alguns exemplos reais de vulnerabilidades do compilador Solidity:
A vulnerabilidade existe em versões anteriores do compilador Solidity (>=0.1.6 <0.4.4). Em certas circunstâncias, o valor das variáveis de storage pode ser acidentalmente modificado, levando a um retorno de valor da função que não corresponde ao esperado. Essa inconsistência pode causar consequências graves em cenários como verificação de permissões ou contabilidade de ativos.
A vulnerabilidade existe nas versões do compilador de 0.8.13 a 0.8.15. Devido a um problema nas estratégias de otimização do compilador, algumas modificações de memória em códigos de assembly inline podem ser removidas incorretamente, levando a erros nos valores de retorno das funções.
A vulnerabilidade afeta os compiladores das versões 0.5.8 a 0.8.16. Ao realizar a operação abi.encode em um array do tipo calldata, pode ocorrer a limpeza incorreta de certos dados, resultando na modificação de dados adjacentes, causando inconsistências nos dados codificados e decodificados.
Em relação a vulnerabilidades do compilador Solidity, a equipe de segurança da Cobo Blockchain recomenda as seguintes sugestões:
Para desenvolvedores:
Para o pessoal de segurança:
Alguns recursos práticos:
Ao compreender as características e impactos das vulnerabilidades do compilador Solidity, os desenvolvedores e profissionais de segurança podem avaliar de forma mais abrangente os riscos de segurança dos contratos inteligentes e tomar medidas adequadas para reduzir ameaças potenciais.