Análise de vulnerabilidades do compilador Solidity e estratégias de mitigação
O compilador é uma parte importante dos sistemas de computação modernos, cuja função é converter o código-fonte de linguagens de programação de alto nível em código de instrução executável pelo computador. Em comparação com o código de aplicativos, a segurança do próprio compilador muitas vezes pode ser negligenciada. No entanto, as vulnerabilidades do compilador podem, em certas circunstâncias, representar sérios riscos de segurança.
O principal objetivo do compilador Solidity é converter o código dos contratos inteligentes em instruções da 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 inteligentes, sem comprometer diretamente a segurança da rede Ethereum.
Vulnerabilidades do compilador podem fazer com que o código EVM gerado não corresponda às expectativas do desenvolvedor. Como os contratos inteligentes geralmente envolvem ativos de criptomoeda, qualquer bug causado pelo compilador pode resultar em perdas de ativos para os usuários. É difícil detectar esses problemas apenas com a auditoria do código-fonte do contrato, sendo necessário analisar em conjunto a versão específica do compilador e os padrões de código.
Casos de vulnerabilidade do compilador Solidity
SOL-2016-9 HighOrderByteCleanStorage
A vulnerabilidade existe nas versões anteriores do compilador Solidity (>=0.1.6 <0.4.4). Em certas circunstâncias, variáveis de armazenamento podem ser modificadas acidentalmente, resultando em valores de retorno de função que não correspondem ao esperado. Essa inconsistência pode ter consequências graves em casos que envolvem verificação de permissões ou contabilidade de ativos.
A razão pela qual a vulnerabilidade ocorreu é que o compilador, ao lidar com tipos de dados inferiores a 32 bytes, não limpou corretamente os dados de ordem superior, levando à escrita incorreta de dados de ordem superior na variável adjacente durante o estouro de inteiro.
SOL-2022-4 InlineAssemblyMemorySideEffects
A vulnerabilidade afeta compiladores com versões >=0.8.13 <0.8.15. O problema decorre do tratamento incorreto de operações de memória durante o processo de otimização do compilador. Em certos casos, o compilador remove erroneamente instruções de escrita em memória que parecem redundantes, resultando em valores de retorno de função anômalos.
A vulnerabilidade existe em compiladores das versões >= 0.5.8 < 0.8.16. Ao realizar operações abi.encode em arrays do tipo calldata, o compilador limpa incorretamente alguns dados, resultando na modificação de dados adjacentes, o que causa inconsistências nos dados após a codificação e decodificação.
É importante notar que a chamada externa e a emissão de eventos realizam implicitamente abi.encode, portanto, o alcance do impacto dessa vulnerabilidade pode ser mais amplo do que o esperado.
Sugestões de Segurança
Em relação às vulnerabilidades do compilador Solidity, a equipe de segurança da blockchain Cobo propõe as seguintes recomendações:
Para desenvolvedores:
Utilize uma versão mais recente do compilador Solidity
Melhorar os casos de teste unitários, aumentando a cobertura de código
Evite usar assembly inline, operações complexas de codificação e decodificação de ABI, e use novas funcionalidades e recursos experimentais com cautela.
Para o pessoal de segurança:
Atenção aos riscos de segurança que o compilador pode introduzir durante a auditoria.
Impulsionar a atualização da versão do compilador no processo de desenvolvimento, considerando a introdução de verificação automática de versões no CI/CD.
Avaliar o impacto de segurança real das vulnerabilidades do compilador com base em projetos específicos
Recursos práticos:
Blog oficial de alertas de segurança do Solidity
Lista de bugs no repositório GitHub do Solidity
Lista de bugs do compilador em várias versões
Aviso de vulnerabilidade do compilador na página de código do contrato Etherscan
Em suma, desenvolvedores e profissionais de segurança devem estar atentos aos riscos que as vulnerabilidades do compilador Solidity podem trazer, tomando as medidas apropriadas para reduzir as ameaças à segurança. Ao mesmo tempo, é importante avaliar objetivamente o impacto específico, evitando pânicos excessivos.
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.
13 gostos
Recompensa
13
4
Partilhar
Comentar
0/400
AirdropChaser
· 08-02 03:03
Outra razão para fazer as pessoas de parvas apareceu.
Ver originalResponder0
BearMarketBuilder
· 08-02 02:55
Ai, o dia todo a desenvolver, só tenho medo desta coisa.
Ver originalResponder0
TeaTimeTrader
· 08-02 02:53
A literatura de culpar o compilador está a correr bem?
Ver originalResponder0
0xOverleveraged
· 08-02 02:42
Os compiladores de contratos são todos pouco confiáveis, para que jogar com contratos?
Análise de vulnerabilidades do compilador Solidity: riscos potenciais que os desenvolvedores não devem ignorar
Análise de vulnerabilidades do compilador Solidity e estratégias de mitigação
O compilador é uma parte importante dos sistemas de computação modernos, cuja função é converter o código-fonte de linguagens de programação de alto nível em código de instrução executável pelo computador. Em comparação com o código de aplicativos, a segurança do próprio compilador muitas vezes pode ser negligenciada. No entanto, as vulnerabilidades do compilador podem, em certas circunstâncias, representar sérios riscos de segurança.
O principal objetivo do compilador Solidity é converter o código dos contratos inteligentes em instruções da 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 inteligentes, sem comprometer diretamente a segurança da rede Ethereum.
Vulnerabilidades do compilador podem fazer com que o código EVM gerado não corresponda às expectativas do desenvolvedor. Como os contratos inteligentes geralmente envolvem ativos de criptomoeda, qualquer bug causado pelo compilador pode resultar em perdas de ativos para os usuários. É difícil detectar esses problemas apenas com a auditoria do código-fonte do contrato, sendo necessário analisar em conjunto a versão específica do compilador e os padrões de código.
Casos de vulnerabilidade do compilador Solidity
SOL-2016-9 HighOrderByteCleanStorage
A vulnerabilidade existe nas versões anteriores do compilador Solidity (>=0.1.6 <0.4.4). Em certas circunstâncias, variáveis de armazenamento podem ser modificadas acidentalmente, resultando em valores de retorno de função que não correspondem ao esperado. Essa inconsistência pode ter consequências graves em casos que envolvem verificação de permissões ou contabilidade de ativos.
A razão pela qual a vulnerabilidade ocorreu é que o compilador, ao lidar com tipos de dados inferiores a 32 bytes, não limpou corretamente os dados de ordem superior, levando à escrita incorreta de dados de ordem superior na variável adjacente durante o estouro de inteiro.
SOL-2022-4 InlineAssemblyMemorySideEffects
A vulnerabilidade afeta compiladores com versões >=0.8.13 <0.8.15. O problema decorre do tratamento incorreto de operações de memória durante o processo de otimização do compilador. Em certos casos, o compilador remove erroneamente instruções de escrita em memória que parecem redundantes, resultando em valores de retorno de função anômalos.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup
A vulnerabilidade existe em compiladores das versões >= 0.5.8 < 0.8.16. Ao realizar operações abi.encode em arrays do tipo calldata, o compilador limpa incorretamente alguns dados, resultando na modificação de dados adjacentes, o que causa inconsistências nos dados após a codificação e decodificação.
É importante notar que a chamada externa e a emissão de eventos realizam implicitamente abi.encode, portanto, o alcance do impacto dessa vulnerabilidade pode ser mais amplo do que o esperado.
Sugestões de Segurança
Em relação às vulnerabilidades do compilador Solidity, a equipe de segurança da blockchain Cobo propõe as seguintes recomendações:
Para desenvolvedores:
Para o pessoal de segurança:
Recursos práticos:
Em suma, desenvolvedores e profissionais de segurança devem estar atentos aos riscos que as vulnerabilidades do compilador Solidity podem trazer, tomando as medidas apropriadas para reduzir as ameaças à segurança. Ao mesmo tempo, é importante avaliar objetivamente o impacto específico, evitando pânicos excessivos.