Relayer的不完整检验
源链上(Ontology)的relayer没有对上链的交易做语义校验,因此包含修改keeper恶意交易可以被打包到poly chain上
目标链上(以太坊)上的relayer虽然对交易做了校验,但是攻击者可以直接调用以太坊上的EthCrossChainManager合约最终调用EthCrossChainData合约完成签名修改
攻击者精心够着了能导致hash冲突的函数签名,从而调用putCurEpochConPubKeyBytes
完成对签名的修改
见攻击步骤的具体分析
Poly Network事件分析
外部验证+乐观验证 该漏洞可以伪造铸币证明,导致双花攻击
完整的一次Withdraw交易过程如下:
Polygon为了防止交易重放(双花攻击),使用NFT作为退款凭证,来唯一标识一笔Withdraw交易。但是,由于NFT的ID生成缺陷,造成了攻击者可以构造参数利用同一笔有效的Withdraw交易,生成多个不同ID的NFT,再利用这些NFT进行退款交易,从而实现“双花攻击”。
该函数将对应的HP编码,转成对应的Hex编码。
Hex转HP
[6,3,6,1,7,4,10] Hex编码
[20,63,61,74] HP编码
HP转Hex
[15,23,45,32,62] HP编码
[5,2,3,4,5,3,2,6,2]Hex编码
[20,45,76,34]HP编码 [23,...]HP编码
[4,5,7,6,3,4,10]Hex编码
Polygon事件分析CN
Polygon事件分析Eng
绕过源链上代币的锁定过程,却获得了代币的锁定证明,进而在目标链铸造资产
当tokenAddress
不为_wtokenAddress
地址时进行 ERC20 代币的销毁或锁定,若为_wtokenAddress
则直接跳过该部分处理.
跨链桥合约中的depositETH
函数会将链平台币转为wToken
后转至depositHandler
地址,所以在depositHandler
执行deposit
逻辑时,已处理过代币转移,故跳过代币处理逻辑
但跨链桥合约的deposit
函数中并没有处理代币转移及校验,在转由deposiHandler
执行deposit
时,若data
数据构造成满足tokenAddress == _wtokenAddress
即可绕过处理
慢雾Meter.io跨链桥分析
Meter.io跨链桥分析
利用虚假的签名,在目标链Solana链上mint了12万个WETH。
Wormhole中引入了Validator角色–即guardians
on-chain event
执行相同的计算,同时对Validator Action Approval
(VAA)签名。transfer message
,guardians
签名的消息,说明铸造的代币和数量transfer message
是通过触发post_vaa
函数创建的,检查guardians
的签名来检查消息是否有效post_vaa
并不检查签名,典型的Solana方式,智能合约通过调用verify_signatures
函数创建verify_signatures
函数的输入之一是Solana内置的system
程序,verify_signatures
中调用Secp256k1
签名验证函数load_instruction_at
来检查Secp256k1
函数是否被首先调用load_instruction_at
函数最近被弃用了,因为它不检查它是否针对实际系统地址执行Instrcutions sysvar
相同的数据。system
程序,攻击者可以有效地谎报签名检查程序已被执行,但根本没有检查签名Wormhole Bridge跨链桥事件
绕过锁定的过程,攻击者合约发出对应的lock event .错误地提取,处理了恶意的日志事件。
pNetwork官方报告