作者:郑凯鸿@NFTSCAN

近日Opensea(OS)出现了多个低价成交的头部项目,疑似挂单有bug被黑客攻击,黑客通过低价买到头部的NFT项目Bored Ape Yacht Club等等,再立马高价售出,以此获利数百ETH,以下为分析结果。

先看OS挂单逻辑:出售NFT时授权(授权完成以后OS的撮合合约可以调用用户地址的这个NFT)--》确定价格--》签名--》挂单完成。这时候签名信息会保存在OS的中心化服务器,并且会有API对外开放。

正常交易流程中,买方购买完后这个订单的签名信息就作废。

“被攻击”的情况中,用户在地址A下挂了一个价格为1ETH的NFT卖单,这时候可能会再把NFT转到地址B。后面NFT价格如果涨到了10ETH这个NFT再回到A地址,OS上这个NFT依然会以1ETH的挂单价出现(亲测确实会出现,但是用户可能不知道),这时候立马会被人购买,卖家会遭受巨大的差价损失。而买方可以立马转手卖出赚取差价,下面黑客地址就是,低价买入三个Bored Ape Yacht Club并立马卖出赚取了280ETH,约70万美金。



这个问题对NFT交易平台方有点棘手:OS把订单信息开放在了API中,公开透明,科学家可以通过API拿到订单信息。所以上文中的这个NFT一旦回到A地址,就存在被立马买走的风险。就算OS的功能立马调整,不再展示1ETH的卖单信息,又或者是直接从数据库删除order信息,都解决不了这个问题。

并且现在关闭API也解决不了这个问题,之前存量的挂单信息可以视为已经完全泄露。而且可以从OS界面用爬虫爬出order信息。所以只要准备足够充分,NFT再次回到A地址,黑客可以在任何地方以1ETH买走这个NFT。

当然平台可以在用户转走NFT的时候提醒cancel order,这个操作后将作废掉之前挂单的签名信息,但会上链消耗GAS Fee,挂单多次需取消多次。Opensea的撮合合约里也没有一次取消多个order的方法,这是其他OS竞品交易市场可以进行优化的功能。可以一键取消多个挂单,减少用户操作,不过GAS Fee肯定是少不了的。

平台提醒目前看来是一个比较简单快速的方式,但是是用户也可以在其他平台直接转走NFT。比如我在OS挂了个卖单,我也可以imToken、Looksrare、Mintverse等其他平台直接转走NFT。总结一下就是没法保证NFT挂单签名信息百分百和NFT转移一起失效。这个问题对NFT交易平台来说有点无解,不仅仅是OS,任何NFT交易平台都一样。除非是中心化的交易平台,所以对平台来说只能不断的提醒引导用户,提高用户风险意识。

对用户而言,如果知道这个漏洞后注意别再把NFT转回到之前的地址就没问题。不过这个行业用户知识水平参差不齐,转错ERC20到合约地址的情况都时有发生,NFT这个问题个人觉得后面也会一直有。也有用户在挂了卖单情况下去进行质押之类的操作,这种情况取回来只能到原地址。这种情况如果有价格差,肯定有被撸走的风险。如果有这种情况的用户,可用先取消掉授权,再取回NFT。

2022肯定还会出现一大批NFT交易市场,数据完整性,实时性,准确性;产品安全性,可用性,稳定性;肯定会成为未来NFT交易市场的竞争点。用户也需要提高安全意识,保管好自己宝贵的NFT。