Back to Blog

Revisitando os Ataques de Wormhole

Code Auditing
22 de março de 2022
5 min read

1. Contexto

Wormhole, também conhecido como ponte Einstein-Rosen, é uma estrutura especulativa que conecta pontos distintos no espaço-tempo. No mundo do blockchain, o wormhole é utilizado como ponte entre diferentes redes (por exemplo, Solana e Ethereum). Os usuários podem transferir ativos tokenizados entre blockchains com o wormhole.

Em 2 de fevereiro de 2022, o Wormhole foi hackeado e o atacante conseguiu cunhar 120.000 Ether embrulhado no valor de 320 milhões de dólares, sendo esta a segunda maior perda da história do DeFi, atrás apenas da Poly Network.

2. Como o Wormhole funciona

O Wormhole funciona monitorando as mensagens emitidas em cada rede. A mensagem monitorada é encaminhada para a rede de destino, permitindo a construção de um protocolo de comunicação entre cadeias.

A questão intuitiva é como garantir que a mensagem monitorada seja confiável. Para resolver esse problema, o Wormhole introduz 19 nós extras, chamados de guardiões. O conjunto atual de guardiões pode ser verificado no Wormhole Explorer. Cada guardião pode verificar a mensagem monitorada de forma independente e assiná-la.

No Wormhole, a mensagem é organizada no formato VAA. O VAA consiste em duas partes. Uma é o cabeçalho, que coleta as assinaturas dos guardiões. A outra é o corpo, que contém as informações para a rede de destino, o payload da mensagem, etc.

Assim que as assinaturas dos guardiões atingem o limiar de consenso, o VAA pode ser publicado na cadeia.

Em resumo, os guardiões são responsáveis pela integridade da mensagem transferida.

3. Ponte de Tokens

Após entender como a mensagem é transferida entre diferentes redes, não será difícil compreender como a Ponte de Tokens, que é a principal aplicação do wormhole, funciona.

Para transferir tokens da cadeia A para a cadeia B, o Wormhole bloqueia os tokens na cadeia A e os cunha na cadeia B. Essa é a ideia geral. Na prática, isso pode ser dividido em três etapas. Primeiro, os tokens na cadeia A são bloqueados. Segundo, a mensagem de que os tokens na cadeia A devem ser transferidos para a cadeia B é transmitida. Terceiro, a cadeia B recebe a mensagem e os tokens correspondentes são cunhados. Tudo concluído.

4. Instruções da Solana

Na Solana, uma transação consiste em múltiplas instruções. Cada instrução contém um ID de programa, contas e dados. O ID do programa representa o programa (um contrato inteligente) que irá processar a instrução. O programa interpreta os dados e opera nas contas fornecidas.

5. O Ataque ao Wormhole

Em resumo, o atacante cunhou 120.000 ETH na Solana sem bloquear nenhum ativo no Ethereum. A transação está aqui.

Assim, a questão é como o atacante conseguiu cunhar os 120.000 ETH na Solana. Vamos detalhar os passos. Para cunhar o token, a instrução complete_wrapped é invocada. Essa instrução recebe vários endereços, e o terceiro é o endereço que armazena a mensagem assinada. Antes de cunhar os 120.000 ETH, a cadeia B (ou seja, Solana) deve receber a mensagem assinada (ou seja, VAA) indicando que 120.000 ETH foram bloqueados na cadeia A (ou seja, Ethereum).

Para publicar a mensagem, o post_vaa definido em post_vaa.rs é invocado. Consequentemente, uma conta é criada para armazenar a mensagem. No entanto, o post_vaa não verifica as assinaturas dos guardiões. Em vez disso, o verify_signatures definido em verify_signatures.rs verifica as assinaturas.

A quarta conta fornecida ao verify_signatures é a conta de instruções do sistema. Agora vamos explorar como o verify_signatures funciona.

Na linha 103, a função load_instruction_at é invocada para carregar a instrução executada anteriormente secp_ix. O secp_ix invocará a função de verificação de assinatura Secp256k1. Assim, o verify_signatures verifica as assinaturas checando a instrução executada anteriormente secp_ix. Você já entendeu tudo? A função load_instruction_at não verifica de onde carregar as instruções!!! Espera-se que as instruções sejam carregadas de Sysvar:Instructions.

No entanto, a quarta conta da transação de ataque é 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd e não Sysvar:Instructions. Nesse caso, o atacante conseguiu contornar com sucesso o processo de verificação de assinaturas. O wormhole acreditou que a verificação foi aprovada e a mensagem foi publicada na cadeia, resultando na cunhagem de 120 mil ETH sem bloquear nada!

Vamos analisar uma instrução de verificação legítima. Essa transação consiste em duas instruções. A primeira invoca a função de verificação Secp256k1, enquanto a segunda invoca a instrução verify_signatures. Note que a quarta conta aqui é Sysvar:Instructions.

Após cunhar os 120 mil ETH, o atacante pôde sacar de volta para o Ethereum e convertê-los em outros tokens para obter lucro.

6. Correção

Como mencionado no repositório, desde a versão 1.8.0, load_instruction_at não é segura e o endereço das contas Sysvar não é verificado. Em vez disso, recomenda-se o uso de load_instruction_at_checked.

7. Nossa Reflexão

  • Os desenvolvedores devem estar muito familiarizados com as funções externas que utilizam.
  • Mantenha-se atento a quaisquer mudanças importantes nas bibliotecas utilizadas. Se a biblioteca mudar, o código que a utiliza pode precisar ser alterado.
  • O mantenedor da biblioteca deve estar ciente dos riscos potenciais de determinadas mudanças e notificar toda a comunidade em tempo hábil. Simplesmente adicionar anotações pode não funcionar e não é suficiente.
  • O código do seu contrato precisa ser auditado caso as versões da biblioteca e do código sejam alteradas.

Sobre a BlockSec

A BlockSec é uma empresa pioneira em segurança de blockchain, fundada em 2021 por um grupo de especialistas em segurança de renome mundial. A empresa está comprometida em aprimorar a segurança e a usabilidade para o emergente mundo Web3, com o objetivo de facilitar sua adoção em massa. Para isso, a BlockSec oferece serviços de auditoria de segurança de contratos inteligentes e redes EVM, a plataforma Phalcon para desenvolvimento seguro e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaSuites para construtores web3 navegarem com eficiência no mundo cripto.

Até o momento, a empresa atendeu mais de 300 clientes ilustres, como MetaMask, Uniswap Foundation, Compound, Forta e PancakeSwap, e recebeu dezenas de milhões de dólares americanos em duas rodadas de financiamento de investidores de destaque, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.

Site oficial: https://blocksec.com/

Conta oficial no Twitter: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec
Security Insights

Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec

Este relatório semanal aborda dois incidentes de segurança na Ethereum e na BNB Chain no período de 19/10/2026–25/10/2026. Ele examina uma tomada de controle da governança do X100 Freezer financiada por um empréstimo-relâmpago e uma falha na liquidação de impostos que afetou um pool de liquidez de um token NEM na BNB Chain. As perdas estimadas no escopo do relatório totalizam aproximadamente 5,57 milhões USD: cerca de 4,75 milhões USD da transação representativa do X100 e cerca de 820 mil USD do incidente no pool do NEM. O total exclui as extrações subsequentes do X100 relatadas separadamente.

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec
Security Insights

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec

Este relatório semanal aborda 3 incidentes de segurança no período de 12/10/2026–18/10/2026, com perdas totais estimadas em aproximadamente 3,87 milhões USD. A Autheo Network sofreu um comprometimento de chave privada com perdas de cerca de 1,76 milhões USD, a Qubic Wallet perdeu cerca de 1,30 milhões USD devido à geração de seeds fracas, e os contratos Smart Token Vesting V2 da UNCX Network sofreram um erro contábil de cerca de 807 mil USD nas redes Ethereum, BNB Chain, Base e Robinhood Chain. A análise em destaque da UNCX explica como um cálculo incorreto do total de cotas misturou parcelas de vesting criadas com diferentes proporções entre tokens e cotas, permitindo saques acima do devido de pools compartilhados.

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec
Security Insights

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec

O relatório cobre 1 incidente no Ethereum (05–11/10/2026), com perda estimada de US$ 542 mil. Um adaptador malicioso obteve acesso aos saldos MakerDAO via função desprotegida do MakerDaoBot, liquidou 4 leilões ETH-A e converteu 200 ETH-A em WETH, depois enviados como ETH ao atacante.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit