据慢雾区,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。
6. claimProjectFunds函数要求refundProgress退款数必须大于等于totalBids,项目方本意是保证全部用户完成退款后才可取款。而refundProgress根据出价人总数计算。这就出现refundProgress永远不会大于totalBids的情况。最终导致合约中11,539.5枚ETH永远无法取出。
即使在用户无法退款问题被解决的情况下,由于出价人数与拍卖数量的计数不一致以及项目方取款函数的缺陷,最终都会导致Akutars资金被永久锁住的结果。
Gate.io - 芝麻交易所,又称芝麻开门交易所,是原比特儿交易所国际版本,是全球第二大交易所 支持人民币OTC交易 让财富更自由一点
文章采集自互联网,本站不对其真实性负责,如需删除,请发送链接至oem1012@qq.com
发表评论
电子邮件地址不会被公开。 必填项已用*标注
文章评论已关闭!