长推:技术复盘Curve被攻击的过程

互联网 阅读 1129 2023-08-03 10:22:00

注:本文来自@Yang1127LI 推特,MarsBit整理如下:

简单看了下Curve被攻击的过程和相关代码, 来做一个简单的技术向复盘.

(适合新手学习整个过程) #Curve #Reentrancy #DeFi

PS: 除了最初的学习阶段, 我从来不使用也不会建议别人使用Vyper, 它的开发者人数远少于Solidity, 少了很多去踩坑和验证这个语言特性的开发者, 也少了很多社区的支持.

哪些池子被攻击了, 原因是什么?

主要是 alETH, msETH, pETH等池子, 它们被攻击的原因都是同一个, 使用了特定几个版本的Vyper编译器, 在Reentrancy Guard(防重入)功能上出现了问题, 导致了被重入攻击.

(使用了0.2.15版本Vyper的Curve Pool)

https://twitter.com/vyperlang/status/1685692973051498497

攻击流程

以alETH为例, 攻击交易为https://explorer.phalcon.xyz/tx/eth/0xb676d789bb8b66a08105c844a49c2bcffb400e5c1cfabd4bc30cca4bff3c9801…

可以看到, 攻击者部署了一个用于攻击的智能合约, 利用Balancer的闪电贷获取本金(40000ETH), 通过若干次add_liquidity和remove_liquidity的调用获得了攻击收益(~22M USD).

CURVE

攻击细节1

其中的重入攻击发生在第一次调用remove_liquidity函数时.

被重入的remove_liquidity函数代码如图.

在图中, 26行是移除流动性过程中给用户发送ETH的逻辑, 而41~43行更新用户的LP Token余额以及totalSupply都是在这个操作之后.

这就是常见的被重入攻击的代码特点: 先转账后更新状态.

CURVE

攻击细节2

接下来重入调用的add_liquidity函数如下图.

攻击者在remove liquidity中途给他发送15146个ETH时, 用fallback函数重入调用add liquidity函数, 此时因为total supply还没有更新, 导致37行处应该mint给用户的LP Token的数量计算变大了, 也就是这次他用20000个ETH得到了34277个LP Token.

CURVE

攻击细节3

之后他便可以用多出的很多LP Token去正常地移除流动性, 拿到超出正常的ETH数量.

之后还掉闪电贷之后 获利 7258 WETH + 4821 alETH

CURVE

Vyper的重入锁

这里虽然Curve的代码写法有潜在的重入风险, 但被攻击的原因还是Vyper的重入锁问题.

Vyper重入锁的实现原理: 在某个storage slot存入一个value, 函数执行时会检该值是否为1, 如果没有就把它设置为1. 这是一个很常见的重入锁的实现.

例如Curve中就是用"lock"来代表这个slot

CURVE

CURVE

Vyper重入锁的漏洞

Curve的add/remove liquidity函数的重入锁中都用了"lock"来代表他们想共用一个重入锁.

但Vyper的重入锁在某些版本中, 每次都会移动到一个新的slot中, 而不会判断他们是否想使用同一个slot(左侧50行).

在图中的commit里面, 右侧42~43行修复了这一操作, 添加了同名检查

CURVE

受影响的编译器版本: v0.2.15 ~ v0.3.0

这个漏洞在v0.3.1中被修复 (修复时间 2021.10.25)

https://github.com/vyperlang/vyper/commit/eae0eaf86eb462746e4867352126f6c1dd43302f

但是被影响的Curve Pool的代码却一直没有发现自己中间隐藏的问题

总结1

Curve Pool对于重入锁的使用思路是正常的, 但是对于语言中对于重入锁的具体实现是否完成了自己预想的功能并没有充分地检查. 这样的问题在测试中是可以被发现的.

预想的功能为: 防止add/remove liquidity函数之间的相互重入, 那么测试一定要覆盖这个场景. 并不会存在想不到的问题

总结2

Vyper有没有问题, 肯定是有的, 重入锁实现中出现这样的错误可以算是一个低级错误了.

另外因为重入锁是内嵌在Vyper语言特性中, 并通过@修饰词来调用的, 也会让开发者经常忽略了这些修饰器内部实现是否正确(在传统编程里面同样问题, 但不会直接导致丢钱).

总结3

Curve Pool的部署模式是每个池子有自己的合约, 他们使用的Vyper版本也会随着时间而变化.

这不同于UniswapV2中最常见的工厂合约模式, 所有Pool都有相同的代码和版本.

另外池子无法被暂停, 也无法升级, 在保证不可篡改的同时也丢失了灵活性.

最后观点: 不是唱衰Vyper, 也不是说智能合约只能有一种编程语言.

而是:

1)对于新手学习以及要上线的项目来说, 选择最大众的开发语言永远是更好的.

2)在DeFi这样的对于合约安全性是第一要务的编程场景来讲, 一个相对于主流语言基本带来不了本质提升的编程语言是没有存在的必要的.

最后, 还在学习Vyper, 以及支持在DeFi中使用Vyper的, 很想听到大家为什么还会使用它.

像Python">WTF is the usage of these features?

免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:长推:也许DeFi生态也需要一个类似IMF的DAO组织 下一篇:ICP没落的原因:特立独行的技术与冷清单薄的生态

您可能感兴趣

  • 解读CKB版 “闪电网络” Fiber Network:比特币可编程性扩展的另一种思路
    解读CKB版 “闪电网络” Fiber Network:比特币可编程性扩展的另一种思路

    作者:NingNing行业周期与宏观金融周期共振,加密行业正处在与 2019 年相似的整体性迷茫之中,现阶段不仅流动性枯竭,叙事貌似也在枯竭。市场不但对 VC 叙事兴趣阙如,对反 VC 的 Meme 叙事也已经疲倦。就像每次哲学危机,人们都会回归柏拉图寻找出路,当加密行业危机时,我们也需要回归比特币、回归中本聪。正如 CKB 生态 RGB++ 协议创始人 Cipher 在最新 Blog 里所阐述的,加密行业需要对以太坊 “链上计算” 的路径依赖进行反思,回归P2P经济学,让计算归于链下,让验证归于链上。因

    每日资讯 2024-09-02 12:06 1271
  • 面对NFL球员工会起诉,“退圈”的DraftKings竟主动承认NFT是证券?
    面对NFL球员工会起诉,“退圈”的DraftKings竟主动承认NFT是证券?

    作者:Zen,PANews近日,美国国家橄榄球联盟球员协会 (NFLPA) 指控数字体育娱乐和游戏公司DraftKings 逃避了其 NFT 球员许可协议的付款义务。在放弃NFT业务后,涉嫌出售未注册证券而遭到集体诉讼的DraftKings又背上了一起官司。而有趣的是,在与NFLPA的纠纷中,DraftKings的立场似乎已从反驳转变为积极承认“NFT就是证券”。放弃NFT业务:驳回集体诉讼的动议遭到否决今年7月底,Draftkings在给用户的电子邮件中表示:“经过慎重考虑,DraftKings 决定终

    每日资讯 2024-09-02 12:06 1383
  • 简析两种最新比特币智能合约实现方案:OP_NET与Arch有何区别?
    简析两种最新比特币智能合约实现方案:OP_NET与Arch有何区别?

    作者:Cookie过去半个月,OP_NET 与 Arch 这两个比特币主网上的智能合约实现方案引发了较多的讨论。有意思的事情是,OP_NET 这个名字与大家熟悉的 OP_CAT 很像,都以「OP_」开头,具有很强的、让大家认为这哥俩差不多的迷惑性。所以,在开篇要和大家先提一嘴 OP_CAT。首先,OP_CAT 是比特币操作码,从去年开始有以「量子猫」Quantum Cats,也就是「大巫师」Taproot Wizards 的创始人 Udi Wertheimer 为首的社区力量一直在呼喊要「复活」OP_CA

    每日资讯 2024-09-02 12:06 1285
  • 争议不断,以太坊正在失去“万链之王”的权威
    争议不断,以太坊正在失去“万链之王”的权威

    作者:Climber,金色财经近期围绕以太坊的话题和争议越来越多,不仅 Vitalik 本人需要下场解释观点,就连以太坊基金会也要发布公告来平息社区的质疑声。在本轮牛市周期中,以太坊的表现可谓平平。而美国以太坊现货 ETF 的通过也并未让 ETH 走势如投资者期待般爆发,相反却在币价方面越走越低。这就不免让有着「万链之王」美誉的以太坊逐渐失去投资者和社区的尊重,进而质疑起有关以太坊的方方面面。争议不断,以太坊亟需重塑权威最近一段时间以来社区成员对 Vitalik 言论观点、以太坊基金会乃至以太坊生态系统的

    每日资讯 2024-09-02 12:06 978
  • 从《黑神话:悟空》谈起,GameFi何时能取得真经?
    从《黑神话:悟空》谈起,GameFi何时能取得真经?

    作者:YBB Capital Researcher Zeke前言本文是市场垃圾时间中的一些闲聊,需要对传统游戏市场有一定程度了解。大家可以把这篇文章当作日记或者随想观看,这些只是我在游玩《黑神话:悟空》之后对GameFi的一些粗浅思考,以及对这个赛道未来的看法。一、游戏科学的九九八十一难三天全网销量破千万、Steam玩家同时在线峰值破235万、多家品牌联名周边销售爆火、国家级媒体多次采访、多个游戏取景地可凭游戏通关记录终身免费进入、86版《西游记》YouTube观看量超400万。以上,是《黑神话:悟空》上

    每日资讯 2024-09-02 12:06 674
  • Gavin Wood:如何防止女巫攻击进行有效空投?
    Gavin Wood:如何防止女巫攻击进行有效空投?

    演讲:Gavin WoodGavin 近期一直在关注的女巫攻击(civil resistance)的问题,PolkaWorld 回顾了 Gavin Wood 博士在 Polkadot Decoded 2024 上的主题演讲,想要探究 Gavin 在如何防止女巫攻击上的一些见解。什么是女巫攻击?你们可能知道,我一直在研究一些项目,我在编写灰皮书,专注于 JAM 项目,也在这个方向上做了一些代码的工作。实际上,在过去的两年时间里,我一直在思考一个非常关键的问题,这个问题在这个领域中非常重要,那就是如何防止女巫

    每日资讯 2024-09-02 12:06 1226
  • 市场热议,链抽象将成加密新叙事?
    市场热议,链抽象将成加密新叙事?

    2024年,加密货币领域的技术创新持续加速,链抽象(Chain Abstraction)逐渐成为行业内的焦点。链抽象技术的核心在于通过隐藏底层技术的复杂性,让用户能够更加便捷地在多个区块链之间进行操作。传统的区块链技术通常要求用户掌握不同链的操作流程,并需要应对跨链操作中的技术难题,这极大地吸引了新用户的进入。而链抽象的出现,则为这些问题提供了有效的解决方案,成为Web3建设不可忽视的重要一环。01、什么是链抽象及其作用链抽象能够将不同的区块链之间的差异整合在一个统一的操作界面中,使得用户只需一个账户即可

    每日资讯 2024-09-02 12:05 521
  • 今日日报|马斯克和特斯拉赢得“被指控操纵狗狗币”的诉讼;稳定币支付平台Bridge完成5800万美元融资
    今日日报|马斯克和特斯拉赢得“被指控操纵狗狗币”的诉讼;稳定币支付平台Bridge完成5800万美元融资

    今日要闻提示:马斯克和特斯拉赢得驳回指控他们操纵狗狗币的诉讼OpenAI和Anthropic已同意将其主要新AI模型在发布前共享给美国政府OKX将上线Hamster Kombat(HMSTR)现货交易X平台纽约总部将于9月13日关闭,预计将迁往得州萨尔瓦多总统布克尔成为《时代》杂志最新一期封面人物稳定币支付公司Bridge完成5800万美元融资数据:MATIC、SHIB、UNI代币头部地址持仓均超50%网龙今年上半年通过出售2.9亿元的加密货币,获利5100万元人民币监管消息美国众议院计划在9月举行多场加

    每日资讯 2024-09-02 12:05 1026