2/26 上午,Tokenlon 团队收到 0x @willwarren89 的讯息如下:知名的白帽黑客 @Samczsun 宣称 Tokenlon 4.0 版本存在漏洞,此漏洞风险等级较高,不仅会影响到平台上沉淀的手续费安全,也会影响到用户资金安全。对此,Tokenlon 团队立即从这两个维度展开防御行动。
1. Tokenlon 团队立即将大额的手续费代币提领回财库,确保不会有沉淀手续费的损失。
2. 团队立即将指向 Tokenlon 4.0 的订单通过太极的私有网络發送,避免攻击者利用抢跑来产生破坏,避免攻击者可以利用抢跑,来构造收款方为攻击者地址的交易。
背景
Tokenlon 4.0 协议是基于 0x v2 协议的闪兑协议合约,借助 0x 协议完成币币原子兑换,并于 2019/4 上线。这次事件的主因,在于 Tokenlon 4.0 当中,存在不当处理签名的验证,导致攻击者可以利用 0x 协议中,註册 validator signature 的方法,将攻击者的地址设置为 UserProxy 的验签代理人。接着利用發起一笔交易订单,指定 maker 为 UserProxy,收款方为攻击者的地址,但因为攻击方已经将自己设置为 UserProxy 的代理验签者,也就顺利绕过签名检查,执行订单,将 UserProxy 自身累积的手续费当作交易的 maker asset 转给攻击者。
另外,4.0 协议针对 receiver 的字段没有进行签名,而是直接附加于使用者签名之后,导致攻击者可在用户發起交易后,抢跑并替换 receiver 的字段为攻击者的地址,而因为订单验签的部分已将代理给了攻击者的验签者,攻击者也就能成功的执行订单,获得用户兑换的代币。
影响
在进行综合检测及预防措施后,本次漏洞没有造成团队及用户损失。
下一步
Tokenlon 团队採取渐进的方式,通过一週的时间告知用户 4.0 即将关机,并于 3/4 日,将 Tokenlon 4.0 永久关闭。由于 Tokenlon 5.0 早于 2020/12/18 上线,且无上述漏洞,Tokenlon 4.0 的使用者也顺利迁移至 5.0。同时我们也将本次漏洞的披露告知我们的合约审计团队。
我们要再次感谢 @Samczsun 和 @willwarren89,谢谢他们在第一时间立即通报 Tokenlon 团队,让我们避免可能的损失。同时,谢谢 Sam 协助發现漏洞,我们将给予他 50000 USDT 的赏金。
最后,我们也要感谢社区的朋友,我们将提供赏金计画,来奖励發现漏洞的白帽与开發者。
时间表
2/26 03:35 (UTC) 早晨收到 @Samczsun 和 @willwarren89 的漏洞通知,并于当下立即提走大额手续费
03:51 中午确认提走 UserProxy 沉淀手续费的攻击可行性
04:40 下午研拟并发布 4.0 关机通知,同时对 4.0 合约进行监控
2/28, 04:00 下午确认攻击者抢跑用户订单的攻击可行性,并将用户订单全通过太极网路发送
3/4, 07:00 关闭 Tokenlon 4.0 服务