# 利用OpenSea「漏洞」 攻击者低买高卖他人NFT

By [蜂巢Tech](https://paragraph.com/@tech-2) · 2022-01-25

---

![](https://storage.googleapis.com/papyrus_images/da878138c8f03fc81250392a6ff1147a9c024fa3938b5471d517bb89fe6ce7c5.png)

撰稿：茉莉

1月24日，OpenSea多名用户的NFT被人以过期的低价买入，并被快速高价转卖，受影响的NFT资产包括Bore Ape Yacht Club、CoolCats、CyberKongz等。其中一个Bore Ape Yacht Club 以0.77 ETH的旧价格被购买，并在一小时内以84.2 ETH转售。该NFT的持有者在推特上表示，他近期并未以0.77 ETH的价格出售该NFT。

交易页面显示，名为jpegdegenlove的 OpenSea 账号操作了这些低买高卖的NFT，截至1月25日凌晨，其以太坊钱包已经拥有价值超74万美元的ETH。

攻击者能够成功「狙击」别人的NFT，源于OpenSea的NFT「销售列表」取消功能被忽略。在这个全球最大的NFT交易平台上，NFT挂单者真正撤单必须支付Gas取消销售列表，否则挂单即便在前端UI不显示，链上也依然有效，仍能被人以原先的挂单价格在其他平台上购买。

DeFi开发者yakirrotem解释，攻击者可能保存了用户在早先挂售时的链上签名列表，该列表公开可见，能被API抓取，以过期低价购买用户的NFT。这个Bug一旦被攻击者利用，他人的NFT便会被收入囊中，进而转卖。

截至发稿前，OpenSea未就用户损失和「销售列表」的前端问题公开发表回应。

> **用户 NFT 以过期价遭攻击者低买高卖**

「OpenSea上的一个错误允许人们以旧价格购买Ape。这只Ape以 0.77 ETH的价格被购买，40 分钟后以 84.2 ETH 的价格转售。」1月24日，多条类似推文提示OpenSea用户，尽快将自己的NFT资产转移至从未在OpenSea上签名过NFT销售的钱包中。

![一枚Ape NFT以0.77 ETH被低吸后高卖](https://storage.googleapis.com/papyrus_images/8fef6c054945cf5a415af119bef9dbc2142ffb97cf0c3b5359491d39aa7c53b9.png)

一枚Ape NFT以0.77 ETH被低吸后高卖

被低价买入又转手高价卖出的NFT不仅涉及Bore Ape Yacht Club项目，还包括Mutant Ape Yacht Club、CyberKongz 和 Cool Cats 等NFT项目。

「伙计们，为什么我的 Ape 只卖 0.77 （ETH）？」推特用户T\_BALLER6正是受害者之一，他发布推文称，他近期并没有将这枚Ape 以 0.77 ETH的价格出售。

另一名维特名为ToastVirtual的NFT收藏家也称，周一醒来发现他的Ape以旧的挂单价格 6.66 ETH 被售出，「这只Ape 没有在钱包之间转移。」

从OpenSea交易记录页面可见，低吸高卖的账户名为jpegdegenlove，该账户在几个小时内不断以旧价格买入多个知名的NFT，然后又转手高价卖出。区块链安全机构 Peckshield 的相关推特公布了攻击者地址并提醒，OpenSea有一个前端问题，攻击者获得了大约332 ETH。按照事发当时ETH的报价2256美元，这些332 ETH折合约74万美元左右。

这些收藏家的NFT为何会被人以过期的低价买走？

有推特用户附图答疑称，OpenSea和另一个NFT交易平台Rarible之间存在一个问题，「如果你没有在OpenSea上正确地删除NFT挂单，这个问题就会被利用。」

答疑图片显示，如果卖家挂售一件NFT商品，后来决定删除挂单，那么正确的方式是支付一笔Gas费用来取消它，如果用户为了节省Gas费，只是简单地将NFT转移到一个不同的以太坊地址，尽管OpenSea的前端挂单不显示了，但当该NFT被发送回原始地址后，它仍然可以在Rarible上被购买。

OpenSea的这个「前端问题」事实上早已以答用户问的方式出现在其帮助中心的页面上。在「我如何取消或调低NFT清单的价格」一问中，OpenSea答复，「请注意，转移NFT不会自动取消清单。在将NFT转移到新的钱包之前，您要取消列表。这确保了该列表不能通过OpenSea实现……取消列表需要支付Gas费，这样才能使其他用户无法使用该NFT。」

如此看来，被人低价买走的NFT很可能是一些用户没有执行挂单取消操作，导致被攻击者利用。

> **如何在 OpenSea 避免「未撤单」疏漏？**

OpenSea「销售列表」取消功能留下的「空子」曾在去年12月底就有披露，此次规模性爆发后导致用户资产受损。

推特名为「yakirrotem」的DeFi开发者、NFT收藏家因此将OpenSea评价为NFT世界的「过时产品」，「它缓慢，用户体验糟糕，用的是旧的智能合约代码，这让你支付了更多的Gas费，对交易者没有好处，他们还有危险的Bug。」

yakirrotem罗列OpenSea的运行方式称，该平台为了节省Gas费，采用了链下呈现价格、链上操作签名交易的方式运行整个系统，「当你列出一个待售（或出价）的项目时，你签名的数据证明你愿意以这个价格出售你的NFT，而签名保存在OpenSea的链下数据库里。当有人想购买你的NFT时，他会发送给他的智能合约，但这一步的签名和销售信息是在链上进行验证的，然后才发生转让。」

yakirrotem强调，当用户取消一个列表时，会被要求执行一个交易，「你可能会问『为什么』，原因是（不这么做的话）有人可能保存你此前的签名清单，因为它是公共的，例如Rarible平台甚至OS API（都能抓取），并在以后使用它。即使你的挂单从UI页面上删除了，但其实上只有链上交易才会保存你取消该交易的事实，即便有人试图使用你之前签署的数据，链上验证也将拒绝该交易。」

此外，将先前挂单的NFT转移回列出它的钱包，也不会阻止这个错误的发生，「重新列出也帮不了你，除非你确保取消了所有之前的清单。」

![NFT收藏家图解OpenSea前端问题](https://storage.googleapis.com/papyrus_images/7bfb32c91802959af3d9798d36ccc251e00ef46eaf29973403432333325b9b46.png)

NFT收藏家图解OpenSea前端问题

「Rarible这样的网站会保存旧的列表，现在攻击者可以使用这些信息来执行销售，因为OpenSea的智能合约相信这个销售是有效的。」yakirrotem指出，OpenSea的另一个大问题是他们没有一次性的订单簿，「所以假如你6个月前创建了一个订单，然后在4个月前又创建了另一个订单，即便你在1天后取消了它，第一个订单仍然有效，尽管它在UI页面上不可见。」

此次「漏洞」造成用户NFT被攻击者「狙击」后，也有一些声音认为是用户自身保管NFT不当所致。而在yakirrotem看来，OpenSea的这些问题并非不可解决，因为另一家最近兴起的NFT交易平台LooksRare就支持用户一次性取消所有订单，「即使你不知何故忘记取列表，这也可以确保你（的资产）更安全。」

如何复查自己的NFT旧挂单是否执行了取消操作？

yakirrotem介绍，用户可以登录Rarible平台查看之前的列表是否还在，「然而，如果你想要100%的安全，那么就把你的NFT转移到另一个从未在OpenSea上架过的钱包里。」

（_声明：请读者严格遵守所在地法律法规，本文不代表任何投资建议_）

**互动时间：你是否注意到OpenSea有关取消订单的提示？**

**_蜂巢Tech/专注区块链深度报道_**

**_微信公众号：蜂巢Tech_**

**_Discord:_**[**_https://discord.gg/BhBknfHxtU_**](https://discord.gg/BhBknfHxtU)

**_Twitter：_**[**_twitter.com/HiveTechCN_**](http://twitter.com/HiveTechCN)

**_YouTube：_**[**_https://www.youtube.com/channel/UCcfH5WWorQbT4VlSJBcLSSg_**](https://www.youtube.com/channel/UCcfH5WWorQbT4VlSJBcLSSg)

**_Telegram：_**[**_t.me/HiveTech_**](http://t.me/HiveTechCN)

---

*Originally published on [蜂巢Tech](https://paragraph.com/@tech-2/opensea-nft)*
