您的位置:网站首页 > 数字资产资讯 > 正 文 比特币

NFT项目Akutars资金锁定事件简析

【作者:网文】 来源:转载 日期:2022-4-23 16:38:21 人气: 标签:世链NFT 慢雾 Akutars MLB gasLimit 【打印】

MLB 退役球员 Micah Johnson 创建的 NFT 项目 Akutars 拍卖合约由于多个代码缺陷导致 11539.5 枚 ETH 永久无法取出。以下为慢雾安全团队分析:

 

1. Akutars 拍卖合约中存在 bid 与 processRefunds 功能,用户分别可以进行拍卖出价与退款操作。

 

2. 在拍卖结束后发起 processRefunds 退款操作时拍卖合约将遍历出价用户,并通过低级调用 call 为用户进行退款,但并未限制这一调用的 gasLimit。而未做此 gasLimit 限制的情况下,拍卖合约将使用发起者的全部 gas 进行外部调用。

 

3. 但由于 Akutars 拍卖合约并不限制合约参与拍卖,因此「恶意用户」可以使用合约参与拍卖,并在其合约的接收以太函数中写入恶意消耗 gas 的逻辑,使得在进行退款流程时触发此用户合约,进而恶意消耗了调用发起者的全部 gas,直接导致后续退款无法正常进行。

 

4. 幸运的是此「恶意用户」仅仅只是做了风险验证测试,最终解除了恶意消耗 gas 的逻辑使得退款可以继续顺利进行。当然用户也可以在拍卖结束的 3 天后进行紧急退款。

 

5. 在用户退款完成后项目方可以通过 claimProjectFunds 功能提取合约中的拍卖所得。但拍卖合约在用户进行 bid 时使用 totalBids 与 bidIndex 记录用户所拍的数量与出价次数,而用户是可以在一次出价中任意选择所拍的数量的,因此在拍卖结束 totalBids 实际上大于 bidIndex。当前 totalBids 为 5495,bidIndex 仅为 3669。

 

6. 但在 claimProjectFunds 函数中却要求 refundProgress 退款数必须大于等于 totalBids,项目方本意应是为了保证全部用户完成退款后才可进行取款。而实际上 refundProgress 是根据出价人总数进行计算的,也就是全部退款完成 refundProgress 也只是会等于 bidIndex。这就出现了 refundProgress 永远不会大于 totalBids 的情况。最终导致合约中 11539.5 枚 ETH 永远无法取出。

 

综上,即使在用户无法退款问题被解决的情况下,由于出价人数与拍卖数量的计数不一致以及项目方取款函数的缺陷,最终都会导致 Akutars 资金被永久锁住的结果。

返回顶部】【关闭窗口 风险提示:本站分享转载的信息均来自互联网,且仅供阅读参考,不作为具体投资的依据,据此入市,风险自担。本站所有内容涉及到的“货币”字眼需谨慎研判,我们维护各国法币的合法地位,同时数字资产具有货币的某些属性,目前是不能替代任何国家的法定货币的,请谨慎理解投资并严格遵守各国法律法规!详见本站[免责声明]。】
【读完这篇文章后,可否发表您的感受?】
0
0
0
0
0
0
0
0
本文网址:
安全联盟站长平台 互联网举办平台 公共信息安全网监 中国网安 赛门铁克安全响应中心