原标题:《独家|灵踪安全:Pinecone被攻击事件分析》
作者:灵踪安全
8月19日,BSC上的收益聚合项目PineconeFinance的保险库受到黑客攻击,损失约350万没PCT代币。
截至写稿时为止,项目方已经针对此次攻击中受损的用户发布了补偿计划:项目团队及投资人共持有491万枚代币,将用所有代币补偿用户。
尽管此次攻击受损的金额相对近期动辄千万、上亿美元的金额不算太大,但这起攻击事件还是给我们留下了值得吸取的经验和教训。
这次攻击出现漏洞的地方在于转账过程使用的代币有损耗,而合约对这个损耗没有处理好于是就导致漏洞出现从而被黑客攻击。
在正常状况下,用户之间转账代币的时候,如果代币在转账过程中没有损耗,处理起来是比较简单的。但如果某些代币在转账过程中会出现损耗,则处理这类代币的转账就要非常小心了。
Gemini前高管推出Token化T-Bill保险库OpenEden:金色财经报道,Gemini 的前亚太区负责人Jeremy Ng 和亚太区业务发展负责人Eugene Ng推出了一家名为 OpenEden 的新加密初创公司,以提供 Token 化国库券 (T-Bills) 的敞口。OpenEden 于去年年初成立,今天推出了首款产品。该产品被称为 OpenEden T-Bill 保险库,让 USDC 稳定币持有者铸造 TBILL Token 并获得收益。[2023/4/4 13:43:13]
在Pinecone项目中,其代币PCT是作为资金池的质押代币,在其合约设计的代币转账过程中会有手续费的损耗。而项目将这个损耗计入了用户的份额中,于是用户份额和质押的PCT总额就会出现偏差。这个偏差就能被攻击者用来领取多余的奖励。
具体而言,本次攻击存在漏洞的合约有:
Yearn Finance不支持以太坊PoW分叉,旧版本的Yearn保险库许可功能存在风险:9月6日消息,Yearn Finance发布关于许可功能的安全公告,低于0.4.4版本的Yearn保险库具有许可功能,容易受到分叉网络中的重放攻击。Yearn不鼓励在其他分叉网络中的Yearn保险库中使用许可方法。
Yearn不打算在合并后支持任何以太坊工作量证明 (PoW) 分叉,并且不能保证除了官方支持的其他网络中的保险库的正确功能。如果之前在以太坊主网中使用过该功能,请使用该approve(spender, 0)功能重置permit限额,并使用一个非无限的到期期限。[2022/9/6 13:11:24]
PineconeFarm合约,其地址为:
0x4099f27fb72788b7bb5cb64e3d2b865eb82d0f8f
派盾:MCD Join ETH A保险库一周之内减少78.68万枚WETH:6月20日消息,据派盾预警监测,目前MCD Join ETH A保险库余额为51.45万枚WETH,一周之内减少78.68万枚WETH。Nexo在6月18日烧毁了约7340万枚DAI(约7330万美元)以在MakerDAO上取回44.6万枚WETH(约4.8亿美元)。[2022/6/20 4:40:02]
farm合约使用的策略合约IPineconeStrategy,其地址为:
0x1e542DB46eb87cc8E5fA8e1856eC53F89dc4bC89
PCT代币合约,其地址为:
0x6019384a802310117a6E889e7021d2d0A144fE50
漏洞涉及的相关代码片段为:
Coin Metrics联合创始人:Bitmex保险库有价值约20亿美元的比特币:10月2日凌晨,Coin Metrics联合创始人Nic Carter发推称,“Bitmex保险库里有价值约20亿美元的比特币(约19.3万枚BTC)。我们将在美东时间10月2日上午9点(北京时间晚上9点)知道其资金是否被冻结。”[2020/10/2]
PineconeToke的_transfer()函数:
在这里,PineconeToken的transferFrom的调用了_transfer()函数,在_transfer()中用户转账会收取手续费,因而实际到账的金额比transferFrom传入的amount值要小。
加拿大数字银行VersaBank将推出数字货币保险库服务:一家名为VersaBank的数字加拿大银行即将迎来两名用户,使用其加密货币保险库服务。该银行周一宣布,它已签署了两份谅解备忘录——一份是加密货币交易所,另一份是“加密货币基金”。Versa在一份声明中表示,MOUs的意图是“促进有关VersaVault提供托管服务的讨论,并基于安全沙盒进行引导。”[2018/3/20]
PineconeFarm合约的deposit()函数:
在上述代码中,PineconeFarm将存入的PCT质押到IPineconeStrategy合约中获取收益。通过使用BSC的vm?trace工具,可以发现这个IPineconeStrategy是一个VaultRabbitCake合约。PineconeFarm对用户份额share的计算会用到_wantAmt。而这个_wantAmt和下面的函数片段又有关联。
策略合约的deposit()函数
从上述代码可以看出,在计算sharesAdded时,其分母是wantTotal,而wantTotal依赖balance()。balance是关联的总锁仓PCT余额。由于实际的PCT余额小于deposit传入的金额_wantAmt,这就会造成用户份额在计算时增加了。
最后,当攻击者调用withdraw函数时,只要输入比deposit值大的参数就可以赎回超过质押数的PCT代币。
按照这个机制,黑客在攻击时,可以重复重复调用deposit和withdraw功能,从而导致合约质押的PCT损耗不断增加、资金池持有的PCT余额不断变小。然后在计算奖励时,由于使用资金池中的余额作为分母,而分母越小,则可额外领取的奖励就越多。
了解了代码的漏洞及相关机制后,我们再来看黑客诸多攻击中的一次攻击:
这次攻击中,黑客的地址为:0xfc6682db7e9f57882e8b18ebc9adc7a19f770494,其交易流程如下:
可以看出第一笔交易0xe446f质押了8.1万PCT,然后在0x76d33提取奖励时却提取了16万PCT。
我们继续查看withdraw交易的参数,可以看出传入amount值为22603495a2af5d0ccc34,将其转换为10进制数就是16万,远超质押金额8.1万。详细细节如下图所示:
从这次攻击的漏洞原因看,在转账时有损耗的代币在参与收益类项目时,存在较多的问题。因此灵踪安全提醒项目方要充分考虑损耗对收益计算的影响。
对此类问题,灵踪安全一直以来都会在审计时特别和项目方强调。另外我们也再次强调审计在项目中的重要性,希望项目方在项目上线前充分做好审计工作。
作者:
灵踪安全CEO谭粤飞
美国弗吉尼亚理工大学(VirginiaTech,Blacksburg,VA,USA)工业工程硕士(Master)。曾任美国硅谷半导体公司AIBTInc软件工程师,负责底层控制系统的开发、设备制程的程序实现、算法的设计,并负责与台积电的全面技术对接和交流。自2011至今,从事嵌入式,互联网及区块链技术的研究,深圳大学创业学院《区块链概论》课程教师,中山大学区块链与智能中心客座研究员,广东省金融创新研究会常务理事?。个人拥有4项区块链相关专利、3本出版著作。
8月20日消息,Swarm官方技术团队LeetSquad针对Swarm网络节点激励模型问题开发的插件网络解决方案Swarm/Nbzz在8月13日上线Goerli测试网络,由于其接入成本低.
1900/1/1 0:00:009月5日,YFI创始人AndreCronje宣布推出类Loot游戏Rarity,该游戏受Loot启发,共包含11种角色,玩家创造出角色后,可以在游戏内通过探险获得经验值XP.
1900/1/1 0:00:00作者:MarkXing"随着互联网计算机(ICP)的备受关注,大家又提起了WEB3.0。在近10年中有太多版本的描述。本文只讲述我心中的WEB3.0.
1900/1/1 0:00:00撰文:SimondelaRouviere,UntitledFrontier首席执行官编译:PerryWang一个好的故事会让你有所感触。如果对故事拥有所有权,会让这些情绪更加强烈.
1900/1/1 0:00:00巴比特讯,Rooter-Man是一家在北美拥有776多个服务点的管道、化粪池和下水道清洁特许经营商,全天候提供快速友好的管道服务,它与MyCryptoCheckout合作开发了一项试点计划.
1900/1/1 0:00:00巴比特讯,8月13日,艾瑞咨询发布《2021年中国第三方支付行业研究报告》。《报告》指出,新发布的备付金存管办法其实已经在为数字货币通过第三方支付兑换流通的方式做好了政策铺垫,而这一规定对应的业.
1900/1/1 0:00:00