Exploit de Poly Network
Un bug en el contrato cross-chain manager permitió al atacante cambiar la clave pública del keeper y retirar $611 M de tres cadenas — devueltos en su totalidad.
- Fecha
- Víctima
- Poly Network
- Estado
- Recuperado
El 10 de agosto de 2021, un atacante drenó aproximadamente $611 M en tokens del protocolo cross-chain Poly Network en Ethereum, BNB Chain y Polygon. En dos semanas el atacante devolvió cada centavo y se le ofreció una recompensa de $500K y un trabajo.
Qué ocurrió
Poly Network usaba un par de contratos cross-chain — EthCrossChainManager y EthCrossChainData — para retransmitir mensajes entre cadenas soportadas. El contrato relayer tenía una función pública (verifyHeaderAndExecuteTx) que podía llamar datos arbitrarios en el contrato de datos, incluyendo la función putCurEpochConPubKeyBytes del contrato de datos que establecía la clave pública del keeper.
Al crear una prueba cross-chain que se resolvía a esa función interna, el atacante rotó la clave pública del keeper a una que él controlaba. Desde ese momento, cada retiro cross-chain podía ser firmado por él.
Consecuencias
- El atacante inicialmente afirmó haberlo hecho "por diversión" y comenzó a devolver fondos en 24 horas, negociando públicamente con Poly Network mediante mensajes on-chain.
- Los $611 M fueron devueltos. Poly Network ofreció públicamente al atacante una recompensa de $500K y el rol de "Chief Security Advisor".
- El exploit se convirtió en un ejemplo de libro de texto de por qué los ejecutores de mensajes cross-chain no deberían poder mutar estado crítico para la confianza.
Por qué importa
El bug de Poly Network no estaba en la criptografía o en la firma del keeper — estaba en qué estaba autorizado a llamar el ejecutor. Cualquier puente cross-chain que pueda llamar funciones administrativas en su propia configuración debe tratar al ejecutor como un llamador privilegiado.
Fuentes y evidencia on-chain
- [01]medium.comhttps://medium.com/@MrToph/the-initial-analysis-of-the-poly-network-hack-c4f8d3b69cb4
- [02]twitter.comhttps://twitter.com/PolyNetwork2/status/1425073987164381196
- 0xad7a2c70c958fcd3effbf374d0acf3774a9257577625ae4c838e24b0de17602a