本文由Certik原创,授权“金色财经”首发,转载请注明出处。
“黑客拿着房主证明找物业拿钥匙,证明是假的,却从物业那里拿到了真的钥匙”
事件回顾
2021年8月10日,PolyNetwork遭受了跨链攻击,被转移了6亿美金的加密资产(之后攻击者开始陆续归还被盗资产)。攻击者在多条公链上进行了恶意交易,并通过中继器(Poly-Relayer)组件完成了攻击。
用上面物业的例子来解释的话,黑客用假房主证明(第三方公链上的invalid transaction),从物业(中继器 Poly-Relayer)那里拿到了真的钥匙 (Poly-chain上经过签名的Merkle证明)。
一、黑客在第三方公链上初始化了一个本应是无效的恶意交易。
二、中继器Poly-Relayer在没有充分检查的情况下将此交易纳入了Poly Chain的Merkle tree并签字,然后发布到Poly Chain区块中。
三、黑客在以太坊上用步骤二的有效Merkle证明,调用Poly Network的ECCM合约,将keepers改成黑客控制的公钥。
RBI前副行长:要接受数字资产用于支付经济活动:9月8日消息,印度储备银行 (RBI) 前副行长已就该国的金融和加密生态系统发表讲话,并表示要接受数字资产可用于支付经济活动,但他更多地将它们视为一种资产类别。此前报道,本月早些时候,政府宣布正在制定一项法案草案,将加密货币定义为可以征税的商品。但印度的监管情况仍不明朗,政界人士仍在考虑法案和立法。(Cointelegraph)[2021/9/8 23:09:15]
这里值得注意的是,Poly Network在有些链上的中继器没有通过此交易,所以其链上资产未受影响。
一、黑客于北京时间2021年8月10日17:32:32对第三方公链发起了一笔恶意交易。
https://explorer.ont.io/tx/F771BA610625D5A37B67D30BF2F8829703540C86AD76542802567CAAFFFF280C#
DeFi Education Fund回应UNI抛售:有一定自主决定权,会在90天内发布年度预算报告:7月15日消息,此前抛售50万枚获赠UNI代币的DeFi Education Fund(DeFi教育基金,简称DEF)针对代币抛售回应称,鉴于不可预测且瞬息万变的监管环境,再加上提案中虽然称会在未来几年内分配100万枚代币,但DEF也有一定的自主决定权,而且DEF大部分费用会以美元计价,因此兑换了一半的代币为USDC来为运营提供资金支持。抛售当天其销售额占UNI日交易量的不到5%,因此不太可能对UNI市场价格产生负面影响。另外,DEF表示,将在90天之内发布年度预算。DEF提案作者不在委员会名单中,也不参与委员会的资金使用情况。目前,DEF七位委员会成员中有有四名在DeFi软件开发公司担任高级法律职务,其中一位是专注于DAO的公司Reverie的创始人LarrySukernik。[2021/7/15 0:53:07]
我们对交易进行了解码,得到了以下参数映射。
二、此恶意交易调用了一个method "66313231333138303933",其对应的签名等于0x41973cd9(与之后调到的putCurEpochConPubKeyBytes函数签名相同)。
三、这笔交易应该是无效调用, 可是中继器Poly-Relayer却在未充分检查的情况下将此交易纳入了Poly Chain的Merkle tree并签字,然后发布到Poly Chain区块中。Merkle tree是用来证明交易是否真实存在的。其产生的跨链交易如下:https://explorer.poly.network/tx/1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80
此恶意交易利用了中继器Poly-Relayer的漏洞,这可能就是为什么黑客不得不冒险通过中心化交易所购买第三方公链代币的原因。
黑客部分声明的截图如下:
四、跨链交易在以太坊上调用了Poly Network合约的EthCrossChainManager.verifyHeaderAndExecuteTx(),第一个参数包含了Merkle证明,解析如下:
五、这个函数解析了Merkle证明,发现证明是有效的,此恶意交易确实存在于已被签名的Merkle tree中。
之后调用了EthCrossChainManager._executeCrossChainTx()函数去执行此交易,即调用toContract指向合约 (0xcf2afe102057ba5c16f899271045a0a37fcb10f2)中的method (0x6631313231333138303933),传入参数args (010000000000000014a87fb85a93ca072cd4e5f0d4f178bc831df8a00b)。而这个method指向putCurEpochConPubKeyBytes(bytes),因为其函数签名与步骤二中提到的method签名相同 (均为0x41973cd9,此处为哈希碰撞),所以被顺利执行,将keepers的公钥改成了黑客的公钥。以太坊上的交易如下:https://etherscan.io/tx/0xb1f70464bd95b774c6ce60fc706eb5f9e35cb5f06e6cfe7c17dcda46ffd59581
六、黑客改变公钥后,即可随意解锁资产。
此次攻击是由一连串交易构成的,其攻击根源分析如下:
1. 中继器Poly-Relayer会接收任意含有"makeFromOntProof" 事件的交易。
2. 中继器Poly-Relayer在未充分检查的情况下,将恶意交易发布到Poly Chain上。
3. 在步骤二中,此恶意交易被纳入到Poly Chain的Merkle tree上,产生了有效的Merkle证明。
4. 以太坊上的ECCM合约只对步骤二产生的Merkle证明和原始数据进行了轻量级验证。不过值得注意的是,Merkle证明的全面验证应该在协议层面完成,而不是在智能合约层面。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。