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ú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.
16 Curtidas
Recompensa
16
7
Compartilhar
Comentário
0/400
PessimisticOracle
· 15m atrás
Esta vulnerabilidade é mesmo real!
Ver originalResponder0
AirdropHunterKing
· 12h 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
· 15h atrás
falando teoricamente, bugs de compilador = suposições de confiança recursivas, para ser honesto
Ver originalResponder0
IntrovertMetaverse
· 15h atrás
Verificações de transbordamento de alta e baixa!
Ver originalResponder0
NftDeepBreather
· 15h atrás
Esta vulnerabilidade é explosiva.
Ver originalResponder0
RunWhenCut
· 16h atrás
Mais uma velha história de vulnerabilidade de compilador. Que chato!
Ver originalResponder0
FarmToRiches
· 16h 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.