Análise de vulnerabilidades do compilador Solidity e estratégias de resposta
O compilador, como um dos componentes fundamentais dos sistemas computacionais modernos, tem a função de converter o código fonte de linguagens de programação de alto nível em códigos de instrução executáveis por computadores. No entanto, o próprio compilador também pode apresentar vulnerabilidades de segurança, o que, em certas situações, pode trazer sérios riscos de segurança.
Tomando o campo da blockchain como exemplo, 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). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity manifestam-se principalmente quando há problemas na conversão de Solidity para o código EVM, o que pode resultar em um código EVM gerado que não corresponde às expectativas do desenvolvedor. Essa inconsistência pode ter um impacto sério em contratos inteligentes que envolvem ativos de criptomoeda.
Vamos entender melhor as falhas do compilador Solidity através de alguns casos reais:
SOL-2016-9 HighOrderByteCleanStorage
Esta vulnerabilidade existe em versões mais antigas do compilador Solidity entre (0.1.6 e 0.4.4 ). Em certas situações, as variáveis de armazenamento podem ser alteradas acidentalmente, levando a valores de retorno de função que não correspondem ao esperado. Este problema é difícil de detectar por meio de uma simples revisão de código, mas se envolver validação de permissões ou contabilidade de ativos, as consequências podem ser muito graves.
SOL-2022-4 Efeitos Colaterais de Memória em Inline Assembly
A vulnerabilidade afeta os compiladores das versões 0.8.13 a 0.8.15. Devido ao tratamento incorreto de blocos de assembly durante o processo de otimização da compilação, algumas operações de escrita em memória podem ser removidas incorretamente, resultando em valores de retorno de função que não são os esperados.
SOL-2022-6 Overflow de Cabeçalho de Recodificação Abi com Limpeza de Array Estático
Esta vulnerabilidade existe nas versões 0.5.8 a 0.8.16 do compilador. Ao realizar a operação abi.encode em um array do tipo calldata, pode haver a limpeza incorreta de alguns dados, levando à modificação de dados adjacentes, resultando, em última análise, em inconsistências nos dados após a codificação e decodificação.
Com base na análise das vulnerabilidades do compilador Solidity, apresentamos as seguintes recomendações para desenvolvedores e profissionais de segurança:
Para desenvolvedores:
Use uma versão mais recente do compilador Solidity
Melhorar os casos de teste unitários, aumentar a cobertura do código
Evite usar assembly embutido, operações complexas de codificação e decodificação de ABI, etc.
Use com cautela novos recursos de linguagem e funcionalidades experimentais
Para o pessoal de segurança:
Considerar os riscos de segurança que o compilador pode introduzir durante a auditoria
Incentivar a atualização da versão do compilador durante o processo de desenvolvimento
Introduzir verificação automática da versão do compilador no processo CI/CD
Avaliar o impacto de segurança real das vulnerabilidades do compilador com base em projetos específicos
Alguns recursos práticos:
Alerta de segurança divulgado pela equipe Solidity
Lista de bugs do repositório oficial do Solidity
Lista de bugs do compilador em várias versões
Aviso de segurança na página de código do contrato Etherscan
Em geral, as vulnerabilidades do compilador Solidity, embora não sejam comuns, não devem ser ignoradas em termos de impacto potencial. Desenvolvedores e profissionais de segurança devem manter-se atentos e tomar medidas adequadas para mitigar os riscos.
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.
18 Curtidas
Recompensa
18
5
Repostar
Compartilhar
Comentário
0/400
SchrodingersFOMO
· 11h atrás
Mais um dia em que fui enganado pelo compilador.
Ver originalResponder0
PumpDetector
· 08-10 06:17
a mesma história de sempre... tenho visto problemas de compilador desde '13, os dias do mtgox eram mais loucos, para ser honesto
Ver originalResponder0
AirdropHuntress
· 08-10 06:13
Os detalhes da auditoria de código são inofensivos, o verdadeiro problema é a carteira do capitalista.
Ver originalResponder0
TokenEconomist
· 08-10 06:06
na verdade, toda essa questão do EVM vs compilador Solidity paralela o notório bug do Y2K... coisas fascinantes, para ser sincero
Ver originalResponder0
MidnightTrader
· 08-10 05:59
Parece que o compilador falhou, o risco do projeto é muito alto.
Vulnerabilidades do compilador Solidity: riscos potenciais e estratégias de resposta
Análise de vulnerabilidades do compilador Solidity e estratégias de resposta
O compilador, como um dos componentes fundamentais dos sistemas computacionais modernos, tem a função de converter o código fonte de linguagens de programação de alto nível em códigos de instrução executáveis por computadores. No entanto, o próprio compilador também pode apresentar vulnerabilidades de segurança, o que, em certas situações, pode trazer sérios riscos de segurança.
Tomando o campo da blockchain como exemplo, 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). Ao contrário das vulnerabilidades da própria EVM, as vulnerabilidades do compilador Solidity manifestam-se principalmente quando há problemas na conversão de Solidity para o código EVM, o que pode resultar em um código EVM gerado que não corresponde às expectativas do desenvolvedor. Essa inconsistência pode ter um impacto sério em contratos inteligentes que envolvem ativos de criptomoeda.
Vamos entender melhor as falhas do compilador Solidity através de alguns casos reais:
Esta vulnerabilidade existe em versões mais antigas do compilador Solidity entre (0.1.6 e 0.4.4 ). Em certas situações, as variáveis de armazenamento podem ser alteradas acidentalmente, levando a valores de retorno de função que não correspondem ao esperado. Este problema é difícil de detectar por meio de uma simples revisão de código, mas se envolver validação de permissões ou contabilidade de ativos, as consequências podem ser muito graves.
A vulnerabilidade afeta os compiladores das versões 0.8.13 a 0.8.15. Devido ao tratamento incorreto de blocos de assembly durante o processo de otimização da compilação, algumas operações de escrita em memória podem ser removidas incorretamente, resultando em valores de retorno de função que não são os esperados.
Esta vulnerabilidade existe nas versões 0.5.8 a 0.8.16 do compilador. Ao realizar a operação abi.encode em um array do tipo calldata, pode haver a limpeza incorreta de alguns dados, levando à modificação de dados adjacentes, resultando, em última análise, em inconsistências nos dados após a codificação e decodificação.
Com base na análise das vulnerabilidades do compilador Solidity, apresentamos as seguintes recomendações para desenvolvedores e profissionais de segurança:
Para desenvolvedores:
Para o pessoal de segurança:
Alguns recursos práticos:
Em geral, as vulnerabilidades do compilador Solidity, embora não sejam comuns, não devem ser ignoradas em termos de impacto potencial. Desenvolvedores e profissionais de segurança devem manter-se atentos e tomar medidas adequadas para mitigar os riscos.