Ir al contenido
SV Dev
← Volver al blog

Seguridad · Respuesta a Incidentes · Web3

Hackeo a Binance: USD 6.360 M por un permiso, no una clave

Binance dice que no se filtró ninguna clave privada. Esa es la confesión: 50 firmas EIP-7702 hicieron que su hot wallet ejecutara el contrato del atacante.

Jeferson Guardezi
El registro en Etherscan de la transacción que tomó la hot wallet de Binance: cincuenta autorizaciones EIP-7702 en una transacción tipo 4, delegando la wallet al contrato sweeper del atacante.

Binance pausó los retiros el miércoles por la noche, les dijo a sus clientes que sus fondos estaban completamente seguros, y la cifra del agujero siguió subiendo: tres mil millones, luego cinco, y finalmente unos USD 6.360 millones, el mayor robo de cripto registrado. Después llegó la frase que debía calmar a todo el mundo: "hasta ahora no hemos encontrado evidencia de filtración de ninguna clave privada de wallet".

Esa es la confesión, no el consuelo. No hizo falta filtrar ninguna clave. La hot wallet que se desangró durante casi cuatro horas es la misma que después firmó su propia limpieza, con la misma clave que Binance tuvo en la mano todo el tiempo. Lo que el atacante se llevó no fue un secreto. Fue un permiso: cincuenta firmas que entregaron el código de la propia wallet a un contrato que él controlaba.

Si vives de entregar software, lo caro de esta historia no son los seis mil millones. Son dos cosas que están debajo, y las dos son decisiones tuyas de este trimestre.

Los USD 2.400 millones sin nadie a quien llamar

Parte del dinero volvió. Unos USD 2.700 millones, según el conteo de TRM Labs, y volvió por una sola razón: empresas privadas apretaron botones de congelamiento sobre activos que todo el mundo llama descentralizados. Una parte la vimos en la propia cadena. El contrato de USDT de Tether emitió ocho eventos AddedBlackList entre las 21:01:35 y las 21:18:59 UTC —el primero 37 minutos después del barrido principal— y las ocho direcciones todavía devuelven true en isBlackListed(). Circle, Ripple y World Liberty Financial actuaron sobre sus propios tokens, según el rastreo de TRM.

Ese detalle no es técnico en América Latina, es doméstico: para mucha gente de la región el USDT no es una apuesta, es la cuenta de ahorro. Que exista un botón de congelamiento salvó buena parte del dinero esta vez, y también significa que ese saldo nunca fue solo tuyo.

La wallet receptora del atacante en Etherscan: USD 2.114.108.982,43 en 33 tokens, marcada como Binance Hot Wallet Exploiter 2 y financiada por Binance 14.

La wallet receptora, 14 horas después del barrido: USD 2.110 millones en 33 tokens, a un salto de Binance. Sigue ahí porque los emisores congelaron, no porque el registro detuviera a nadie.

Los aproximadamente USD 2.400 millones que TRM ubica en ETH y BTC no tienen ese botón. Nadie emite ether. Nadie bloquea una dirección de bitcoin. Esa parte se fue en el sentido literal de la palabra.

Ahora saca la cripto de la frase, porque esto es lo que se traslada a una integración de pagos, a una API de logística o a un proveedor de IA. Algunas de tus dependencias pueden revertir una pérdida por ti y otras no, y la diferencia no tiene nada que ver con cuánto confías en ellas. Un adquirente revierte un cargo fraudulento. Un emisor de stablecoin congela un saldo. Una cadena L1, un bucket de objetos o una API de inferencia no deshacen nada. Saber de qué lado de esa línea está cada una es una línea de due diligence, y casi nadie la escribe antes del día en que importa.

Qué verificamos y qué es Binance hablando de Binance

No son afirmaciones de la misma fuerza, y un texto que las mezcla es peor que ningún texto.

Lo siguiente lo leímos de la cadena Ethereum el 30 de octubre de 2026, contra un nodo de archivo público: la transacción de delegación y sus cincuenta autorizaciones, los cincuenta nonces consecutivos, el código de la hot wallet después del hecho, el barrido principal de 1.615.409.498,97 USDT, otros 3.917.639,77 USDT que salieron tres minutos después de que Tether congelara el destino, los ocho bloqueos de Tether y la transacción de revocación con su hora. Tres saldos de TRM coinciden con balanceOf al centavo.

Tomado bajo palabra, porque es una parte interesada hablando de su propio trabajo o de sus propias cuentas: el total de USD 6.360 millones y los USD 2.700 millones recuperados, rastreo de TRM en diez cadenas del que solo verificamos la pata de USDT en Ethereum. La atribución a TraderTraitor, la unidad estatal norcoreana: TRM con "alta confianza", Chainalysis con "probable", sin confirmación gubernamental, y ambas son proveedoras comerciales interesadas en atribuir primero. El portátil comprometido del ingeniero de DevOps y el contenedor de servicio, que es la versión del co-CEO Richard Teng, sin post-mortem detrás. "Los fondos de los usuarios están completamente seguros" y la promesa del fondo SAFU: Binance sobre la solvencia de Binance. Y el "solo 1 de 50 acertó", que Etherscan atribuye a Blockaid — confirmamos que entraron cincuenta autorizaciones y salió una delegación, no cuáles eran válidas.

El mecanismo de abajo es la mitad verificada. Las cifras en dólares son la mitad reportada.

No robaron ninguna clave privada. Robaron cincuenta firmas.

A las 20:20:59 UTC del 29 de octubre, una transacción entró en el bloque 26300753. Tipo 4: una transacción EIP-7702, el formato que Ethereum permite desde Pectra. Su authorizationList tenía exactamente cincuenta entradas, todas apuntando al mismo contrato, 0x63e842b0…9c6fae, sobre cincuenta nonces consecutivos, de 18.914.775 a 18.914.824.

La transacción tipo 4 en Etherscan: cincuenta autorizaciones EIP-7702 que delegan Binance 14 al contrato sweeper del atacante a las 20:20:59 UTC.

Una transacción, cincuenta autorizaciones, un destino. El dinero salió tres minutos y veinticuatro segundos después.

Una autorización EIP-7702 vale para un solo nonce, y en una hot wallet que procesa un flujo constante de retiros el nonce avanza mientras tú todavía estás enviando. Cincuenta nonces consecutivos no son cincuenta intentos: son una ventana lo bastante ancha para garantizar que una estuviera vigente al llegar. Un truco de condición de carrera, no criptografía.

Lo que entró cambió la wallet. eth_getCode sobre Binance 14 empezó a devolver 0xef010063e842b054bd624a465454d533c33f573e9c6fae: el indicador de delegación que define la EIP-7702, 0xef0100 más una dirección. Mientras eso estuvo vigente, llamar a la hot wallet de Binance ejecutaba el código del atacante.

Eso no es una transferencia; una transferencia es algo que ya ocurrió. Esto es un poder permanente que sigue vigente hasta que alguien lo revoca, y por eso el sweeper siguió drenando depósitos a medida que llegaban, incluidos 3,9 millones de USDT hacia una wallet que Tether ya había bloqueado. El retiro que sacó 1.600 millones de USDT era una transacción tipo 2 aburrida, desde una dirección operativa: funcionó por lo que la wallet se había convertido.

Y nada de esto era desconocido.

La sección Security Considerations de la EIP-7702: un delegate mal implementado puede dar a un atacante control casi completo de la EOA de un firmante.

Las Security Considerations de la especificación: cambiar una delegación es "una operación crítica de seguridad que no debe hacerse a la ligera". Estaba escrito mucho antes de que vaciaran la wallet.

Tres horas y cuarenta y seis minutos

Binance quitó la delegación a las 00:10:35 UTC del 30 de octubre, en el bloque 26301896, con una transacción tipo 4 enviada por la propia hot wallet, con una sola autorización apuntando a la dirección nula.

La revocación en Etherscan: Binance 14 delegando a la dirección nula a las 00:10:35 UTC del 30 de octubre.

El arreglo, enviado por la wallet a sí misma. Binance tuvo la clave todo el tiempo. Tardó tres horas y cuarenta y nueve minutos en usarla.

La wallet firmó su propia revocación: Binance tuvo la clave de principio a fin. La declaración de Teng es verdadera, y ahí está el problema. La delegación estuvo vigente 3h 49m 36s, de las cuales 3h 46m 12s fueron después de que el dinero empezara a salir. Ningún medio que revisamos ha publicado esa cifra.

Nada en el stack trató "nuestro propio firmante acaba de otorgar autoridad permanente a un código nuevo" como un evento que justifique despertar a alguien. Las alertas de saldo disparan cuando el saldo se mueve, que es después de la pérdida. La alarma de verdad era el cambio de autorización, y estuvo pública en la cadena tres minutos y veinticuatro segundos antes de que saliera el primer dólar.

Tu versión de esto no tiene ninguna blockchain. Una clave de API detrás de un servicio interno, un runner de CI con token de despliegue, una app OAuth que alguien instaló en 2023, un agente de IA con una herramienta habilitada: es la misma forma que encontramos al llevar software hecho con IA a producción, y escribimos la mitad de credenciales en agentes de IA y credenciales expuestas. Los equipos protegen el secreto y miran el saldo. Nadie mira el alcance.

Qué decidir esta semana

  1. Cambia la pregunta de tu revisión de seguridad. No "¿puede filtrarse este secreto?", sino "¿qué se le puede hacer firmar al servicio que guarda este secreto, y a quién se le avisa cuando firma algo nuevo?". La primera tiene una respuesta documentable. La segunda tiene dueño, o no lo tiene.
  2. Alarma en cambio de privilegio, no solo en volumen. Un nuevo binding de IAM, un nuevo consentimiento OAuth, un destino de webhook nuevo, una delegación nueva: son eventos raros, así que alertar es barato y las guardias son reales. La detección de anomalías de volumen habría llegado tres minutos y veinticuatro segundos tarde. Hicimos el mismo argumento por el otro lado en robo de carga y toma de cuentas.
  3. Escribe qué dependencias pueden revertir una pérdida. Una columna, dos valores. En las revisiones de preparación para producción que hacemos, la columna "puede revertir" siempre es más corta de lo que el equipo esperaba.

Puntos clave

  • El "no hay evidencia de filtración de clave privada" de Binance es compatible con la cadena y no tranquiliza: el robo necesitó autorización, no una clave, y la wallet firmó su propia revocación 3h 49m después.
  • Una transacción EIP-7702 tipo 4 llevó 50 autorizaciones sobre 50 nonces consecutivos (18.914.775–18.914.824), todas hacia un sweeper, dejando el código de la hot wallet en 0xef0100 más la dirección del atacante.
  • Una delegación es un poder permanente, no una transferencia: el sweeper siguió drenando depósitos durante horas, incluidos 3,9 millones de USDT enviados tras el bloqueo de Tether.
  • La falla fue de detección. La delegación estuvo vigente 3h 46m tras el primer barrido mientras el monitoreo miraba saldos en lugar de cambios de autorización.
  • Unos USD 2.700 millones volvieron porque Tether, Circle, Ripple y World Liberty Financial decidieron congelar (cifras de TRM); los USD 2.400 millones en ETH y BTC no tenían a nadie a quien llamar.
Trabajamos con founders en cualquier lugar del mundo que tienen un producto funcional construido con IA — y el buen juicio de querer ojos sénior sobre él antes de que lleguen los usuarios reales.

Recibir revisión

¿Listo para lanzar con confianza?

30 minutos con un ingeniero sénior. Te decimos exactamente qué separa tu producto de la producción.

Obtén una revisión de tu producto

30 minutos, sin pitch, sin presión. Si tu producto ya está listo para lanzar como está, también te lo diremos.