欢迎来到夏洛克的漏洞聚焦!每周,我们都会重点介绍我们的研究人员在 Sherlock 审计期间发现的一个有影响力的漏洞。
本周我们因配置错误而出现了过度提款。
它是由 @bin2chen、@TheCHADuke、iglyx、@tapired、@xiaoming9090 和 @0xleastwood 在 @NotionalFinance V3 竞赛中发现的。

如果当前余额为 999,900 USDC,而 withdrawAmountExternal 为 1,000,000 USDC,那么合约中的余额不足,需要从货币市场(例如,Compound)提取额外资金。

由于合同已经拥有999,900 USDC,因此只需从货币市场额外提取100 USDC,以满足1,000,000 USDC的提款请求。
然而,Notional并没有从货币市场提取100 USDC,而是根据oracle.getRedemptionCalldata(withdrawAmountExternal)函数从市场提取了1,000,000 USDC。因此,从货币市场提取了多余的999,900 USDC。
这有什么影响?
这导致了大量资产在 Notional 中闲置,未能在货币市场中产生任何回报或利息,这导致用户的收益显著下降,因为他们获得的利率低于预期,并且遭受了机会损失。
攻击者可能会利用这一点提取Notional在货币市场中投资的资金,从而导致协议的损失和巨大的收益/利息损失。
修复:
基本上,在修复之前,代码对预言机说的是:"准备从货币市场提取用户想要的所有资金。"
而它应该说的是:"只提取我们在货币市场上缺少的部分。"

修复后,对于之前的例子,合约已经持有的999,900 USDC保持不变,继续赚取收益,提高效率,并为所有用户保留回报。
这个漏洞源于在计算和传递提款金额时的一个微妙逻辑缺陷。由于忽视了合约的现有余额,系统不必要地从货币市场提取了过多的资金,导致资本效率低下和收益损失。
我们为通过这一发现帮助确保Notional的安全而感到自豪。当绝对需要安全时,Sherlock是正确的选择。
2,807
35
本页面内容由第三方提供。除非另有说明,欧易不是所引用文章的作者,也不对此类材料主张任何版权。该内容仅供参考,并不代表欧易观点,不作为任何形式的认可,也不应被视为投资建议或购买或出售数字资产的招揽。在使用生成式人工智能提供摘要或其他信息的情况下,此类人工智能生成的内容可能不准确或不一致。请阅读链接文章,了解更多详情和信息。欧易不对第三方网站上的内容负责。包含稳定币、NFTs 等在内的数字资产涉及较高程度的风险,其价值可能会产生较大波动。请根据自身财务状况,仔细考虑交易或持有数字资产是否适合您。