作者:张改娟
昨日,DeFi 借贷协议 bZx 年内第三次遭到攻击,由于代码重复事故导致共计损失价值超 800 万的资产,这距离 BZx 新版本部署仅不到两周。受此影响,bZx 代币 BZRX 过去 24 小时跌近 30%,从 0.6679USDT 一度跌至 0.4 USDT,发文时暂报 0.44USDT。
BZRX 30 分钟 K 线图,来源:币安
与此同时,bZx 锁仓量较昨日暴跌 99.71%,几乎归零,目前仅为 176 美元。
北京时间 9 月 14 日下午 3 点半左右,bZx 发现其协议总锁定价值(TVL)出现显著下降。大约 3 小时后 bZx 确认多个 iToken 发生了重复事故,即 iToken 合约中的_internalTransferFrom() 函数出现异常行为,攻击者利用了相同的_from 和_to 地址调用了传输函数。确认问题后 bZx 随即暂停了放贷操作。
bZx 表示,目前该函数异常行为已被修复,协议也已恢复正常运行。借款和交易未受到影响,用户不会受到资金风险。bZx 也已部署了新版本的 iToken 合约,并针对重复事故重设了余额。修复后的代码已发送给区块链安全公司 Peckshield 和 Certik 进行审查。目前 iToken 的铸造和销毁已恢复。
bZx 披露的信息显示,此次重复事故发生后已将以下债务添加至其保险基金中,包括近 22 万 LINK、4502ETH、175.64 万 USDT、141.20 万 USDC、以及 66.80 万 DAI,按当前价格计算,总价值逾 800 万美元,具体如下:
针对 bZx 协议被攻击一事,Bitcoin.com 首席工程师 Marc Thelan 表示,昨晚其在 bZx 中发现了该漏洞,有价值超过 2000 万美元的资产处于危险之中。Marc Thelan 称其将该漏洞告知了 bZx 团队,但该团队反应过于缓慢。等到 bZx 团队获悉该漏洞时,攻击者几乎已经耗尽了 Dai 和 USDC 资产。如果攻击者有更多时间,可能会耗尽整个池子。bZx 的一位创始人在电报群中表示,团队安全小组建议给 Marc Thelan 1.25 万美元的赏金。
1inch 联合创始人 Anton Bukon 此前也发现了该漏洞,其表示,「我们发现有人在两天前就利用该漏洞将自己的余额增加到 1.536 亿枚 iUSDT,并开始从 USDT 池中转走,直到 bZx 协议管理员销毁了 1.519 亿枚 iUSDT,这表明似乎有 170 万 USDT 被盗。」
关于 bZx 协议管理员销毁 iUSDT 一事,以太坊开发人员 Roman Semenov 解释称,bZx 协议管理员使用了一个允许其销毁任何用户资金的后门,然后将代币的实现状态更新为未经验证。在销毁一些涉及攻击的用户资金后,他们再次将其更新为漏洞修复后的正常实现。
bZx 进一步解释称,该协议此前已经过区块链安全公司 Peckshield 及 Certik 的安全审计,并进行了大量的自动化测试,但通过审计并不能确保协议 100% 安全。Peckshield 及 Certik 正在分析此次事件的根本原因。
事实上,这并不是 bZx 协议首次受到攻击。今年 2 月中旬,bZx 协议曾两次受到攻击,共计损失价值逾 90 多万的资产。当月中旬,bZx 联合创始人 Kyle Kistner 表示,「部分 ETH 已损失,此次事件是因为一个合约被利用导致的,其他资金是安全的。」业内人士估测,此次损失金额约为 35 万美元。
3 天后(2 月 18 日),bZx 再次受到攻击。bZx 表示又发现了一次使用闪电贷进行的可疑交易,攻击者后续使用了 Synthetix 交易,不过没有影响到 Synthetix 系统。
除 bZx 之外,近期随着 DeFi 热度的大幅提升,安全问题成为了 DeFi 行业的最大挑战。据 PeckShield 数据显示,八月共发生安全事件 28 起,其中 DeFi 市场就发生了 8 起。
正因如此,去中心化保险的市场需求应运而生。Nexus Mutual Tracker 数据显示,截至目前,去中心化保险 Nexus Mutual 的有效保额突破了 2 亿美元,较之两个月前,该数值已经增长逾 20 倍。
而在过去短短的 24 小时左右时间里,该数据就大涨 130%,今日 bZx 的安全事故显然成为了去中心化保险「大跃进式」增长的重要催化剂。
去中心化保险 Nexus Mutual 的有效保额,来源:Nexus Mutual Tracker
可以想象,随着 DeFi 市场的持续发展,去中心化保险、预言机等细分市场有望继续保持增长势头。
根据 bZx 发布的漏洞 报告,此次事件发生后的团队所采取的进展以及技术细节如下:
此次 iToken 重复事故正是攻击者利用了相同的_from 和_to 地址调用了传输函数。
有误的代码
当_from 和_to 地址相同时,会导致_balancesFrom 和_balancesTo 相等。
有误的代码
上述问题导致再减少_balancesFrom 余额的情况下增加了_balancesTo 的余额,并且还保存了_balancesFromNew 和_balancesToNew,这会导致用户能够人为地增加自己的余额。
修复后的代码在 balances[_from] 余额减少后,会进行 balancesTo 余额的转移,从而防止用户人为增加自己的余额。
修复后的代码
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:前沿金融科技精英读物
评论0条