Análise de vulnerabilidades do compilador Solidity: riscos de segurança e formas de mitigação

robot
Geração do resumo em andamento

Análise de vulnerabilidades do compilador Solidity e estratégias de resposta

O compilador é um dos componentes fundamentais dos sistemas de computação modernos, e a sua principal função é converter o código-fonte em linguagem de programação de alto nível em código de instruções executáveis pelo computador.

Embora a maioria dos desenvolvedores e profissionais de segurança esteja mais preocupada com a segurança do código do aplicativo, a segurança do próprio compilador não deve ser ignorada. Como programas de computador, os compiladores também podem ter vulnerabilidades de segurança, que em certos casos podem causar riscos de segurança graves. Por exemplo, ao compilar e executar código JavaScript no frontend, os navegadores podem, devido a vulnerabilidades do mecanismo de análise do JavaScript, permitir que usuários sejam alvos de ataques de execução remota de código ao acessar páginas da web maliciosas, resultando em um controle do navegador ou até mesmo do sistema operacional da vítima por parte do atacante.

O compilador Solidity não é exceção, existem vulnerabilidades de segurança em várias versões do compilador Solidity. O papel do compilador Solidity é converter o código de contrato inteligente em código de instrução da Máquina Virtual Ethereum (EVM), que será executado na EVM.

É importante notar que há uma diferença entre as vulnerabilidades do compilador Solidity e as vulnerabilidades da própria EVM. As vulnerabilidades da EVM referem-se a problemas de segurança que ocorrem durante a execução de instruções pela máquina virtual, que podem afetar toda a rede Ethereum. Por outro lado, as vulnerabilidades do compilador Solidity são problemas que surgem ao converter o código Solidity em código EVM, não afetando diretamente a rede Ethereum, mas podendo resultar em um código EVM gerado que não corresponde às expectativas do desenvolvedor.

Análise de vulnerabilidades do compilador Solidity e medidas de resposta

Uma das consequências de uma vulnerabilidade no compilador Solidity é que pode levar a um código EVM gerado que não está em conformidade com as expectativas dos desenvolvedores de contratos inteligentes. Como os contratos inteligentes na Ethereum geralmente envolvem os ativos de criptomoeda dos usuários, qualquer bug causado pelo compilador pode resultar em perdas de ativos dos usuários, com consequências graves.

Os desenvolvedores e auditores de contratos muitas vezes estão mais focados na implementação lógica do código do contrato e em questões de segurança ao nível do Solidity, ignorando as vulnerabilidades do compilador. É difícil detectar vulnerabilidades do compilador apenas auditando o código-fonte do contrato; é necessário analisar em conjunto a versão específica do compilador e os padrões de código específicos.

Aqui estão alguns exemplos reais de vulnerabilidades do compilador Solidity:

  1. SOL-2016-9 HighOrderByteCleanStorage

A vulnerabilidade existe em versões antigas do compilador Solidity (>=0.1.6 <0.4.4). Em certas situações, o compilador não limpa corretamente os bytes mais significativos, levando a uma sobrecarga de inteiros onde o bit 1 mais significativo é gravado no armazenamento, sobrescrevendo os valores das variáveis adjacentes. Esse comportamento inconsistente com o esperado pode ter consequências graves em casos que envolvem verificação de permissões ou contabilidade de ativos.

  1. SOL-2022-4 Efeitos Colaterais de Memória em InlineAssembly

A vulnerabilidade existe nas versões 0.8.13 a 0.8.15 do compilador. Devido a problemas na estratégia de otimização do compilador, em certas situações, pode remover incorretamente instruções de escrita na memória, levando a que o valor de retorno da função não corresponda ao esperado. Este bug relacionado à otimização é difícil de ser detectado através de uma simples revisão de código.

  1. SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

A vulnerabilidade afeta os compiladores da versão 0.5.8 até 0.8.16. Ao realizar a operação abi.encode em arrays 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. Este problema também pode ocorrer durante chamadas externas e eventos de emissão, uma vez que essas operações executam implicitamente abi.encode.

Análise de vulnerabilidades do compilador Solidity e medidas de resposta

Com base na análise das vulnerabilidades do compilador Solidity, são apresentadas as seguintes recomendações de segurança:

Para os desenvolvedores:

  • Usar uma versão mais recente do compilador Solidity, problemas de segurança conhecidos geralmente são menos frequentes.
  • Melhorar os casos de teste unitário, aumentar a cobertura do código, ajuda a descobrir problemas causados pelo compilador.
  • Evite usar assembly inline, operações complexas de codificação e decodificação abi, e use novos recursos e funcionalidades experimentais com cautela.

Para o pessoal de segurança:

  • Considere os riscos de segurança que o compilador pode introduzir durante a auditoria.
  • No processo SDL, urge-se a atualização da versão do compilador, considerando a introdução de uma verificação automática de versão no CI/CD.
  • Avaliar o impacto real das vulnerabilidades do compilador com base nas circunstâncias específicas do projeto, evitando preocupações excessivas.

Alguns recursos úteis:

  • Aviso de segurança publicado oficialmente pela Solidity
  • Lista de bugs atualizada regularmente no repositório Solidity
  • Lista de bugs do compilador de várias versões, pode ser utilizada para verificação automática
  • Aviso de vulnerabilidade do compilador na página de código do contrato do Etherscan

Em suma, embora as vulnerabilidades do compilador Solidity não sejam comuns, podem ter consequências graves. Os desenvolvedores e profissionais de segurança devem manter-se alerta e tomar as medidas adequadas para reduzir os riscos.

Análise de vulnerabilidades do compilador Solidity e medidas de resposta

ETH-2.92%
SOL3.29%
Ver original
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.
  • Recompensa
  • 5
  • Compartilhar
Comentário
0/400
AltcoinAnalystvip
· 07-21 10:23
Tenha cuidado, é um velho problema da versão 0.8.x.
Ver originalResponder0
MemecoinResearchervip
· 07-21 10:12
rekt à espera de acontecer fr baseado na minha análise (p<0.01)
Ver originalResponder0
just_another_walletvip
· 07-21 10:12
Jovens desenvolvedores, dêem uma olhada rapidamente!
Ver originalResponder0
FarmHoppervip
· 07-21 10:11
Caramba, essa falha parece assustadora!
Ver originalResponder0
YieldWhisperervip
· 07-21 10:10
vi este mesmo padrão de exploração do compilador desde 2021... os desenvolvedores nunca aprendem smh
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)