LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > AirSwap智能合约漏洞详解:用户资产可被攻击者恶意吃单?

AirSwap智能合约漏洞详解:用户资产可被攻击者恶意吃单?

2019-12-10 权力的制约 来源:区块链网络
AirSwap智能合约漏洞详解:用户资产可被攻击者恶意吃单?

?

2019年09月13日 AirSwap 团队公布了一个 AirSwap 智能合约中存在致命的漏洞,这一漏洞可以使得用户的资产在某些情况下被对手恶意吃单『偷盗』,PeckShield 安全人员独立分析了该漏洞,并与AirSwap团队沟通了细节和修复方案。

?

?

漏洞影响概述

PeckShield 安全人员深入分析 AirSwap 智能合约后发现,这一漏洞只对最近上线的 Wrapper 有影响,AirSwap 团队在发现该问题后第一时间下线当前合约,并将 AirSwap ?网站回退到之前使用的合约,从合约上线到问题修复整个过程仅持续了 24小时,可见 AirSwap 团队对于合约安全的重视程度之高。

PeckShield 安全人员独立分析了漏洞细节,并与 AirSwap 团队沟通细节和修复的方案, 同时将该漏洞命名为“?ItchySwap”。

PeckShield 在此提醒,由于这一漏洞可使用户的资产被攻击者恶意偷盗,受此次影响的账号一共有 18 个,其中有部分账号有数万至数十万美元的资产,这些账号需要尽快完成升级,或与 AirSwap 团队联系。

ItchySwap?漏洞详解

一、AirSwap 合约

在分析之前,为方便起见,我们先定义几个概念:

1. maker:出售资产的一方;

2. taker:购买资产的一方;

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. 订单还在有效期内;

2. 订单还没有被其它的 taker 吃单;

3. 订单还没有被取消;

4. 订单的 nonce 大于最小值;

5. 设置订单状态为 TAKEN 状态。

2)验证 taker 信息

?

确立有效的 taker,根据 order 中指定或者等同于合约的调用方 msg.sender。

3)验证 maker 信息

?

验证 maker 的有效性,这里的验证分为两种情况考虑:

1. 没有 maker 签名的订单:需要保证 msg.sender 有权限操作这个 maker 地址即可,即这笔 order 发起者有权限操作 maker 的资产;

2. order 中指定了 maker 的签名信息:验证签名的有效性。

4)?资产交割

?

如果上述的验证流程没有问题,那么直接执行 maker 和 taker 的资产交割。

二、Wrapper 合约

在上述的 AirSwap 合约中,用户通过 swap() 函数执行资产互换,这一流程非常清晰,没有问题。但是这一合约存在一点不完美的地方,用户只能通过 Token 进行资产互换,无法直接用 ETH 平台币参与其中。用户可以先把 ETH 转换成 WETH, 再用 WETH 参与互换,但无论如何,用户使用体验上多了一步。

为了降低用户使用体验上的摩擦,AirSwap 团队与 2019年09月12日?推出了 ?Wrapper 合约,其使用是自动将用户转入的 ETH 转换成 WETH 之后再参与资产互换的过程,其关键流程如下:

?

1. 验证 swap() 发起方与 taker 是相同的;

2. 如果用户发起 swap() 有携带了 ETH 资产,并且需要转换的 token 为 WETH, 那么就自动将 ETH 转换成 WETH;

3. 直接调用 AirSwap 合约的 swap() 操作。

考虑到一种特殊的场景,Alice 希望通过 Wrapper 合约执行 AirSwap 资产互换,这一过程需要先由 Alice 自行在 AirSwap 合约中授权 Wrapper 合约,以允许 Wrapper 合约可以执行各自的资产交割流程。

由于区块链的透明性,Eve 看到了 Alice 的授权操作,那么他就可以向 Wrapper 合约发起一笔恶意的订单,其包含的内容如下:

1. ?order 中的有效时间、nonce 为一个非常大的数值;

2. order 中的 maker 对应的账号为 Alice 的账号;

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 的资产。

?

安全规避

PeckShield 安全人员分析发现,截止至 2019年09月28日为止,共有 6 个账号执行了 revoke() 操作,以解除对 Wrapper 合约的授权,还有 12 个账号存在安全风险,这剩下的所有账号应当立即执行 revoke() 操作,或者将账号中的资产转移至未对 Wrapper 授权过的安全账号。

任何的代码在上线生产环境之前都应当得到充分的测试和验证,特别是承载着用户价值的 DEX 平台。在产品增加新特性之时,一定要考虑到旧特性的兼容性与安全,新特性的引入不应该触发旧产品中设计不完备的地方。

附录

?

备注:AirSwap 官方漏洞细节(原文)链接:https://medium.com/fluidity/critical-vulnerability-in-a-new-airswap-smart-contract-c1204e04d7d3??
大盘持续小幅震荡,主流币还有机会吗?10月4号行情分析

今日白晓说

最近有份报告分析称,“爱西欧”将于2020年完全消失,报告里跟踪网站icowatch的项目流,其个数由18年100个降到19年基本为零,资金流由之前的76亿美元降到今年的3.38亿美元,降幅高达95%,曾经风靡一时的爱西欧终究没落,爱西欧当初成就了包括以太为主的众多币种,它的消失又会造成怎样的影响呢?

行情分析

BTC:

?

BTC近两天经过小幅反弹后,多方积攒的动能被释放,整体行情再次转向偏空。8500是一个强压力位,也是斐波那锲回调线的反弹强阻力,也就是说只要反弹不突破8500,那么之前的下跌趋势就不会反转。前两天BTC数次尝试突破8500都无功而返,四小时来看随着时间的推移走势逐渐向下偏移,可以分析出后市延续下跌趋势的可能性大一点。

下面来看下今天的盘面,四小时价格从布林上通道运行到布林下通道,MACD在零轴附近形成死叉。短期行情进一步走弱,后续跌破8000去测试下方7700支撑是大概率的。操作上等待这次回调到了7500左右可以入个底仓,然后每跌1000刀补1成仓,慢慢将持仓价调整到一个较低的点位。真正的大底往往很难预测,只能在相对较低的价位慢慢吸筹,近期现货没有什么机会,空仓休息为主。压力位8500,支撑7700。

ETH:

?

ETH四小时的走势在形成一个M顶后跌破了上升通道,后期大概率会走弱,一般破位后会出现一个反弹确认形态,手上还有持仓的可以在这次反弹到上升通道处分批出一部分。压力位180,支撑164。

EOS:

?

eos小时级别来看价格从布林下通道运行到布林上通道,并且呈放量趋势,四小时一直没有跌破上升通道,手上还持有的在不跌破2.8的情况下再拿两天,看看能否站稳3.0之上,没有介入的暂时不建议介入,后续如果能站稳3.0白晓会找点位提示大家介入。压力位3.0,支撑2.8。

BCH:

?

BCH11月有分叉利好,每次分叉前一般会提前一个月开始预热,白晓认为下方还有回调空间,但防止踏空我们可以在目前的价格找个低点进个底仓,以后即使回调也可以在低位分批补仓,200左右的太子已经算一个不错的点位。压力位235,支撑200。

XRP:MACD在零轴附近反复钝化,多空方在这个点位争夺胶着,白晓一直不提倡在压力位附近建仓入场,除非四小时放量上涨,不然不介入。压力位0.26,支撑0.24。

LTC:从四小时线来看,macd上攻零轴受阻,柱线逐渐缩短,短期虽然在反弹,但趋势还是看跌,后期大概率还是会向下调整,操作上不建议介入。压力位58,支撑位51。

—-

编译者/作者:权力的制约

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...