Volver al blog

El Análisis Inicial del Hackeo a PolyNetwork

Code Auditing
11 de agosto de 2021
3 min de lectura

La red PolyNetwork ha sido hackeada y se han robado más de 300 millones de dólares. El atacante realizó el ataque en múltiples cadenas. En este blog, utilizamos la transacción del ataque en Ethereum (0xd8c1f7424593ddba11a0e072b61082bf3d931583cb75f7843fc2a8685d20033a) para analizar la posible razón del hackeo. Nuestro análisis inicial muestra que una posible razón podría ser la filtración de la clave privada utilizada para firmar el mensaje entre cadenas, o bien existe un error en el proceso de firma de PolyNetwork que ha sido explotado para firmar un mensaje manipulado.

Descargo de responsabilidad: Este blog solo contiene los resultados de nuestro análisis inicial basado en los datos en cadena de Ethereum. No podemos verificar nuestros hallazgos sin información adicional de Poly Network.

Actualización 2021/08/12: La información adicional muestra que la causa del ataque se debe a que el keeper fue modificado por el atacante (no por la filtración de la clave privada). Tenemos un análisis más detallado para responder por qué la transacción para cambiar el keeper puede ejecutarse en primer lugar.

Transacción y traza de llamadas

Utilizamos nuestro sistema de análisis de transacciones para recuperar la traza.

Atacante -> EthCrossChainManager -> EthCrossChainData -> LockProxy -> managerProxyContractforLockProxy

  • 0xc8a65fadf0e0ddaf421f28feab69bf6e2e589963: Atacante
  • 0x838bf9e95cb12dd76a54c9f9d2e3082eaf928270: EthCrossChainManager
  • 0xcf2afe102057ba5c16f899271045a0a37fcb10f2: EthCrossChainData
  • 0x250e76987d838a75310c34bf422ea9f1ac4cc906: LockProxy
  • 0x5a51e2ebf8d136926b9ca7b59b60464e7c44d2eb: managerProxyContract para LockProxy

Firmas de funciones:

  • d450e04c (verifyHeaderAndExecuteTx)
  • 69d48074 (getCurEpochConPubKeyBytes)
  • 5ac40790 (getCurEpochStartHeight)
  • 0586763c (checkIfFromChainTxExist)
  • e90bfdcf (markFromChainTxExist(uint64,bytes32))

El proceso principal del ataque

El proceso principal del ataque consiste en que el atacante pasó los datos firmados a la función verifyHeaderAndExecuteTx(). Esta función decodificará los datos y verificará las firmas utilizadas para firmar los datos. Si este proceso es exitoso, el método (y la dirección del contrato) especificado en el mensaje será ejecutado. Durante este ataque, se invoca la función unlock del contrato inteligente 0x250e76987d838a75310c34bf422ea9f1ac4cc906 para transferir el Fei al atacante.

En resumen, el ataque se debe a los parámetros válidos pasados a la función verifyHeaderAndExecuteTx. Y los parámetros pueden superar el proceso de verificación de firmas. Después de eso, la transacción especificada en el mensaje será ejecutada (como la ejecución de comandos arbitrarios en seguridad de software).

Para comprender mejor este proceso, recuperamos los valores críticos de la traza de llamadas.

Función: verifyHeaderAndExecuteTx:

verifySig

unlock

La variable managerProxyContract en el LockProxy. Coincide con el valor de la dirección del llamante de la función unlock.

Conclusión

A partir de los valores recuperados, encontramos que:

  1. El atacante proporciona un mensaje firmado válido a la función verifyHeaderAndExecuteTx
  2. El modificador onlyManagerContract en el contrato inteligente LockProxy NO es eludido.

Basándonos en estas dos observaciones, sospechamos que:

  1. El atacante puede tener las claves legítimas para firmar los mensajes, lo que indica que las claves de firma pueden haber sido filtradas.

O

  1. Existe un error en el proceso de firma de PolyNetwork que ha sido explotado para firmar un mensaje manipulado.

Sin embargo, no contamos con datos adicionales fuera de la cadena para verificar nuestros hallazgos. Esperamos que nuestro análisis sea útil para una investigación más profunda.

Créditos: Yufeng Hu, Siwei Wu, Lei Wu, Yajin Zhou @BlockSec

Twitter: https://twitter.com/BlockSecTeam

Apúntate para recibir las novedades
Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~5,57 millones USD: exploits de X100 Freezer y NEM | Resumen semanal de BlockSec

Este informe semanal cubre dos incidentes de seguridad ocurridos en Ethereum y BNB Chain durante el período 19/10/2026–25/10/2026. Examina una toma de control de la gobernanza de X100 Freezer financiada mediante un préstamo flash y un fallo en la liquidación de impuestos que afectó a un pool de liquidez de un token NEM en BNB Chain. Las pérdidas estimadas dentro del alcance del informe suman aproximadamente 5,57 millones USD: ~4,75 millones USD de la transacción representativa de X100 y ~820 mil USD del incidente del pool de NEM. El total excluye las extracciones posteriores de X100 reportadas por separado.

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec
Security Insights

Pérdidas de aproximadamente 3,87 millones USD: hackeos de Autheo Network y UNCX | Resumen semanal de BlockSec

Este informe semanal cubre 3 incidentes de seguridad correspondientes al período 12/10/2026–18/10/2026, con pérdidas totales estimadas en aproximadamente 3,87 millones USD. Autheo Network sufrió una vulneración de clave privada con pérdidas de aproximadamente 1,76 millones USD; Qubic Wallet perdió aproximadamente 1,30 millones USD debido a la generación de una semilla débil; y los contratos Smart Token Vesting V2 de UNCX Network sufrieron un error contable con pérdidas de aproximadamente 807 mil USD en Ethereum, BNB Chain, Base y Robinhood Chain. El análisis destacado de UNCX explica cómo un cálculo agregado de participaciones defectuoso mezcló tramos de adquisición de derechos creados con distintas proporciones entre tokens y participaciones, lo que permitió retiros excesivos de pools compartidos.

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec
Security Insights

Pérdidas de ~542.000 dólares: explotación de MakerDaoBot | Resumen semanal de BlockSec

Ethereum (05–11/10/2026): 1 incidente; pérdida estimada de $542 mil. MakerDaoBot, sin control de acceso, dio a un adaptador malicioso acceso a sus saldos MakerDAO. Este cerró 4 subastas ETH-A y convirtió 200 ETH-A en WETH; el atacante los cambió por 200 ETH y se los envió.

El mejor auditor de seguridad para Web3

Valida el diseño, el código y la lógica de negocio antes del lanzamiento, siguiendo los estándares de seguridad más exigentes del sector.

Auditoría de BlockSec