危险的授权转账:Li.Finance 攻击事件始末 创宇区块链安全实验室 刚刚
在 payload 中包括多个call方法(调实际用transferFrom)。让 0x5a9fd7c3 调用 37 个call,借此利用多个钱包对于 0x5a9fd7c3 合约的授权(approve)将钱包资产转账到攻击者地址:
3.漏洞细节
导致本次问题的根本原因被攻击合约0x5a9fd7c3的逻辑合约存在一个批量让call 调用传入数据的函数 swapAndStartBridgeTokensViaCBridge:
该合约将会取出payload中的多个_swapData 数据结构并调用,LibSwap.swap(...);实现如下:
借此,攻击者利用该合约的 call 将各个钱包对 0x5a9fd7c3 合约的代码授权转走了多个钱包中的各种代币。
4.项目方进展
在事件发生后,项目方第一时间对合约可能的方法进行了停用,并为其审计和安全性问题进行致歉:
而后,项目方还联系了黑客,希望能与其取得联系并和平解决:
同时,最快的时间将漏洞合约修复后上线:
并将钱包(以Matic为例)对于之前被攻击合约的授权取消,对新的合约进行了重新授权:
最后,将用户资产进行补回:
同时我们关注到,其在 polygon 链上的合约也已实现了新的部署:
总结
此次攻击的根本原因是项目方对于 swapAndStartBridgeTokensViaCBridge 合约的实现过度自由化所导致的 call 调用注入,但项目方积极的面对问题的态度和后续补救的及时性值得学习和肯定。不贵于无过,而贵与改过。
但我们仍希望能将错误扼杀在发生之前,应从他人的错误中学习并避免自己未来的错误,正如 Li.Finance 所说的那样:“我们的使命是最大化用户体验,现在我们痛苦地了解到,为了遵循这种精神,我们的安全措施必须大幅改进。”
近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。

