Back to Blog

#2 Incidente Bybit: Uma Brecha Web2 Possibilita o Maior Hack de Cripto da História

Code Auditing
February 9, 2026
6 min read

Em 21 de fevereiro de 2025, a Bybit perdeu aproximadamente US$ 1,5 bilhão após um invasor comprometer a máquina de um desenvolvedor do Safe{Wallet} por meio de engenharia social. O invasor injetou JavaScript malicioso no bucket AWS S3 do Safe{Wallet}, visando especificamente as transações da Bybit. O código injetado alterou o conteúdo das transações durante o processo de assinatura: a interface do Safe{Wallet} exibia uma transação legítima, enquanto o payload real enviado aos dispositivos Ledger dos signatários atualizava o contrato Safe da Bybit para uma implementação maliciosa, dando ao invasor controle total. Uma vez assinado e executado, o invasor drenou todos os ativos do contrato. Uma análise técnica detalhada está disponível em nosso relatório anterior [1].

Contexto

O Safe{Wallet} (também conhecido como GnosisSafe) é uma infraestrutura de carteira multisig que utiliza um modelo n-de-m: executar uma transação requer pelo menos n assinaturas de m signatários no total.

Cada carteira Safe é implantada como um contrato proxy. Duas variáveis de armazenamento são centrais para este incidente:

  • masterCopy (slot 0): o endereço do contrato de implementação. Este contrato contém toda a lógica de execução, incluindo verificação de assinaturas e mecanismos de atualização. O proxy delega todas as chamadas ao masterCopy via delegatecall.
  • threshold (slot 4): o número mínimo de assinaturas (n) necessárias. Para o Safe da Bybit, esse valor era 3.

Como o proxy utiliza delegatecall, qualquer função chamada no masterCopy é executada no contexto de armazenamento do proxy. Isso significa que um alvo de delegatecall pode sobrescrever diretamente o masterCopy no slot 0, substituindo toda a implementação em uma única transação.

Análise de Vulnerabilidade

O caminho do ataque atravessou três camadas do sistema, cada uma apresentando uma condição estrutural que o invasor explorou:

Modelo de entrega do frontend. O JavaScript do frontend do Safe{Wallet} era servido a partir de um bucket AWS S3. Nessa arquitetura, qualquer pessoa com acesso de escrita ao bucket pode modificar o código que constrói as transações para os signatários. Mecanismos de verificação de integridade, como hashes de integridade de sub-recursos (SRI) ou assinatura de código, podem mitigar esse risco, mas ainda não são práticas padrão para a maioria dos frontends de dApps. O invasor obteve acesso de escrita por meio da máquina do desenvolvedor comprometida e modificou silenciosamente o JavaScript servido.

Lacuna entre a exibição na interface e o payload de assinatura. O JavaScript injetado exibia uma transação de aparência legítima na interface do Safe{Wallet}, enquanto enviava um payload diferente para as carteiras hardware Ledger. Os detalhes da transação exibidos na tela do Ledger seriam diferentes dos mostrados na interface, mas interpretar dados brutos de transação na tela de uma carteira hardware não é simples, especialmente para operações multisig complexas. Essa lacuna permitiu que o invasor coletasse três assinaturas válidas para o payload malicioso.

Modelo de atualização de proxy. Conforme descrito no Contexto, o delegatecall executa o código do alvo no contexto de armazenamento do proxy. A arquitetura do proxy Safe roteia todas as chamadas por meio de um único ponteiro masterCopy no slot 0. Sobrescrever esse ponteiro redireciona o proxy para uma implementação completamente diferente, incluindo sua lógica de verificação de assinaturas, em uma única transação. O modelo n-de-m governa quem pode iniciar uma transação, mas uma vez que a transação é aprovada e executada, ela pode alterar a própria implementação. Se a nova implementação remover a verificação de assinaturas, a proteção multisig deixa de existir efetivamente para todas as transações subsequentes.

Análise do Ataque

O ataque ocorreu em três etapas: Injeção de Código Malicioso, Substituição da Implementação e Roubo de Ativos.

Etapa 1: Injeção de Código Malicioso

O invasor comprometeu a máquina de um desenvolvedor do Safe{Wallet} e injetou JavaScript malicioso no bucket AWS S3 que servia o frontend. O código injetado visava especificamente as transações do endereço Safe da Bybit. De acordo com o CEO da Bybit, Ben Zhou [2], a interface do Safe{Wallet} exibia uma transação legítima, enquanto um payload diferente era enviado aos dispositivos Ledger dos signatários. Os signatários aprovaram a transação conforme apresentada na interface, fornecendo ao invasor três assinaturas válidas para o payload malicioso.

Etapa 2: Substituição da Implementação

O invasor submeteu a transação maliciosa com as três assinaturas coletadas. O proxy Safe delegou a chamada ao masterCopy, cuja função execTransaction() validou as assinaturas e então executou o payload da transação: um delegatecall para o contrato do invasor (0x962214...5c7242). Como esse delegatecall é executado no contexto de armazenamento do proxy, a função transfer() do invasor sobrescreveu o valor do masterCopy no slot 0 com um endereço de implementação maliciosa (0xbDd077...9516). A partir desse ponto, todas as chamadas ao contrato Safe foram delegadas ao código do invasor.

Etapa 3: Roubo de Ativos

Com o masterCopy apontando agora para a implementação do invasor, o requisito de multisig deixou de se aplicar. O invasor chamou SweepERC20() e SweepETH() diretamente no contrato Safe. Essas funções, definidas no contrato de implementação do invasor, transferiram todos os ativos mantidos sem qualquer verificação de assinatura. Cinco transações de drenagem foram executadas, totalizando aproximadamente US$ 1,5 bilhão em perdas.

Contratos e Transações Relacionados

Tipo Descrição Endereço / Hash
Contrato Contrato Safe da Bybit 0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4
Contrato O contrato masterCopy original 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
Contrato O contrato masterCopy malicioso 0xbDd077f651EBe7f7b3cE16fe5F2b025BE2969516
Contrato O contrato do invasor (isto é, transfer()) 0x96221423681A6d52E184D440a8eFCEbB105C7242
Transação Tx que substituiu o contrato masterCopy 0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882
Transação Tx que drenou 15.000 cmETH 0x847b8403e8a4816a4de1e63db321705cdb6f998fb01ab58f653b863fda988647
Transação Tx que drenou 90.375 stETH 0xa284a1bc4c7e0379c924c73fcea1067068635507254b03ebbbd3f4e222c1fae0
Transação Tx que drenou 8.000 mETH 0xbcf316f5835362b7f1586215173cc8b294f5499c60c029a3de6318bf25ca7b20
Transação Tx que drenou 401.346 ETH 0xb61413c495fdad6114a7aa863a00b2e3c28945979a10885b12b30316ea9f072c
Transação Tx que drenou 90 USDT 0x25800d105db4f21908d646a7a3db849343737c5fba0bc5701f782bf0e75217c9

Resumo

Este incidente demonstrou como o comprometimento de uma infraestrutura fora da cadeia pode se transformar em perdas catastróficas na cadeia. O invasor encadeou uma violação Web2, uma manipulação de frontend e uma atualização de proxy em um único caminho de ataque que contornou a proteção multisig sem explorar nenhuma vulnerabilidade na cadeia.

Principais lições:

  • A integridade do frontend merece a mesma atenção que a segurança na cadeia. A cadeia de ataque começou na camada de entrega do frontend. À medida que os dApps cada vez mais intermediam transações de alto valor, proteger o código do frontend com verificação de integridade (SRI, assinatura de código, builds reproduzíveis) e monitoramento de alterações não autorizadas torna-se um requisito básico.
  • A verificação em carteiras hardware continua difícil na prática. As carteiras hardware podem exibir o payload de assinatura real, mas interpretar dados complexos de transações multisig em uma tela pequena é um desafio de usabilidade conhecido. Melhorar a legibilidade dos resumos de transações exibidos no dispositivo é um problema em aberto para o ecossistema de carteiras.
  • Os mecanismos de atualização de proxy são alvos de alto impacto. A arquitetura do proxy Safe roteia toda a lógica por meio de um único ponteiro atualizável. Qualquer mecanismo que permita a substituição da implementação em uma única etapa concentra o risco. Adicionar um timelock, uma etapa de confirmação secundária ou um guardião independente para atualizações pode reduzir o impacto de uma única transação comprometida.

Referências

  1. BlockSec: Análise Aprofundada do Hack de US$ 1,5B da Bybit

  2. Transmissão no X do CEO da Bybit, Ben Zhou


Sobre a BlockSec

A BlockSec é uma provedora completa de segurança em blockchain e conformidade em criptoativos. Desenvolvemos produtos e serviços que ajudam nossos clientes a realizar auditorias de código (incluindo contratos inteligentes, blockchains e carteiras), interceptar ataques em tempo real, analisar incidentes, rastrear fundos ilícitos e cumprir obrigações de AML/CFT, ao longo de todo o ciclo de vida de protocolos e plataformas.

A BlockSec publicou diversos artigos de segurança em blockchain em conferências de prestígio, reportou vários ataques de dia zero em aplicações DeFi, bloqueou múltiplos ataques para resgatar mais de 20 milhões de dólares e protegeu bilhões em criptomoedas.

Best Security Auditor for Web3

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

BlockSec Audit