Polymarket puso su exchange en modo solo cancelación y pausó las acciones del relayer el jueves 29 de octubre, después de que varios usuarios denunciaran salidas de fondos de sus cuentas sin permiso. La compañía confirmó más tarde que uno de sus proveedores externos fue comprometido y aseguró que todos los afectados serán compensados.
Cronología del incidente
Todo el episodio, desde el primer aviso hasta la resolución, duró una hora, según el historial de la página de estado de Polymarket.
Hora (UTC) | Estado | Mensaje |
|---|---|---|
18:05 | Investigando | Exchange en modo solo cancelación, acciones del relayer pausadas |
18:37 | Identificado | Problema corregido; proveedor externo comprometido, caso remitido a las autoridades |
18:55 | Monitorización | El trading se reanudará aproximadamente a las 15:00 ET |
19:05 | Resuelto | Incidente marcado como resuelto |
En la actualización de las 18:37, Polymarket indicó que el problema afectó a su plataforma internacional, Polymarket.com, y que el trading se detuvo "por un exceso de precaución". La empresa publicó el mismo comunicado en X.
El script que vació las cuentas
Los investigadores de Hudson Rock descargaron cdn.debugbear.com/C7xcKKrjUnXK.js a las 18:12:06 UTC y encontraron un payload de 15.187 bytes con lógica para vaciar wallets, según su análisis publicado. DebugBear es un servicio de monitorización del rendimiento web.
La revisión no halló ninguna rutina que envíe claves privadas, contraseñas o frases semilla al atacante. En su lugar, el script reutilizaba la autoridad de la sesión que ya estaba abierta en el navegador:
- Leía las entradas de almacenamiento local polymarket.auth.params, polymarket.auth.proxyWallet y poly_clob_api_key_map
- Recorría los componentes internos de React para localizar el cliente de trading activo, buscando métodos como postOrder y createOrder
- Calculaba el valor de la cartera y aplicaba umbrales de 10 para el valor total y 10 por posición
- Cuentas EOA: construía una transferencia por lotes ERC-1155 de tokens de posición hacia el destinatario
- Cuentas Magic: enviaba órdenes de venta a precios cada vez más agresivos y después transfería lo obtenido
- Enviaba a data.debugbear.com la dirección de la wallet, la IP, el país, el valor de la cartera y los resultados de las transferencias
El código de producción de Polymarket contiene el mensaje de compilación "chore(polymarket): remove debugbear rum script (#15337)" con una marca de tiempo de las 17:59:20 UTC. Hudson Rock señala que la marca de tiempo de una compilación no establece el momento exacto del despliegue.
Pérdidas reportadas y dirección receptora
El trader Car (@CarOnPolymarket) afirmó que su cuenta fue vaciada de 800.000 $ y que todas sus posiciones se vendieron. La cifra es el reporte del propio usuario y Hudson Rock no la verificó on-chain.
La dirección 0x3F99139F1C5854bb628c2e576Aaf638e99dFfc18, fijada en el script como destinatario alternativo, mostraba los siguientes saldos en PolygonScan en el momento de la captura:
Activo | Valor |
|---|---|
POL | 2.178.191,78 $ |
Otros tokens | 16.170,39 $ |
Total | aprox. 2,19 millones de $ |
Hudson Rock indica que el saldo no debe sumarse a la pérdida de 800.000 $, ya que ambas cifras pueden solaparse. Se desconocen el número de usuarios afectados, las pérdidas totales y el mecanismo inicial del compromiso.
Qué significa para ti
Si tenías Polymarket.com abierto con una sesión autenticada durante el incidente, Hudson Rock recomienda cerrar las pestañas expuestas y revisar órdenes recientes, movimientos de posiciones y transacciones de la wallet desde una sesión limpia.
- Rechaza cualquier solicitud de firma o aprobación que no hayas iniciado tú
- Revisa las sesiones activas y las credenciales de API siguiendo la guía de soporte de la plataforma
- Desconectar una wallet no revierte las transferencias ya completadas ni revoca las aprobaciones on-chain
- Evita los enlaces de "recuperación" de cuentas que no hayas solicitado y nunca compartas tu frase semilla
