AirSwap智能合约漏洞详解:用户资产可被攻击者恶意吃单?
漏洞影响概述
PeckShield 在此提醒,由于这一漏洞可使用户的资产被攻击者恶意偷盗,受此次影响的账号一共有 18 个,其中有部分账号有数万至数十万美元的资产,这些账号需要尽快完成升级,或与 AirSwap 团队联系。
ItchySwap 漏洞详解
在分析之前,为方便起见,我们先定义几个概念:
1. maker:出售资产的一方;
3. order: maker 与 taker 之间发生资产交割的订单;
4. Indexer: AirSwap 中的订单簿,汇聚了当前正在出售及需要购买的资产信息。
下图说明了maker、taker 和 Indexer 之间的交互流程:
AirSwap 是一个基于 Ethereum 的点对点去中心化交易所,它集成了 Swap Protocol ,在其中作为一个自动托管服务,允许交易的双方(即 maker 和 taker)在以太坊上安全地交易任何资产。与许多去中心化交易所不同,AirSwap 虽然没有对资金进行托管控制,但仍然有一个用于匹配目的的集中式订单簿,它实现了一个用于交易和订单匹配的完全对等模型。
特别值得一提的是,有一个名为 Indexer 的链下服务,可以聚合来自 maker 和 taker 的交易意图,然后为他们提供匹配的服务。特别是,一旦 taker 找到了合适的 maker,他们就会开始进行场外价格的谈判。一旦达成协议,订单将由 Taker 通过 Swap Protocol 在链上进行填充和资产交割。
在 AirSwap 智能合约中, taker 将订单上链及资产交割的过程在 AirSwap swap(Types.Order calldata _order) 函数之中,这一函数实现如下所示:
1)验证订单有效性
订单 order 参数有效性检查,这些信息均由 taker 上链的时候指定的,也意味着这些信息都可以由 taker 篡改,具体包含:
1. 订单还在有效期内;
3. 订单还没有被取消;
4. 订单的 nonce 大于最小值;
5. 设置订单状态为 TAKEN 状态。
2)验证 taker 信息
3)验证 maker 信息
验证 maker 的有效性,这里的验证分为两种情况考虑:
2. order 中指定了 maker 的签名信息:验证签名的有效性。
二、Wrapper 合约
在上述的 AirSwap 合约中,用户通过 swap() 函数执行资产互换,这一流程非常清晰,没有问题。但是这一合约存在一点不完美的地方,用户只能通过 Token 进行资产互换,无法直接用 ETH 平台币参与其中。用户可以先把 ETH 转换成 WETH, 再用 WETH 参与互换,但无论如何,用户使用体验上多了一步。
为了降低用户使用体验上的摩擦,AirSwap 团队与 2019年09月12日 推出了 Wrapper 合约,其使用是自动将用户转入的 ETH 转换成 WETH 之后再参与资产互换的过程,其关键流程如下:
1. 验证 swap() 发起方与 taker 是相同的;
3. 直接调用 AirSwap 合约的 swap() 操作。
考虑到一种特殊的场景,Alice 希望通过 Wrapper 合约执行 AirSwap 资产互换,这一过程需要先由 Alice 自行在 AirSwap 合约中授权 Wrapper 合约,以允许 Wrapper 合约可以执行各自的资产交割流程。
由于区块链的透明性,Eve 看到了 Alice 的授权操作,那么他就可以向 Wrapper 合约发起一笔恶意的订单,其包含的内容如下:
1. order 中的有效时间、nonce 为一个非常大的数值;
3. order 中的 taker 为空;
4. order 的 signature 为空。
将上述构造好的 order 代入AirSwap 的 swap() 函数,其中 1,2 两步的验证由于是 taker 控制的,不会有问题,我们重点看下第三步验证 maker 信息:
由于此时 AirSwap 合约是由 Wrapper 合约调用的,那么 msg.sender 即 Wrapper 合约的地址,前文讲到,Wrapper 合约是经过 Alice 授权可直接控制 Alice 的资产,此时虽然 Eve 没有权限操作 Alice 的资产,但此时可以通过 Wrapper 控制,也就间接地控制了 Alice 的资产。
安全规避
任何的代码在上线生产环境之前都应当得到充分的测试和验证,特别是承载着用户价值的 DEX 平台。在产品增加新特性之时,一定要考虑到旧特性的兼容性与安全,新特性的引入不应该触发旧产品中设计不完备的地方。
AirSwap 官方漏洞细节(原文)链接: https://medium.com/fluidity/critical-vulnerability-in-a-new-airswap-smart-contract-c1204e04d7d3