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, responsável por converter o código fonte de linguagens de programação de alto nível em código de instruções executáveis por computadores. Embora os desenvolvedores e profissionais de segurança normalmente se preocupem mais com a segurança do código da aplicação, a segurança do próprio compilador também não deve ser negligenciada. Como um programa de computador, o compilador também pode ter vulnerabilidades de segurança, que em certos casos podem representar riscos sérios de segurança.
O papel do compilador Solidity é converter o código do contrato inteligente em código de instrução para a Máquina Virtual Ethereum (EVM). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity afetam principalmente os desenvolvedores de contratos, sem comprometer diretamente a segurança da rede Ethereum. No entanto, as vulnerabilidades do compilador podem levar a que o código EVM gerado não corresponda às expectativas do desenvolvedor, resultando em perdas de ativos graves.
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 compilador falhou em limpar corretamente os bits altos após um estouro de inteiro, resultando na modificação acidental do valor das variáveis armazenadas.
SOL-2022-4 Efeitos Colaterais da Memória InlineAssembly
Esta vulnerabilidade afeta compiladores da versão >=0.8.13 <0.8.15. Devido a problemas de otimização dos blocos de assembly inline, pode acabar removendo incorretamente certas operações de escrita na memória, levando a comportamentos anômalos do programa.
A vulnerabilidade existe em compiladores da versão >= 0.5.8 < 0.8.16. Ao executar a operação abi.encode em um array do tipo calldata, o compilador limpa incorretamente certos dados, resultando na modificação de dados adjacentes, causando inconsistências nos dados após a codificação e decodificação.
Para enfrentar os riscos decorrentes das vulnerabilidades do compilador Solidity, os desenvolvedores e os profissionais de segurança podem adotar as seguintes medidas:
Para desenvolvedores:
Use uma versão mais recente do compilador Solidity, pois as novas versões geralmente corrigem problemas de segurança conhecidos.
Aprimorar os casos de teste de unidade, aumentar a cobertura de código, ajuda a descobrir comportamentos anômalos introduzidos pelo compilador.
Evite usar operações que possam causar problemas, como assembly inline, codificação e decodificação ABI complexas.
Para o pessoal de segurança:
Durante a auditoria de segurança, não negligencie os riscos de segurança que o compilador pode introduzir.
Durante o processo de desenvolvimento interno, encorajar a equipe de desenvolvimento a atualizar a versão do compilador em tempo útil e considerar a introdução de uma verificação automática da versão do compilador no processo de CI/CD.
Mantenha-se atento a vulnerabilidades do compilador, mas não entre em pânico excessivo. A maioria das vulnerabilidades só é ativada em padrões de código específicos, sendo necessário avaliar o impacto real com base na situação concreta.
Alguns recursos úteis:
Alertas de segurança publicados regularmente pela equipe Solidity
Lista de vulnerabilidades atualizada regularmente no repositório oficial do Solidity
Lista de vulnerabilidades de compiladores de várias versões, que pode ser utilizada para verificação automática no processo de CI/CD.
O ícone de aviso no canto superior direito da página do código do contrato Etherscan pode indicar vulnerabilidades de segurança na versão atual do compilador.
Ao compreender as características e os riscos das vulnerabilidades do compilador Solidity, ao tomar as devidas precauções, os desenvolvedores e os profissionais de segurança podem proteger melhor a segurança dos contratos inteligentes, reduzindo o risco potencial de perda de ativos.
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
AirdropHunterKing
· 7h atrás
Depois de tanto tempo testando o contrato do cachorro, acabei me dando mal e comi um monte de ar. Irmãos, não copiem o contrato antigo!
Ver originalResponder0
Layer3Dreamer
· 10h atrás
falando teoricamente, bugs de compilador = suposições de confiança recursivas, para ser honesto
Ver originalResponder0
IntrovertMetaverse
· 10h atrás
Verificações de transbordamento de alta e baixa!
Ver originalResponder0
NftDeepBreather
· 10h atrás
Esta vulnerabilidade é explosiva.
Ver originalResponder0
RunWhenCut
· 10h atrás
Mais uma velha história de vulnerabilidade de compilador. Que chato!
Ver originalResponder0
FarmToRiches
· 10h atrás
Se não escrever o teste completo, prepare-se para perder tudo.
Análise de vulnerabilidades do compilador Solidity e suas 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, responsável por converter o código fonte de linguagens de programação de alto nível em código de instruções executáveis por computadores. Embora os desenvolvedores e profissionais de segurança normalmente se preocupem mais com a segurança do código da aplicação, a segurança do próprio compilador também não deve ser negligenciada. Como um programa de computador, o compilador também pode ter vulnerabilidades de segurança, que em certos casos podem representar riscos sérios de segurança.
O papel do compilador Solidity é converter o código do contrato inteligente em código de instrução para a Máquina Virtual Ethereum (EVM). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity afetam principalmente os desenvolvedores de contratos, sem comprometer diretamente a segurança da rede Ethereum. No entanto, as vulnerabilidades do compilador podem levar a que o código EVM gerado não corresponda às expectativas do desenvolvedor, resultando em perdas de ativos graves.
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 compilador falhou em limpar corretamente os bits altos após um estouro de inteiro, resultando na modificação acidental do valor das variáveis armazenadas.
Esta vulnerabilidade afeta compiladores da versão >=0.8.13 <0.8.15. Devido a problemas de otimização dos blocos de assembly inline, pode acabar removendo incorretamente certas operações de escrita na memória, levando a comportamentos anômalos do programa.
A vulnerabilidade existe em compiladores da versão >= 0.5.8 < 0.8.16. Ao executar a operação abi.encode em um array do tipo calldata, o compilador limpa incorretamente certos dados, resultando na modificação de dados adjacentes, causando inconsistências nos dados após a codificação e decodificação.
Para enfrentar os riscos decorrentes das vulnerabilidades do compilador Solidity, os desenvolvedores e os profissionais de segurança podem adotar as seguintes medidas:
Para desenvolvedores:
Para o pessoal de segurança:
Alguns recursos úteis:
Ao compreender as características e os riscos das vulnerabilidades do compilador Solidity, ao tomar as devidas precauções, os desenvolvedores e os profissionais de segurança podem proteger melhor a segurança dos contratos inteligentes, reduzindo o risco potencial de perda de ativos.