Segurança · Resposta a Incidentes · Web3
Hack da Binance: US$ 6,36 bi perdidos por permissão
A Binance diz que nenhuma chave privada vazou. Essa é a confissão: 50 assinaturas EIP-7702 fizeram a carteira quente rodar o código do atacante.

A Binance pausou os saques na noite de quarta, disse aos clientes que os fundos estavam completamente seguros, e o número foi subindo — três bilhões, cinco, e por fim cerca de US$ 6,36 bilhões, o maior roubo de cripto já registrado. Aí veio a frase que devia acalmar todo mundo: "até agora, não encontramos nenhuma evidência de vazamento de chave privada de carteira".
Isso é a confissão, não o consolo. Não precisou vazar chave nenhuma. A carteira quente que sangrou por quase quatro horas é a mesma que depois assinou a própria limpeza, com a mesma chave que a Binance teve na mão o tempo inteiro. O que o atacante levou não foi segredo. Foi permissão — cinquenta assinaturas entregando o código da própria carteira a um contrato que ele controlava.
Se você vive de entregar software, a parte caríssima dessa história não são os seis bilhões. São duas coisas embaixo dela, e as duas são decisão sua neste trimestre.
Os US$ 2,4 bilhões sem ninguém para quem ligar
Parte do dinheiro voltou. Cerca de US$ 2,7 bilhões, na contagem da TRM Labs, e voltou por um motivo só: empresas privadas apertaram botões de congelamento em ativos que todo mundo chama de descentralizados. Uma parte disso a gente viu na própria blockchain. O contrato do USDT da Tether emitiu oito eventos AddedBlackList entre 21:01:35 e 21:18:59 UTC — o primeiro 37 minutos depois do saque principal — e os oito endereços ainda retornam true em isBlackListed(). Circle, Ripple e World Liberty Financial agiram nos tokens delas, segundo o rastreamento da TRM.

A carteira de destino, 14 horas depois do saque: US$ 2,11 bilhões em 33 tokens, a um salto da Binance. O dinheiro ainda está lá porque os emissores congelaram, não porque o registro impediu alguém.
Os cerca de US$ 2,4 bilhões que a TRM coloca em ETH e BTC não têm esse botão. Ninguém emite ether. Ninguém bloqueia um endereço de bitcoin. Essa parte se foi no sentido literal da palavra.
Agora tire a cripto da frase, porque é aqui que isso vira problema de uma integração de pagamento, de uma API de logística ou de um fornecedor de IA. Algumas das suas dependências conseguem reverter um prejuízo para você e outras não, e a diferença não tem relação nenhuma com o quanto você confia nelas. Uma adquirente estorna uma cobrança fraudulenta. Um emissor de stablecoin congela um saldo. Uma chain L1, um bucket de objetos ou uma API de inferência não desfazem nada. Saber qual das suas está em cada lado dessa linha é item de due diligence, e quase ninguém escreve isso antes do dia em que importa.
O que verificamos e o que é a Binance falando da Binance
Não são afirmações da mesma força, e um texto que mistura as duas é pior do que texto nenhum.
Lemos o seguinte direto da chain Ethereum, em 30 de outubro de 2026, num nó de arquivo público: a transação de delegação e suas cinquenta autorizações, os cinquenta nonces consecutivos, o código da carteira quente depois do fato, o saque principal de 1.615.409.498,97 USDT, outros 3.917.639,77 USDT que saíram três minutos depois de a Tether congelar o destino, os oito eventos de bloqueio da Tether e a transação de revogação com seu horário. Três saldos da TRM batem com balanceOf no centavo.
Aceito sob palavra, porque é parte interessada falando do próprio trabalho ou do próprio balanço: o total de US$ 6,36 bilhões e os US$ 2,7 bilhões recuperados — rastreamento da TRM em dez blockchains, do qual conferimos só a perna do USDT no Ethereum. A atribuição ao TraderTraitor, unidade estatal norte-coreana: TRM com "alta confiança", Chainalysis com "provável", sem confirmação de governo, e as duas são fornecedoras comerciais interessadas em atribuir primeiro. O notebook comprometido do engenheiro de DevOps e o contêiner de serviço, que é a versão do co-CEO Richard Teng, sem post-mortem atrás dela. "Os fundos dos usuários estão completamente seguros" e a promessa do fundo SAFU: Binance falando da solvência da Binance. E o "só 1 das 50 acertou", que o Etherscan atribui à Blockaid — confirmamos que cinquenta autorizações entraram e uma delegação saiu, não quais eram válidas.
O mecanismo abaixo é a metade verificada. Os números em dólar são a metade reportada.
Nenhuma chave privada foi roubada. Cinquenta assinaturas foram.
Às 20:20:59 UTC de 29 de outubro, uma transação entrou no bloco 26300753. Tipo 4: uma transação EIP-7702, o formato que o Ethereum permite desde a Pectra. A authorizationList dela tinha exatamente cinquenta entradas, todas apontando para o mesmo contrato, 0x63e842b0…9c6fae, em cinquenta nonces consecutivos, de 18.914.775 a 18.914.824.

Uma transação, cinquenta autorizações, um destino. O dinheiro saiu três minutos e vinte e quatro segundos depois.
Uma autorização EIP-7702 vale para um nonce só, e numa carteira quente que processa um fluxo constante de saques o nonce avança enquanto você ainda está enviando. Cinquenta nonces consecutivos não são cinquenta tentativas: é uma janela larga o bastante para garantir que uma estaria válida na chegada. Malandragem de condição de corrida, não criptografia.
O que entrou mudou a carteira. eth_getCode na Binance 14 passou a retornar 0xef010063e842b054bd624a465454d533c33f573e9c6fae: o indicador de delegação que a própria EIP-7702 define, 0xef0100 seguido de um endereço. Enquanto aquilo valeu, chamar a carteira quente da Binance executava o código do atacante.
Isso não é transferência. Transferência é algo que aconteceu. Isso é uma procuração que continua valendo até alguém revogar explicitamente — e é por isso que o sweeper seguiu drenando depósitos conforme eles chegavam, inclusive 3,9 milhões de USDT para uma carteira que a Tether já havia bloqueado três minutos antes. O saque que tirou 1,6 bilhão de USDT era uma transação tipo 2 sem graça, de um endereço operacional. Funcionou por causa do que a carteira tinha se tornado.
E nada disso era desconhecido.

As Security Considerations da própria especificação: trocar uma delegação é "uma operação crítica de segurança que não deve ser feita sem cuidado". Estava escrito muito antes de a carteira ser esvaziada.
Três horas e quarenta e seis minutos
A Binance removeu a delegação às 00:10:35 UTC de 30 de outubro, no bloco 26301896, com uma transação tipo 4 enviada pela própria carteira quente, carregando uma única autorização apontando para o endereço nulo.

A correção, enviada pela carteira para ela mesma. A Binance tinha a chave o tempo todo. Levou três horas e quarenta e nove minutos para usar.
A carteira assinou a própria revogação: a Binance tinha a chave do começo ao fim. A declaração do Teng é verdadeira, e é aí que está o problema. A delegação ficou de pé 3h49m36s, sendo 3h46m12s depois que o dinheiro começou a sair. Nenhum veículo que revisamos publicou esse número.
Nada na stack tratou "nosso próprio signatário acabou de dar autoridade permanente a um código novo" como evento que justifica acordar alguém. Alerta de saldo dispara quando o saldo mexe, o que é depois da perda, por definição. O alarme de verdade era a mudança de autorização — e ela ficou pública na blockchain por três minutos e vinte e quatro segundos antes do primeiro dólar sair.
A sua versão disso não tem blockchain nenhuma. Uma chave de API atrás de um serviço interno, um runner de CI com token de deploy, um app OAuth que alguém instalou em 2023, um consentimento de Open Finance que ninguém revisou, um agente de IA com uma ferramenta liberada. É o mesmo formato que a gente encontra levando software feito com IA para produção, e escrevemos a metade de credenciais disso em agentes de IA e credenciais expostas. Time protege o segredo e observa o saldo. Ninguém observa o escopo.
O que decidir nesta semana
- Troque a pergunta da sua revisão de segurança. Não "esse segredo pode vazar?", e sim "o que o serviço que guarda esse segredo pode ser induzido a assinar, e quem é paginado quando ele assina algo novo?". A primeira pergunta tem resposta documentável. A segunda tem dono, ou não tem.
- Alarme em mudança de privilégio, não só em volume. Um novo binding de IAM, um novo consentimento OAuth, um destino de webhook novo, uma delegação nova — são eventos raros, então alertar sai barato e o plantão é real. Detecção de anomalia de volume teria pegado isso três minutos e vinte e quatro segundos tarde demais. Fizemos o mesmo argumento pelo outro lado em roubo de carga e tomada de conta.
- Escreva quais dependências conseguem reverter um prejuízo. Uma coluna, dois valores. Nas revisões de prontidão para produção que conduzimos, a coluna "consegue reverter" é sempre mais curta do que o time imaginava.
Pontos principais
- O "nenhuma evidência de vazamento de chave privada" da Binance é compatível com a blockchain e não é tranquilizador: o roubo precisou de autorização, não de chave, e a carteira assinou a própria revogação 3h49m depois.
- Uma transação EIP-7702 tipo 4 levou 50 autorizações em 50 nonces consecutivos (18.914.775–18.914.824), todas para um sweeper, fazendo o código da carteira quente virar
0xef0100mais o endereço do atacante. - Delegação é procuração permanente, não transferência: o sweeper seguiu drenando depósitos novos por horas, inclusive 3,9 milhões de USDT enviados três minutos depois de a Tether bloquear o destino.
- A falha foi de detecção. A delegação ficou 3h46m de pé após o primeiro saque, enquanto o monitoramento olhava saldo em vez de mudança de autorização.
- Cerca de US$ 2,7 bilhões voltaram porque Tether, Circle, Ripple e World Liberty Financial decidiram congelar (números da TRM); os cerca de US$ 2,4 bilhões em ETH e BTC não tinham ninguém para quem ligar.