Análise de vulnerabilidades do compilador Solidity e medidas de mitigação
O compilador é um dos componentes básicos dos sistemas de computação modernos, cuja função é converter o código-fonte em linguagem de programação de alto nível em instruções que o computador pode executar. 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 também é importante. Vulnerabilidades no compilador podem representar riscos de segurança graves em cenários específicos, como quando um navegador, ao analisar e executar código Javascript, pode levar à execução remota de código devido a vulnerabilidades no motor de análise.
O compilador Solidity não é exceção, apresentando vulnerabilidades de segurança em várias versões. O papel do compilador Solidity é converter o código do contrato inteligente em código de instruções da Máquina Virtual Ethereum (EVM). É importante notar que as vulnerabilidades do compilador Solidity são diferentes das vulnerabilidades da própria EVM. As vulnerabilidades da EVM podem afetar toda a rede Ethereum, enquanto as vulnerabilidades do compilador Solidity impactam principalmente os desenvolvedores de contratos inteligentes e os usuários.
Uma das ameaças de uma vulnerabilidade no compilador Solidity é que pode resultar em código EVM gerado que não está em conformidade com as expectativas do desenvolvedor. Como os contratos inteligentes geralmente envolvem os ativos de criptomoeda dos usuários, qualquer bug causado pelo compilador pode ter consequências graves. Este tipo de problema é difícil de detectar apenas com uma auditoria de código simples, necessitando de uma análise combinada da versão específica do compilador e dos padrões de código.
Aqui estão alguns exemplos reais de vulnerabilidades do compilador Solidity:
SOL-2016-9 HighOrderByteCleanStorage:
Essa vulnerabilidade existe em versões iniciais do compilador Solidity (>=0.1.6 <0.4.4). Como o compilador não trata corretamente a operação de limpeza do alto após um estouro de inteiro, isso pode levar à modificação acidental dos valores de variáveis adjacentes.
SOL-2022-4 InlineAssemblyMemorySideEffects:
A vulnerabilidade existe nas versões de compiladores >=0.8.13 <0.8.15. Devido ao tratamento incorreto do código assembly inline durante a otimização do compilador, algumas operações de memória podem ser otimizadas de forma errada.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
A vulnerabilidade afeta compiladores de versões >= 0.5.8 < 0.8.16. Durante a operação de abi.encode em um array do tipo calldata, pode haver uma limpeza incorreta de alguns dados, resultando na modificação de dados adjacentes.
Em relação às vulnerabilidades do compilador Solidity, a equipe de segurança blockchain da Cobo propõe as seguintes recomendações:
Para os desenvolvedores:
Usar uma versão mais recente do compilador Solidity
Melhorar os casos de teste unitários
Evite o uso de assembly inline, operações complexas de codificação e decodificação ABI, etc.
Use com cautela as novas funcionalidades da linguagem e recursos experimentais
Para os responsáveis pela segurança:
Considere os riscos que o compilador pode introduzir durante a auditoria de segurança.
Promover a atualização da versão do compilador no processo de desenvolvimento
Introduzir verificação automática da versão do compilador no processo de CI/CD
Avaliar o impacto de segurança real das vulnerabilidades do compilador com base nas circunstâncias específicas do projeto.
Alguns recursos úteis:
Alerta de segurança oficial publicado pelo Solidity
Lista de bugs atualizada do repositório oficial do Solidity
Lista de bugs dos compiladores de várias versões
Funcionalidade de alerta de vulnerabilidades do compilador fornecida pelo Etherscan
Ao focar na segurança do compilador, na realização de testes adequados, no uso cauteloso de características complexas e na atualização oportuna das versões do compilador, os desenvolvedores e profissionais de segurança podem efetivamente reduzir os riscos associados a vulnerabilidades do compilador Solidity, aumentando a segurança geral dos contratos inteligentes.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
15 Curtidas
Recompensa
15
6
Compartilhar
Comentário
0/400
Rekt_Recovery
· 07-12 06:08
rip aos fundos de todos... já estive lá, perdi tudo devido a bugs de compilador em 2018 smh
Ver originalResponder0
RunWhenCut
· 07-12 05:51
medir ou não medir, vai fazer as pessoas de parvas
Ver originalResponder0
FUDwatcher
· 07-12 03:11
Este bug é realmente assustador, vou-me embora.
Ver originalResponder0
ResearchChadButBroke
· 07-09 10:27
O compilador voltou a dar problemas? Vou ficar acordado a corrigir bugs.
Ver originalResponder0
MoonlightGamer
· 07-09 10:19
O código foi verificado, não há problemas.
Ver originalResponder0
GasGuzzler
· 07-09 09:58
Ainda estou a escrever contratos inteligentes, tem um cheiro a idiotas.
Análise de vulnerabilidades do compilador Solidity e estratégias de resposta
Análise de vulnerabilidades do compilador Solidity e medidas de mitigação
O compilador é um dos componentes básicos dos sistemas de computação modernos, cuja função é converter o código-fonte em linguagem de programação de alto nível em instruções que o computador pode executar. 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 também é importante. Vulnerabilidades no compilador podem representar riscos de segurança graves em cenários específicos, como quando um navegador, ao analisar e executar código Javascript, pode levar à execução remota de código devido a vulnerabilidades no motor de análise.
O compilador Solidity não é exceção, apresentando vulnerabilidades de segurança em várias versões. O papel do compilador Solidity é converter o código do contrato inteligente em código de instruções da Máquina Virtual Ethereum (EVM). É importante notar que as vulnerabilidades do compilador Solidity são diferentes das vulnerabilidades da própria EVM. As vulnerabilidades da EVM podem afetar toda a rede Ethereum, enquanto as vulnerabilidades do compilador Solidity impactam principalmente os desenvolvedores de contratos inteligentes e os usuários.
Uma das ameaças de uma vulnerabilidade no compilador Solidity é que pode resultar em código EVM gerado que não está em conformidade com as expectativas do desenvolvedor. Como os contratos inteligentes geralmente envolvem os ativos de criptomoeda dos usuários, qualquer bug causado pelo compilador pode ter consequências graves. Este tipo de problema é difícil de detectar apenas com uma auditoria de código simples, necessitando de uma análise combinada da versão específica do compilador e dos padrões de código.
Aqui estão alguns exemplos reais de vulnerabilidades do compilador Solidity:
SOL-2016-9 HighOrderByteCleanStorage: Essa vulnerabilidade existe em versões iniciais do compilador Solidity (>=0.1.6 <0.4.4). Como o compilador não trata corretamente a operação de limpeza do alto após um estouro de inteiro, isso pode levar à modificação acidental dos valores de variáveis adjacentes.
SOL-2022-4 InlineAssemblyMemorySideEffects: A vulnerabilidade existe nas versões de compiladores >=0.8.13 <0.8.15. Devido ao tratamento incorreto do código assembly inline durante a otimização do compilador, algumas operações de memória podem ser otimizadas de forma errada.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: A vulnerabilidade afeta compiladores de versões >= 0.5.8 < 0.8.16. Durante a operação de abi.encode em um array do tipo calldata, pode haver uma limpeza incorreta de alguns dados, resultando na modificação de dados adjacentes.
Em relação às vulnerabilidades do compilador Solidity, a equipe de segurança blockchain da Cobo propõe as seguintes recomendações:
Para os desenvolvedores:
Para os responsáveis pela segurança:
Alguns recursos úteis:
Ao focar na segurança do compilador, na realização de testes adequados, no uso cauteloso de características complexas e na atualização oportuna das versões do compilador, os desenvolvedores e profissionais de segurança podem efetivamente reduzir os riscos associados a vulnerabilidades do compilador Solidity, aumentando a segurança geral dos contratos inteligentes.