CertiK:Vyper 5200万美元损失 事件详解

金色财经_

有报告称 Vyper 0.2.15、0.2.16 和 0.3.0 版本存在漏洞,导致 Curve 上的许多池有遭受重入攻击的风险。该漏洞允许攻击者在移除流动性过程中调用添加流动性函数。

目前,总共有6,930万美元受到影响,其中1,670万美元已被白帽黑客追回。这也意味着此次事件造成了5,200万美元被盗,成为了2023年迄今为止金额最高的重入攻击。

exsGmBiwYOSh5Seu3C6zysCmJcCD64sdWTvG5w0M.jpeg

Vyper Incident Anaylsis

事件总结

2023年7月30日,专为以太坊虚拟机(EVM)设计的面向合约的编程语言 Vyper 编译器0.2.15、0.2.16 和 0.3.0 版本被宣布存在重入锁失效漏洞。多个 DeFi 项目受到该漏洞的影响,损失总额达 5,200 万美元。

CertiK 已确定有六个地址涉及此次事件。第一个(0x172)未能利用区块 17806056 中的漏洞。最初的漏洞利用者从 Tornado Cash 提取了 0.1 ETH,并继续创建攻击合约。然而,一个跑在前面的钱包(0x6Ec21)支付了更多的gas费用,并率先执行了交易,获得了大约 6,100枚WETH(1,140 万美元)。

YLsgfOUBbfcQ6Pgy77tT2prtmsSHe2U4s7HpuCV3.png

由MEV机器人在前置交易失败的漏洞 来源:Etherscan Etherscan

该漏洞导致了进一步的损失:EOA 0xDCe5d 获得了价值约 2,100 万美元的资产。涉案钱包明细如下图:

BQybD6x7JDeb56tNYa5gp3antJdgtukOJp5C71Gw.png

共有6个项目受到影响,约有6,930万美元被盗走,其中1,670万美元已被归还,总计损失约为5,200万美元。

什么是Vyper

Vyper 是以太坊虚拟机(EVM)的一种面向合约的 pythonic 编程语言。Vyper 的测试版从 2017 年就开始有了,但其首个非测试版本是于2020年7月发布的 0.2.1 版。

Solidity是以太坊生态系统中的主流语言,它比Vyper存在的时间要长得多,因此许多社区成员创建了专门使用 Solidity 运行的工具。根据 DeFiLlama 的数据显示,在DeFi协议中价值约700 亿美元的总锁仓价值(TVL)中,Vyper 智能合约占 21.7 亿美元,而 Solidity 则占绝大多数,高达 674.9 亿美元。

KjMot1urT10BOZJi8lgltDDN62IMhxVncPFncjoP.png

616cb7f4-e84a-479f-bd50-73e2adaec534 根据语言划分的总锁仓价值 来源:DeFiLlama

截至2023年5月10日,Vyper的主导地位从 2020 年8月的30%高点降至 6.27%。尽管 Vyper的TVL 主导地位明显低于Solidity,但这一事件仍导致6,200万美元受到影响。

8G03pLGwavL4LcDkdTQS5EVlIywScZBcpTb4Fzeb.png

b89a9653-a2d4-4e89-9042-24e06ed1590a (1) 不同编程语言在 TVL 中的主导地位 来源:DeFiLlama

编译器版本

编译器版本是指编程语言编译器的特定版本,编译器将人类可读的源代码转换为机器可读的代码。

编译器版本会定期更新,以引入功能、修复漏洞并增强安全性。Vyper 语言目前不提供白客漏洞悬赏计划。

版本 0.2.15 - 0.3.0

上文提到的就是Vyper 的0.2.15、0.2.16 和 0.3.0版本中发现了漏洞,导致了多个DeFi项目遭到重入攻击。

而最早的Vyper 漏洞版本 0.2.15 发布于2021年7 月23日。到同年12月发布 0.3.1 版时,之前的漏洞已不复存在。

时间线

事件最初开始于北京时间7月30日晚9点10分,攻击者针对Curve 上 JPEG’d池的交易由于前置运行交易而失败。

Screenshot 2023-07-31 at 9.08.31 PM

北京时间7月30日晚10点,JPEG‘d 确认 pETH-ETH Curve池已被恶意利用。

2g2jUlVcktQTJmqFFZUPSVONMA6O9Jbp7HcbQEKd.png

Vyper 随后宣布,0.2.15、0.2.16 和 0.3.0 版本包括了一个失效的重入锁。Vyper 发布推文后,Metronome 和 Alchemix 也受到了影响。

mRZI1JtH7Qv7Mvk09k7ex0chKgffsFir98ebzqtD.png

Metronome DAO 宣布消息:

FTzOyIh9Z8Opc6soNd4zLzAcKQGuLxWY2QEefPPV.png

F9Dh7bMfVanq8deivVbWwhF24E3gbbIpThEq0t5l.png

8MYwVijoFiaJPL32YVTK6AOQHeHsZvZXyxIfmF9h.png

北京时间第二天凌晨,Curve Finance在 Discord 上发布公告称,剩余的资金池不受Vyper Bug的影响,是安全的。

PsdIMHoBSb8vtyuFjjlO4ZsCrmKfIC6IY6I40DkB.png

aLVrLdFyKeWEz7Jd1sqydWD4dTUWmpGw8Oj7PY0W.png

Curve Finance 在 Twitter 上宣布,Arbitrum上的一个资金池有可能受到影响,但没有可供恶意行为者执行的有利可图的漏洞,这意味着资金池不太可能受到攻击。CertiK也尚未检测到任何其他利用Vyper漏洞的攻击。

iqFUjHgxsKZF0Hw4cIndWFLBVQBC8VyjPCrNnDNk.png

攻击流程

以下是以JPEG’d为目标的交易示例:

攻击者: 0x6ec21d1868743a44318c3c259a6d4953f9978538

攻击合约: 0x466b85b49ec0c5c1eb402d5ea3c4b88864ea0f04#code

1 攻击者首先从 Balancer:Vault中借入80,000 WETH (约合149,371,300美元)

2 然后,攻击者将WETH 换成 ETH,调用 pETH-ETH-f.add_liquidity(),将 40,000 ETH(约合74,685,650美元)添加到 pETH-ETH-f 池中。作为回报,攻击者收到了32,431枚pETH(pETH-ETH-f)。

3 攻击者调用 remove_liquidity() 删除了在步骤2中添加的流动性。3,740 pETH 和 34,316 ETH 被转入攻击合约,攻击合约的 fallbak() 函数被触发了,将控制权交给了攻击者。在 fallback() 函数中,攻击者又向 pETH-ETH-f 池中添加了40,000 ETH的流动性,并收到了 82,182 pETH。

4 攻击者再次调用remove_liquidity(),取出10,272pETH,收到47,506 ETH和1,184pETH。然后,攻击者在pETH-ETH-f 池中用4,924枚 pETH交换了4,285枚ETH。

总的来说,攻击者从第3步获得了34,316枚ETH,从第4步获得了47,506和 4,285枚ETH,共计 86,107枚ETH。在偿还了 80,000 ETH闪电贷后,攻击者还剩下6,107 ETH(约11,395,506美元)。

漏洞

该漏洞允许攻击者在移除流动性过程中调用添加流动性函数。虽然这些函数本应受到 @nonreentrant(‘lock’)的保护,但对 add_liquidty() 和 remove_liquidity() 函数的测试证明,它并不能防止重入攻击。

HIhD33yKE94EHwUa7xkQhAzQRF4nscaJOwAPTOmK.png

Vyper_contract for Curve.fi Factory Pool 数据源: Etherscan

继利用 JPEG’d、Metronome 和 Alchemix 漏洞之后,Vyper 的 v0.2.15、v0.2.16 和 v0.3.0 版本确实存在重入保护失败的漏洞。

Mr3KDb2SKoLhF770OEWBAtdTuOYZ88tchEodweuv.png

解决措施

使用易受攻击的Vyper版本的项目应联系 Vyper协助进行缓解。项目也应尽量升级到不含此漏洞的最新版Vyper。

总结

Vyper被攻击事件是CertiK2023 年检测到的最大的重入漏洞。就资金损失而言,该攻击损失金额占据了此类事件的78.6%。

今年两起最大的重入漏洞,都是利用Vyper编写的合约,尽管漏洞并不相同。

目前,2023 年所有链中因重入攻击造成的损失已超过 6,600 万美元。这比 2020年全年多出约400万美元,仅比 2021年的损失额少100万美元。值得注意的是,2023年的总额也比 2022 年因重新定位攻击造成的损失增加了 259.45%。

Disclaimer: The information on this page may come from third parties and does not represent the views or opinions of Gate. The content displayed on this page is for reference only and does not constitute any financial, investment, or legal advice. Gate does not guarantee the accuracy or completeness of the information and shall not be liable for any losses arising from the use of this information. Virtual asset investments carry high risks and are subject to significant price volatility. You may lose all of your invested principal. Please fully understand the relevant risks and make prudent decisions based on your own financial situation and risk tolerance. For details, please refer to Disclaimer.
Commento
0/400
Nessun commento