编者按:本文来自慢雾科技,Odaily星球日报授权转载。前言
据链闻消息,DeFi项目YFValue发布公告称,团队于昨日在YFV质押池中发现一个漏洞,恶意参与者借此漏洞对质押中的YFV计时器单独重置。目前已有一个恶意参与者正试图借此勒索团队。慢雾安全团队对此进行了深入分析,以下是相关技术细节。细节分析
以上是YFValue的官方说明(来源:https://medium.com/),从声明中我们可以得知是YFV抵押池出现了问题,恶意的用户可重置YFV抵押者的计时器,对YFV的抵押者造成不便,但这并不会导致资金损失。通过登陆YFValue的官方网站,(https://yfv.finance/staking),可以发现在YFValue的体系中,用户可通过质押相关的代币获取对应的奖励,目前YFValue支持的质押代币池有以下几个:
上海高院发布24条《意见》:促进区块链等新兴技术研发:2020年11月23日,上海市高级人民法院召开新闻发布会,通报《上海法院服务保障进一步扩大金融业对外开放若干意见》,此次发布的《意见》为中英文版,共24条,分四个部分,分别为进一步扩大金融业对外开放提供司法服务保障的总体要求、建立健全与进一步扩大金融业对外开放相适应的司法体制机制、加强相关纠纷案件审判执行工作以及充分发挥司法在金融业进一步扩大对外开放中的协同治理作用。《意见》还从打造金融审判创新试验区、支持金融科技开放创新、防范化解跨境金融风险等方面提出工作举措,提出促进大数据、人工智能、区块链、5G等新兴关键技术研发,保障金融科技市场公平竞争,推动技术创新与金融创新融合发展。[2020/11/23 21:47:39]
工信部研究员:建议重点布局区块链等新型应用技术的研发:4月6日,工业和信息化部中国信息通信研究院肖荣美、霍鹏在《长沙大学学报》上发表文章《以工业互联网为关键抓手推动制造业产业链现代化》。文章指出,建议系统布局基础技术、共性技术和融合技术的研发及产业化,重点是依托产业园区、产业联盟、创新中心、开源社区等市场化创新载体,引导产业链各方协同开展基础软件、核心芯片、操作系统等基础共性技术,以及人工智能、大数据、区块链、数字孪生、边缘计算等基础性技术和新型应用技术的研发,夯实产业链现代化的技术支撑能力。[2020/4/6]
可以看到,目前由于漏洞的原因,YFV的抵押池已经在UI界面关闭了抵押功能,但是合约上目前还没关闭代币抵押的功能,我们需要跟踪代码来分析具体的细节点。根据官网提供的Github地址,我们溯源到了相关的代码仓库(https://github.com/yfv-finance/audit),关于YFV抵押的相关逻辑在YFV_Stake.sol合约中,合约中关于抵押的函数有2个,分别是stake函数和stakeOnBehalf函数,以下是具体的代码:
经济参考报:北京、上海、深圳等地加快区块链等关键技术研发:经济参考报刊文称,近日,北京、上海、深圳等地密集展开部署,加快大数据、人工智能、区块链等金融科技关键技术研发,提升金融科技应用水平。多地还提出加大财政、金融等资金支持力度,以“真金白银”促进金融科技产业集聚。[2020/3/26]
通过代码不难发现,无论是stake函数还是stakeOnBehalf函数,逻辑基本是一样的,首先是校验了抵押金额不能为0,接着分别调用上层的tokenStake和tokenStakeOnBehalf函数。紧接着更新用户的抵押时间。只不过stakeOnBehalf函数可以用于为他人抵押。tokenStake和tokenStakeOnBehalf的代码如下:
声音 | 新网银行行长赵卫星:运用区块链技术为更好地进行数据化监控:金融界消息,近日,新网银行行长赵卫星在采访中讲述该行在促进网贷平台合规运营上的更深一层探索,他说:“除了按照监管要求保障资金安全,我们现在还在做一个前瞻性工作,将存管数据运行区块链底层上,并在未来跟监管系统打通。其实这就是为了将来更好地数据化监控。”[2018/9/22]
可以看到这里只是简单的把对应的token用transferFrom的方式转入到合约中,没有什么特别的逻辑点。到这里整个抵押流程就很清晰了,接下来是收益的过程。计算用户收益的是stakeReward函数,领取收益的为withdraw函数,代码分别如下:
通过分析计算收益和领取收益的代码,发现逻辑也很简单,stake函数首先是通过updateReward修饰器更新了用户的奖励,然后使用getReward函数计算了用户的奖励,并把抵押时间设置成当前区块时间。最后,用户在提取奖励的时候,withdraw函数会首先计算当前的区块时间,再与unfrozenStakeTime函数中计算出的时间进行对比,只有当前区块时间大于unfrozenStakeTime计算出的时间,才允许提现。unfrozenStakeTime的代码如下:
从代码中得知,unfrozenStakeTime是使用用户的上次抵押时间加上FROZEN_STAKING_TIME常量得出锁定时间,只要超过时间,就能通过withdraw函数提现收益。整个抵押和领取收益的简化流程如下:
分析了一大堆,回到我们最初的问题,恶意的用户是怎么锁定其他用户的资产的呢?回到用户抵押的逻辑,可以发现抵押逻辑中的stakeOnBehalf函数本意是帮助进行抵押,但是这里有个问题,如果这个用户先前已经有抵押了呢?那通过对已经抵押的用户再次进行抵押,比方说抵押1个YFV,是不是就能以极低的成本重置已抵押的用户的计时器,导致用户在withdraw时无法成功调用。更进一步,假设YFV抵押用户已经成功调用了stakeReward函数,在快要达到unfrozenStakeTime所规定的时间时,恶意的用户可以通过stakeOnBehalf函数给这个用户抵押少量资产,即可再次对抵押奖励进行锁定,理论上这样往复循环,即可使用户无法取出自己的资产,但这个问题并不会导致资金损失。攻击流程如下:
前车之鉴
这是本月出现的第二个没有经过审计的DeFi项目所暴露出的风险,根据YFValue的官方声明(https://medium.com/),项目代码是由富有经验的开发者进行开发的,同时借鉴了其他成功的项目的代码,但是仍无可避免的出现了风险。术业有专攻,安全审计一方面需要项目方的正向思维,另一方面,还是需要专业的安全团队的逆向思维,从专业的黑客角度进行模拟对抗,发现问题。修复方案
通过分析代码和漏洞细节,针对本次漏洞,修复方案也很简单,只要在抵押的时候检查用户的抵押状态是否为已经抵押,如果已经抵押,则不允许再次抵押。或者对每次的抵押进行单独的处理,不能对先前的抵押状态产生影响。
标签:STAKSTASTAKENSTWrapped Staked USDTOuro StablecoinWrapped Staked USDTConstitutionDAO
编者按:本文来自风火轮社区,作者:佩佩,Odaily星球日报经授权转载。大家好,我是佩佩,如果说怎样发掘财富代码,我现阶段的能力未必干的过kol,但要说怎样在币圈这个大生态中扮演好一个消(jie.
1900/1/1 0:00:008月3日,中国人民银行召开2020年下半年工作电视会议,总结上半年各项工作,分析经济金融形势,对下半年重点工作作出部署。会议提到法定数字货币封闭试点顺利启动.
1900/1/1 0:00:00编者按:本文来自区块律动BlockBeats,作者:0x40,Odaily星球日报经授权转载。在近期预言机板块、DeFi动辄几倍的拉盘下,跨链板块的声音弱了许多.
1900/1/1 0:00:00编者按:本文来自蜂巢财经News,作者:凯尔,Odaily星球日报经授权转载。流动性挖矿点燃DeFi烈火,火势烧到去中心化交易所Uniswap.
1900/1/1 0:00:001跨链是啥局域网大家都清楚,要跨过局域网就得会爬墙,爬墙就得有梯子,这梯子就是跨。区块链就是一个个的局域网,也是分开的,有墙.
1900/1/1 0:00:00我看上去像一个有计划的人吗?我只是一只追车的狗,一旦追上了,却也不知道能干什么。——《蝙蝠侠之暗夜骑士》万卉在一场直播中形容AndreCronje是一个特别极客的人,两年多的时间内,很多人怂恿他.
1900/1/1 0:00:00