首页 > 其他分享 >【漏洞分析】Li.Fi攻击事件分析:缺乏关键参数检查的钻石协议

【漏洞分析】Li.Fi攻击事件分析:缺乏关键参数检查的钻石协议

时间:2024-07-18 21:08:42浏览次数:16  
标签:分析 钻石 函数 协议 Li https 攻击者 Fi 合约

背景信息

2024 年 7 月 16日,Li.Fi 协议遭受黑客攻击,漏洞成因是钻石协议中 diamond 合约新添加的 facet 合约没有对参数进行检查,导致 call 函数任意执行。且 diamond 合约拥有用户的 approve,所以攻击者可以构造恶意参数对用户资金进行转移。

攻击交易https://app.blocksec.com/explorer/tx/eth/0xd82fe84e63b1aa52e1ce540582ee0895ba4a71ec5e7a632a3faa1aff3e763873

相关合约

  1. 钻石协议 LiFiDiamondhttps://etherscan.io/address/0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae#code
  2. 逻辑合约 GasZipFacethttps://etherscan.io/address/0xf28a352377663ca134bd27b582b1a9a4dad7e534#code

钻石协议
钻石协议的提案是 EIP-2535 :https://eips.ethereum.org/EIPS/eip-2535 ,想详细了解的读者可以阅读提案的具体内容。简单理解一下就是变种的 proxy 形式,根据不同的函数调用不同的 implement 合约。

image

Trace 分析

攻击者调用 LiFiDiamond.depositToGasZipERC20 函数,Diamond 合约 delegatecall Facet 合约

image

GasZipFacet.depositToGasZipERC20

image

LibSwap.swap 函数

image

_swap.callTo.call{value: nativeValue}(_swap.callData)函数中,攻击者构造恶意参数,导致实际上调用的是 USDT.transferFrom() 函数。

image

ERC20 授权

由于在 LibAsset 中需要用到 transferFrom 函数转移用户的 ERC20 代币,所以需要用户对 LiFiDiamond 合约进行代币授权。这是攻击发生的第二个条件。

image

标签:分析,钻石,函数,协议,Li,https,攻击者,Fi,合约
From: https://www.cnblogs.com/ACaiGarden/p/18310446

相关文章

  • Figma数值输入框支持拖拽调整功能实现
    最近再研究Figma的一些功能设计,对其中的数值输入框可以直接鼠标拖拽的这个设计印象非常深刻.这里用了其他网友的一张动态截图演示一下效果.实际这个拖拽的功能不止看到的这么简单,在深度研究使用之后,发现这个拖拽可以无限的拖动,当鼠标超出网页后会自动回到另一端然后继......
  • Visible and Clear: Finding Tiny Objects in Difference Map
    VisibleandClear:FindingTinyObjectsinDifferenceMap论文链接:https://arxiv.org/abs/2405.11276项目链接:https://github.com/Hiyuur/SR-TOD(ECCV2024)Abstract微小目标检测是目标检测领域的关键问题之一。大多数通用检测器的性能在微小目标检测任务中显著下降......
  • SOLIDWORKS 无法获得下列许可 SOLIDWORKS Standard。无效的 (不一致的) 使用许可号码
    1.找到下图安装包中的文档  打开文件夹,将下图中箭头所指的文件复制到安装目录中 复制到安装目录的SOLIDWORKS文件加下  重启电脑后,打开软件即可正常进入转载:https://blog.csdn.net/q18335189155/article/details/126897234 ......
  • 十天学会Python——第8天:Linux基础
    1Linux基础1.1认识LinuxLinux目录:1Linux系统只有一个根目录/,所有原文件都在它下面2Linux主要目录/:根目录/bin:可执行的二进制文件的目录/etc:系统配置文件存放的目录/home:用户家目录1.2Linux基础命令1.2.1查看目录命令命令说明ls查看当前路径的目录信......
  • WPF The calling thread cannot access this object because a different thread owns
      publicintImgIdx{get{returnimgIdx;}set{if(value!=imgIdx){imgIdx=value;if(imgIdx<0){imgIdx=imgsCount-1;......
  • 灰色关联分析
    灰色关联分析作用:       1、进行系统分析;       2、用于综合评价(综合评价中常用的两个方法:层次分析法AHP与优劣解决法Tpsis)何为系统:社会系统,经济系统,农业系统,生态系统等。灰色关联分析探究什么自变量影响系统?常规对系统进行分析的方法有:回归分析、方差分......
  • 题解:CF1912D Divisibility Test
    又是一道水绿。刚刚小学毕业的数学idiot——我释怀地笑了。第一种很好判断,当$b^k$为$n$的倍数时,取基数为$b$的能被$n$整除的整数$c$的最后$k$位数显然能被$n$整除。第二种也不难,当$b^k\equiv1\pmodn$时,取以$b$为底数的能被$n$整除的整数$c$的$k$......
  • MATH1041 Statistics for Life
    MATH1041 Statistics for Life and Social SciencesTerm 2, 2024MATH1041 AssignmentData:  Together with this document, you should have received your unique dataset in an e-mail sent to your  official university email address. The......
  • WPF ListBox's ItemsSource depend on another's ListBoxItem and fully implemented
    //xaml<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><ListBoxGrid.Column="0"ItemsSource=&......
  • 揭秘Java世界:轻松检测两个List是否有交集
    哈喽,大家好,我是木头左!快速入门:什么是List的交集?在Java中,当提到两个List的交集,指的是这两个列表共有的元素集合。例如,如果有两个List,其中一个包含元素A,B,C,另一个包含B,C,D,那么它们的交集就是B,C。理解了这一点,就可以开始探讨如何检测这个交集,以及它对编程实践的意义。Ja......