Back to Blog

Quando "SafeTransfer" se Torna Inseguro: Lições do Incidente de Segurança do QBridge

Code Auditing
January 28, 2022
3 min read

Em 28 de janeiro, o QBridge foi atacado e os valores de ativos em torno de 80 milhões de dólares foram roubados. Após a análise, descobrimos que a causa raiz no código é a implementação da função safeTransfer (e safeTransferFrom).

A Causa Raiz

Primeiro, o projeto não utiliza a popular biblioteca OpenZeppelin SafeERC20 para a transferência de tokens. Em vez disso, eles implementaram uma biblioteca chamada SafeToken.

Segundo, a implementação não verifica se o alvo é um contrato válido (ou se é um endereço zero).

Terceiro, a chamada de baixo nível da EVM não retorna falso quando o contrato alvo é zero. Isso contradiz o senso comum do desenvolvedor.

É claro que o incidente também tem algumas outras razões, por exemplo, o endereço zero foi colocado na lista de permissões. No entanto, se o código puder lidar adequadamente com esse caso especial, então ele não será vulnerável.

BTW: Existem outros projetos que utilizam código semelhante. Eles podem ser suscetíveis a problemas similares.

Experimento

Para confirmar a terceira razão de que a VM não retorna falso quando o contrato alvo é zero, desenvolvemos um contrato de teste, conforme mostrado a seguir.

A execução de TestSafeTransfer.test() não irá reverter.

Lições e Como Mitigar o Risco

Sugerimos que

  • Use a biblioteca popular em vez de reinventar a roda, a menos que você tenha uma razão muito, muito boa,
  • verifique o saldo antes e depois da transferência de ativos para garantir que a quantidade do ativo transferido corresponda à expectativa. Isso também pode evitar o problema do token de deflação e inflação.

Sobre a BlockSec

A BlockSec é uma empresa pioneira em segurança de blockchain estabelecida em 2021 por um grupo de especialistas em segurança de renome mundial. A empresa está comprometida em melhorar a segurança e a usabilidade para o emergente mundo Web3, a fim de facilitar sua adoção em massa. Para esse fim, a BlockSec fornece serviços de auditoria de segurança para contratos inteligentes e chains EVM, a plataforma Phalcon para desenvolvimento de segurança e bloqueio proativo de ameaças, a plataforma MetaSleuth para rastreamento e investigação de fundos, e a extensão MetaDock para construtores web3 que navegam com eficiência no mundo cripto.

Até o momento, a empresa atendeu mais de 300 clientes estimados, 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 proeminentes, incluindo Matrix Partners, Vitalbridge Capital e Fenbushi Capital.

Site oficial: https://blocksec.com/

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

Best Security Auditor for Web3

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

BlockSec Audit