AkuDreamsと呼ばれるNFTプロジェクトは、 スマートコントラクト のバグを悪用した攻撃に遭い、その結果、3400万ドルに相当するETHがスマートコントラクトから引き出せなくなりました。コーディングのエラーは死活問題になりかねないので、最新の注意を払い、十分な監査や懸賞金プログラムなどの仕組みも考慮するべきでしょう。
返金可能なオークション機能を狙ったグリーフ攻撃
今回のNFT販売では、ダッチオークションが用いられました。このオークションでは、ユーザーは入札時に資金を振り込む必要があり、その後、ダッチオークション価格が入札価格を下回った場合、返金を請求することができるという仕組みでした。
$34 million, or 11,539 eth, is permanently locked into the AkuDreams contract forever. It cannot be retrieved by individual users or by the dev team.
— foobar (@0xfoobar) April 23, 2022
The refund processing, which is complete, sets each bid status to 1. pic.twitter.com/6GnQPnddC6
しかし、返金ロジックにバグがあり、それをハッカーが悪用したため、ユーザーは返金の手続きができず、チームは資金を引き出すことができなくなってしまいました。このような攻撃は「グリーフ攻撃」(Griefing attacks)と呼ばれていて、ハッカーが実際に利益を得ることはないのですが、ユーザーとプロジェクトが被害を受けることになります。
通常のハッキング被害は取り返しのつかない問題になるのですが、今回は、ブロックチェーン上にデベロッパーチームへの警告を示した後、ハッカーはこのロックを解除したおかげで、また返金ができるようになりました。
20/ A summary
— 0xInuarashi (@0xInuarashi) April 23, 2022
Exploit 1: processRefunds() able to get stuck
Exploit 2: bids count did not increment correctly with mint amount
Exploit 3: withdraw requires bids count to increment correctly
Final Caveat: funds stuck forever.
このままこの事件は終わるかに思えましたが、ここでさらなる悲劇が起こります。
今度は別のエラーで返金に関わるコードにミスがあることが発覚し、それによりまた返金が行われなくなってしまいました。そして再度、資金がスマートコントラクト内にロックアップされるという事態になってしまう始末。
このロックアップは、ハッカーが関与していないところでおこったため、スマートコントラクトに残っている3400万ドル相当のETHにユーザーも、そして、デベロッパーもアクセスできなくなってしまいました。
この資金にどうアクセスするか検討しているようですが、どうやらこの3400万ドル相当のETHにはもう誰もアクセスできないようです。
メタバース弁護士の見解
NFTに限らずスマートコントラクトを用いるプロジェクトを立ち上げる際には、コードのバグやセキュリティを脅かす脆弱性がないかをチェックすることが大切です。
例えば、スマートコントラクトをリリースする前に、第三者の監査会社の助けを借りて、スマートコントラクトのエクスプロイトを探すことは有効な手段です。また、バグを報告してもらえるように懸賞金制度(bug bounty program)を設定するのもいいでしょう。
多くの注目を集めるNFTプロジェクトであれば、ユーザーからの期待が大きく、計画通りにキャンペーンを開始しないといけないというプレッシャーもあるでしょう。しかし、技術面での見落としはプロジェクトの命取りになるので、スマートコントラクトのバグやセキュリティに関しては最新の注意を向けるようにしてください。
参考記事:Smart contract mistake locks up $34 million of ETH for NFT project