漏洞案例集锦

被黑 6.1 亿美金的Poly Network 事件:

黑客是利用“EthCrossChainManager 合约可以修改EthCrossChainData 合约中的中继链验证人 (即 Keeper) 的公钥以及在执行跨链交易时未进行目标合约与参数的验证”的漏洞;

关键分析:

  • 中继链验证人 (即 Keeper) 的公钥存在 EthCrossChainData 合约,但该合约的 owner 为 EthCrossChainManager 合约。EthCrossChainManager 拥有调用其内部直接修改 Keeper 公钥 putCurEpochConPubKeyBytes 函数的权限。
  • 利用abi.encodePacked(bytes4(keccak256(abi.encodePacked(_method, "(bytes,bytes,uint64)")))中的_method参数,构造修改中继链验证人 ( Keeper) 公钥的函数签名function putCurEpochConPubKeyBytes(bytes calldata curEpochPkBytes) external returns (bool);然后,在源链上发一笔修改目标链上的验证人的伪装跨链操作;

攻击过程:

  1. 发起一笔修改目标链上keeper公钥的跨链交易操作;
  2. 修改成功后,使用该账户进行调用EthCrossChainManager合约进行转出资产的操作 ;

总结点:

  1. 执行跨链操作必须验证目标合约是否为官方的内部合约;
  2. 谨慎控制一个合约调用另一个合约的函数权限;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容