Back to Blog

Análise Inicial do Hack da PolyNetwork

Code Auditing
11 de agosto de 2021
3 min read

A PolyNetwork foi hackeada e mais de 300 milhões de dólares foram roubados. O atacante realizou o ataque em múltiplas redes. Neste blog, usamos a transação do ataque na Ethereum (0xd8c1f7424593ddba11a0e072b61082bf3d931583cb75f7843fc2a8685d20033a) para analisar a possível razão do hack. Nossa análise inicial mostra que uma possível razão pode ser tanto o vazamento da chave privada usada para assinar a mensagem cross-chain, quanto a existência de um bug no processo de assinatura da PolyNetwork que foi explorado para assinar uma mensagem forjada.

Aviso: Este blog contém apenas o resultado de nossa análise inicial com base nos dados onchain na Ethereum. Não podemos verificar nossas descobertas sem informações adicionais da Poly Network.

Atualização 2021/08/12: As informações adicionais mostram que a causa do ataque ocorreu porque o keeper foi modificado pelo atacante (e não por causa do vazamento da chave privada). Temos uma análise mais aprofundada para responder à pergunta de por que a transação para alterar o keeper pôde ser executada em primeiro lugar.

Transação e rastreamento de chamadas

Usamos nosso sistema de análise de transações para recuperar o rastreamento.

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

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

Assinaturas de Funções:

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

O processo principal do ataque

O processo principal do ataque consiste no atacante passando os dados assinados para a função verifyHeaderAndExecuteTx(). Essa função decodificará os dados e verificará as assinaturas usadas para assinar os dados. Se esse processo for bem-sucedido, o método (e o endereço do contrato) especificado na mensagem será executado. Durante esse ataque, a função unlock do contrato inteligente 0x250e76987d838a75310c34bf422ea9f1ac4cc906 é invocada para transferir o Fei para o atacante.

Em resumo, o ataque ocorre devido aos parâmetros válidos passados para a função verifyHeaderAndExecuteTx. E os parâmetros conseguem passar pelo processo de verificação de assinatura. Após isso, a transação especificada na mensagem será executada (semelhante à execução arbitrária de comandos em segurança de software).

Para melhor compreender esse processo, recuperamos os valores críticos do rastreamento de chamadas.

Função: verifyHeaderAndExecuteTx:

verifySig

unlock

A variável managerProxyContract no LockProxy. Ela corresponde ao valor do endereço do chamador da função unlock.

Conclusão

A partir dos valores recuperados, descobrimos que:

  1. O atacante fornece uma mensagem assinada válida para a função verifyHeaderAndExecuteTx
  2. O modificador onlyManagerContract no contrato inteligente LockProxy NÃO foi contornado.

Com base nessas duas observações, suspeitamos que:

  1. O atacante pode ter as chaves legítimas para assinar as mensagens, o que indica que as chaves de assinatura podem ter sido vazadas.

Ou

  1. Existe um bug no processo de assinatura da PolyNetwork que foi explorado para assinar uma mensagem forjada.

No entanto, não temos dados adicionais offchain para verificar nossas descobertas. Esperamos que nossa análise possa ser útil para investigações futuras.

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

Twitter: https://twitter.com/BlockSecTeam

Sign up for the latest updates
Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec
Security Insights

Perdas de ~5,57 milhões USD: exploração de falhas no X100 Freezer e no NEM | Boletim semanal da BlockSec

Este relatório semanal aborda dois incidentes de segurança na Ethereum e na BNB Chain no período de 19/10/2026–25/10/2026. Ele examina uma tomada de controle da governança do X100 Freezer financiada por um empréstimo-relâmpago e uma falha na liquidação de impostos que afetou um pool de liquidez de um token NEM na BNB Chain. As perdas estimadas no escopo do relatório totalizam aproximadamente 5,57 milhões USD: cerca de 4,75 milhões USD da transação representativa do X100 e cerca de 820 mil USD do incidente no pool do NEM. O total exclui as extrações subsequentes do X100 relatadas separadamente.

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec
Security Insights

Perdas de ~3,87 milhões USD: ataques à Autheo Network e à UNCX | Resumo semanal da BlockSec

Este relatório semanal aborda 3 incidentes de segurança no período de 12/10/2026–18/10/2026, com perdas totais estimadas em aproximadamente 3,87 milhões USD. A Autheo Network sofreu um comprometimento de chave privada com perdas de cerca de 1,76 milhões USD, a Qubic Wallet perdeu cerca de 1,30 milhões USD devido à geração de seeds fracas, e os contratos Smart Token Vesting V2 da UNCX Network sofreram um erro contábil de cerca de 807 mil USD nas redes Ethereum, BNB Chain, Base e Robinhood Chain. A análise em destaque da UNCX explica como um cálculo incorreto do total de cotas misturou parcelas de vesting criadas com diferentes proporções entre tokens e cotas, permitindo saques acima do devido de pools compartilhados.

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec
Security Insights

~US$ 542 mil perdidos: ataque ao MakerDaoBot | Boletim semanal da BlockSec

O relatório cobre 1 incidente no Ethereum (05–11/10/2026), com perda estimada de US$ 542 mil. Um adaptador malicioso obteve acesso aos saldos MakerDAO via função desprotegida do MakerDaoBot, liquidou 4 leilões ETH-A e converteu 200 ETH-A em WETH, depois enviados como ETH ao atacante.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit