Pular para o conteúdo

O Que Aconteceu

Em 28 de janeiro de 2022, a Qubit Finance foi explorada em aproximadamente $80 milhões de dólares em criptoativos. Continua sendo um dos maiores hacks de DeFi da história. Nenhum fundo jamais foi devolvido.


A Qubit Finance era um protocolo de empréstimo DeFi na Binance Smart Chain, construído pela empresa sul-coreana Mound Inc. — a mesma equipe por trás da PancakeBunny, que já havia sido explorada em ~$45M em maio de 2021. A Qubit foi sua segunda tentativa.

O protocolo incluía o QBridge — uma ponte cross-chain que permitia aos usuários depositar ETH no Ethereum e receber tokens qXETH equivalentes na BSC, que podiam ser usados como garantia para tomar empréstimos de outros ativos.

A Qubit Finance foi explicitamente endossada pela Binance e operava na Binance Smart Chain.


O QBridge tinha duas formas de depositar ETH:

  • depositETH() — Função correta. Exigia ETH real (msg.value > 0). Emitia um evento Deposit.
  • deposit() — Projetada para tokens ERC-20. Chamava safeTransferFrom() em um contrato de token. Também emitia um evento Deposit — o exato mesmo tipo de evento.

O relayer off-chain que processava os eventos da ponte não tinha como distinguir entre os dois.

Para ETH, como o ETH nativo não possui endereço de contrato ERC-20, o QBridge usava o endereço zero (0x0000000000000000000000000000000000000000) como placeholder. O endereço zero foi adicionado à whitelist do contrato.

Etapa 3 — Chamar um EOA é silenciosamente bem-sucedido

Seção intitulada “Etapa 3 — Chamar um EOA é silenciosamente bem-sucedido”

Quando deposit() era chamada com o resourceID do ETH, o contrato resolvia o endereço do token para o endereço zero e chamava safeTransferFrom() nele.

No EVM, chamar qualquer função em um endereço sem código de contrato (um EOA) é silenciosamente bem-sucedido — sem revert, sem erro, sem transferência real. O endereço zero é um EOA. Então safeTransferFrom() “teve sucesso”, nada foi movido, e o contrato emitiu um evento Deposit idêntico a um depósito legítimo de ETH.

Esse comportamento do EVM havia sido documentado em uma atualização de segurança do 0x Protocol em 2019. A equipe da Qubit não sabia disso, ou ignorou.

O relayer viu o evento Deposit, não tinha como saber que era falso, e cunhou tokens qXETH na BSC para o atacante — sem lastro algum.

O atacante repetiu esse processo diversas vezes, acumulando uma quantidade massiva de qXETH falsos.

Usando qXETH cunhados de forma fraudulenta como garantia, o atacante tomou emprestado aproximadamente $80 milhões em ativos reais dos pools de empréstimo da Qubit Finance na BSC: WETH, BTCB, BNB, MATIC, CAKE, BUSD e outros.

O contrato de empréstimo verificava corretamente o valor da garantia — mas a fraude já havia ocorrido no nível da ponte.


Investigadores encontraram algo que nunca foi explicado.

Originalmente, a função deposit() com seu resourceID era usada para fazer bridge de WETH — um token ERC-20 real com um endereço de contrato real. Isso funcionava corretamente.

Em algum momento antes do hack, uma função exclusiva do proprietário (onlyOwner) foi chamada para reatribuir o mapeamento do resourceID — trocando o endereço de contrato do WETH pelo endereço zero. Essa foi a mudança que tornou o exploit possível.

Fatos importantes:

  • Apenas o proprietário do contrato poderia fazer essa mudança
  • Não havia timelock — a mudança entrou em vigor imediatamente
  • Não houve anúncio público
  • Nenhuma explicação jamais foi dada

O que a Mound Inc. fez depois:

  • Ofereceu ao hacker $250.000 para devolver $80M (sem resposta)
  • Alegou ter registrado boletins de ocorrência — nunca forneceu números de caso
  • Removeu vítimas do Telegram através do moderador @moleh
  • O CTO deletou seu LinkedIn em 1º de fevereiro de 2022, quatro dias após o hack
  • Não contatou a segurança da Binance nem grandes exchanges para colocar a carteira do hacker em lista negra
  • Não respondeu a membros da comunidade que se apresentaram com informações sobre o hacker

Para um registro completo, veja Resposta da Equipe e Nove Perguntas Sem Resposta.


0xd01ae1a708614948b2b5e0b7ab5be6afa01325c7

AtivoValor Aprox. em USD
WETH~$26,6M
BTCB~$15,3M
BNB~$9,5M
MATIC~$5,6M
CAKE~$8M
BUSD + outros~$15M
Total~$80M