Análise de vulnerabilidades do compilador Solidity e estratégias de mitigação
O compilador é um dos componentes fundamentais dos sistemas de computação modernos, e sua principal função é converter o código-fonte de linguagens de programação de alto nível em código de instruções que o computador pode executar. Comparado à segurança do código de aplicação, os problemas de segurança do próprio compilador muitas vezes são facilmente ignorados. No entanto, as vulnerabilidades do compilador podem também representar riscos de segurança graves em cenários específicos.
O compilador Solidity tem a função de converter o código do contrato inteligente em código de instruções para a Máquina Virtual Ethereum (EVM). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity não afetam diretamente a rede Ethereum, mas podem resultar em um código EVM gerado que não corresponde às expectativas do desenvolvedor, impactando assim o funcionamento normal do contrato inteligente, potencialmente causando perdas de ativos dos usuários.
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). Como o compilador não limpa corretamente os bits altos ao lidar com estouro de inteiros, isso pode levar à modificação acidental dos valores de variáveis adjacentes.
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 problemas na estratégia de otimização do compilador, pode remover incorretamente as instruções de escrita de memória na assembly inline, resultando em um comportamento do programa diferente do esperado.
A vulnerabilidade afeta as versões do compilador de 0.5.8 a 0.8.16. Ao realizar a operação abi.encode em um array do tipo calldata, pode haver uma modificação incorreta de dados adjacentes, resultando em inconsistências nos dados após a codificação e decodificação.
Em relação a vulnerabilidades do compilador Solidity, recomenda-se aos desenvolvedores:
Use uma versão mais recente do compilador Solidity
Melhorar os casos de teste unitários, aumentar a cobertura de código
Tente evitar o uso de características de linguagem complexas, como montagem inline, codificação e decodificação ABI de arrays multidimensionais, etc.
Para os auditores de segurança, recomenda-se:
Considerar os riscos de segurança que o compilador pode introduzir durante o processo de auditoria
Incentivar a equipe de desenvolvimento a atualizar a versão do compilador durante o processo SDL
Introduzir verificação automática da versão do compilador no CI/CD
É importante notar que a maioria das vulnerabilidades de compiladores só é acionada em padrões de código específicos, portanto, usar uma versão vulnerável do compilador não significa que o contrato necessariamente apresenta riscos de segurança; o impacto real precisa ser avaliado de forma específica.
Para continuar a acompanhar as questões de segurança do compilador Solidity, pode consultar os seguintes recursos:
Aviso de segurança publicado pela equipe Solidity
Lista de bugs no repositório oficial do Solidity
Lista de bugs dos compiladores de várias versões
Aviso de segurança na página do código do contrato no Etherscan
Ao focar na segurança do compilador, utilizar adequadamente as características da linguagem e manter-se alerta, desenvolvedores e profissionais de segurança podem garantir melhor a segurança dos contratos inteligentes.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
15 gostos
Recompensa
15
6
Partilhar
Comentar
0/400
CommunitySlacker
· 1m atrás
Por que ainda não foi corrigido? Quem é responsável pela quebra do contrato?
Ver originalResponder0
ConsensusBot
· 21h atrás
Quem vai carregar esta panela?
Ver originalResponder0
RebaseVictim
· 21h atrás
Meu Deus, ainda se atreve a usar a versão antiga do compilador.
Ver originalResponder0
LiquidityHunter
· 21h atrás
Atualize, caso contrário, o dinheiro desaparecerá 555
Análise de vulnerabilidades do compilador Solidity e estratégias de mitigação
Análise de vulnerabilidades do compilador Solidity e estratégias de mitigação
O compilador é um dos componentes fundamentais dos sistemas de computação modernos, e sua principal função é converter o código-fonte de linguagens de programação de alto nível em código de instruções que o computador pode executar. Comparado à segurança do código de aplicação, os problemas de segurança do próprio compilador muitas vezes são facilmente ignorados. No entanto, as vulnerabilidades do compilador podem também representar riscos de segurança graves em cenários específicos.
O compilador Solidity tem a função de converter o código do contrato inteligente em código de instruções para a Máquina Virtual Ethereum (EVM). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity não afetam diretamente a rede Ethereum, mas podem resultar em um código EVM gerado que não corresponde às expectativas do desenvolvedor, impactando assim o funcionamento normal do contrato inteligente, potencialmente causando perdas de ativos dos usuários.
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). Como o compilador não limpa corretamente os bits altos ao lidar com estouro de inteiros, isso pode levar à modificação acidental dos valores de variáveis adjacentes.
A vulnerabilidade existe nas versões do compilador de 0.8.13 a 0.8.15. Devido a problemas na estratégia de otimização do compilador, pode remover incorretamente as instruções de escrita de memória na assembly inline, resultando em um comportamento do programa diferente do esperado.
A vulnerabilidade afeta as versões do compilador de 0.5.8 a 0.8.16. Ao realizar a operação abi.encode em um array do tipo calldata, pode haver uma modificação incorreta de dados adjacentes, resultando em inconsistências nos dados após a codificação e decodificação.
Em relação a vulnerabilidades do compilador Solidity, recomenda-se aos desenvolvedores:
Para os auditores de segurança, recomenda-se:
É importante notar que a maioria das vulnerabilidades de compiladores só é acionada em padrões de código específicos, portanto, usar uma versão vulnerável do compilador não significa que o contrato necessariamente apresenta riscos de segurança; o impacto real precisa ser avaliado de forma específica.
Para continuar a acompanhar as questões de segurança do compilador Solidity, pode consultar os seguintes recursos:
Ao focar na segurança do compilador, utilizar adequadamente as características da linguagem e manter-se alerta, desenvolvedores e profissionais de segurança podem garantir melhor a segurança dos contratos inteligentes.