LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 危险的授权转账:Li.Finance攻击事件始末

危险的授权转账:Li.Finance攻击事件始末

2022-03-21 区块律动BlockBeat 来源:区块链网络
原文标题:《知道创宇区块链安全实验室|危险的授权转账:Li.Finance攻击事件始末》
原文作者:创宇区块链实验室


前言


北京时间 3 月 20 日晚,知道创宇区块链安全实验室监测到以太坊上分布式跨链协议。Li.Finance 受到了攻击,攻击者执行了 37 次 call 注入,获取了多个钱包中约 60 万美元的资产(204 个 ETH)。此次资产损失并没有非常大,但项目方对于攻击的处理非常积极并值得学习与肯定 (见后文),目前项目方已补偿了协议损失并修复后重新部署了协议。


知道创宇区块链安全实验室第一时间跟踪本次事件并分析。



分析


1. 攻击者相关信息


攻击 tx:


0x4b4143cbe7f5475029cf23d6dcbb56856366d91794426f2e33819b9b1aac4e96


被攻击合约:


0x5A9Fd7c39a6C488E715437D7b1f3C823d5596eD1--代理合约


0x73a499e043b03fc047189ab1ba72eb595ff1fc8e--逻辑合约


攻击者地址:


0xC6f2bDE06967E04caAf4bF4E43717c3342680d76 -- 部署地址


0x878099F08131a18Fab6bB0b4Cfc6B6DAe54b177E -- 收款地址


2. 攻击流程


攻击调用流程


攻击者构造 payload 并调用被攻击合约 0x5a9fd7c3 的 swapAndStartBridgeTokensViaCBridge 函数:



具体使用的 Payload 如下--图中选中部分即为利用授权转账(transferFrom)部分的 payload:



调用一次正常 50 刀的跨链桥功能(为了能正常调用 swapAndStartBridgeTokensViaCBridge 函数):



在 payload 中包括多个 call 方法 (调实际用 transferFrom)。让 0x5a9fd7c3 调用 37 个 call,借此利用多个钱包对于 0x5a9fd7c3 合约的授权 (approve) 将钱包资产转账到攻击者地址:



后续执行正常的跨链桥逻辑 _startBridge(_cBridgeData); 这也是为什么第一个 swap 是正常的,这样才能让后续逻辑正常执行下去:



3. 漏洞细节


导致本次问题的根本原因被攻击合约 0x5a9fd7c3 的逻辑合约存在一个批量让 call 调用传入数据的函数 swapAndStartBridgeTokensViaCBridge:



该合约将会取出 payload 中的多个_swapData 数据结构并调用,LibSwap.swap(...);实现如下:



借此,攻击者利用该合约的 call 将各个钱包对 0x5a9fd7c3 合约的代码授权转走了多个钱包中的各种代币。



4. 项目方进展


在事件发生后,项目方第一时间对合约可能的方法进行了停用,并为其审计和安全性问题进行致歉:




而后,项目方还联系了黑客,希望能与其取得联系并和平解决:



同时,最快的时间将漏洞合约修复后上线:



并将钱包(以 Matic 为例)对于之前被攻击合约的授权取消,对新的合约进行了重新授权:



最后,将用户资产进行补回:



同时我们关注到,其在 polygon 链上的合约也已实现了新的部署:



总结


此次攻击的根本原因是项目方对于 swapAndStartBridgeTokensViaCBridge 合约的实现过度自由化所导致的 call 调用注入,但项目方积极的面对问题的态度和后续补救的及时性值得学习和肯定。不贵于无过,而贵与改过。


但我们仍希望能将错误扼杀在发生之前,应从他人的错误中学习并避免自己未来的错误,正如 Li.Finance 所说的那样:「我们的使命是最大化用户体验,现在我们痛苦地了解到,为了遵循这种精神,我们的安全措施必须大幅改进。」


近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。


原文链接


—-

编译者/作者:区块律动BlockBeat

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...