【复盘】TibetSwap V1 的漏洞
TibetSwap V1 的漏洞分析报告
作者:Yakuhito 2023年5月1日
发生了什么
13 点 57 分,fizpawiz 在 Keybase 上给我发了一条消息,详细说明了代码中可能存在的错误。不到 10 分钟后,我看到了这条消息,然后回到我的宿舍进行调查。在接下来的一个小时里,我确认了这个错误,选择了最好的行动方案(通知撤回+将包含代码的存储库设为私有),并与 jde5011 取得联系以寻求建议。
到 15:17,我们讨论了策略并设计了一条合适的推文。该通知于15:18发布。在 Chia 社区的共同努力下,消息迅速传播开来,一个小时内就撤回了 50% 的流动性。我密切监控提款,审查错误并帮助遇到问题的人。 发布通知后两小时,2/3 的流动性被撤回。 发布通知 24 小时后,协议中只剩下不到 1% 的资产。
漏洞是什么
该错误存在于单例对(pair singleton)和流动性 TAIL 之间的通信机制中。简而言之,两者通过每次铸币或销毁操作的两个公告进行交流。单例根据所需的操作(“铸造”或“销毁”)、CAT 的硬币 ID 以及被销毁或铸造的代币数量创建公告。然后TAIL 根据正在执行的操作创建一个公告——“铸币”或“销毁”。
虽然这种机制类似于 p2_singleton 使用的机制并且最初看起来很安全,但 fizpawiz 指出了一个严重的缺陷,所有公告中均未包含该单例的硬币 ID。因此,攻击者可以通过将单例对的两个版本“锁定”到同一 CAT 来两次消耗流动性。
继续前行
安全是 TibetSwap 的重中之重。虽然错误现在已修复,但我们认为最好的行动方案是至少返回测试网两周。
根据社区的建议,我们还启动了漏洞赏金计划!TibetSwap 的启动钱包 - (xch1yej80zwys9m2kkpch0ywltflxtdyprm2qfd0adwm8ur6qhhnex3qj0sknl)或 TibetSwap.xch - 将用于保存为支出预留的资金。该钱包已经包含 NameDAO 慷慨捐赠的 200 个 NAME 代币和我贡献的 10 个 XCH。社区可以为错误赏金捐赠更多资金——如果你发送了一些东西,请联系我,这样我就可以适当地感谢你!
致谢
首先,请花几秒钟时间对这条推文做出反应。fizpawiz 和 jde5011 都应该得到比他们得到的更多的荣誉,其他社区成员也是如此,他们出于善意为 TibetSwap V1 的发展做出了贡献,不期望任何回报。这些人都是英雄!
最后,我想通过感谢 Chia 社区来结束这篇文章。上周很疯狂。TibetSwap 上线两天就受到了热烈的欢迎,表现超出了我的预期。通知下发后,Chia社区对此表示理解。我真的很幸运能成为这样一个美妙社区的一员——谢谢!
现在请原谅,但我必须给我的宠物牦牛读这篇文章,以确保一切都很好
直到下一次,破解世界。
yakuhito,结束。
发表于 2023 年 5 月 1 日
V2 将在测试网上至少运行两周——您可以通过以下链接访问它:
https://v2-testnet10.tibetswap.io
我很高兴地宣布,我将加入 @PWA_Labs 的伟大团队,就从……今天开始!@MorganWBender & co 与@Storedotapp 一起做了很棒的产品 ,我真的很高兴能为一个未来而努力,在这个未来,Apple 和 Google 不会规定你可以在手机上安装什么。
Yaku同时宣布,加盟了PWA Labs团队,并将继续运营TibetSwap。
https://pwalabs.com/