batchOverflowとは何だったの?
4月の後半くらいに、batchOverflowという脆弱性が界隈で話題になりました。
Ethereum(イーサリアム)のスマートコントラクトに関する重大なバグが発見されたとのことで、仮想通貨取引所ではメンテナンスのため取引が一時停止されたりしました。
私自身はまだ勉強中なので素人目にですが、どんなものか調べてみたのでここにまとめてみます。
いつ見つかったの?
発端となったのは、4/22に掲載されたMediumの「New batchOverflow Bug in Multiple ERC20 Smart Contracts (CVE-2018–10299)」という記事のようです。
別記事で拙訳を作ってみたので、よろしければご参考ください。
どういう内容?
原文からすると、「batchTransferという関数の中にある積計算をするときに整数値のオーバーフローを起こすことで、大量のトークンを不正に取引できる」という内容のようです。
今回の脆弱性はERC20(日本語訳した記事の注2をご参照ください)そのもののバグではなく、Ethereum自体の不具合ではないようです。
ERC20というのに準拠したトークンのうち、batchTransferという関数が実装されたものが対象です。
解決策としては、オーバーフローが起きる計算をするときにエラーになるような処理にすることだそうです。
技術的な詳細に関しては参考に挙げた記事で尽きているかと思いますので、そちらに譲らせていただきます。
(参考)
・ERC20トークンに起きた脆弱性問題について (BatchOverFlow)(Gunosy Blockchain Blog)
・ERC20のバグと誤報されたBatchOverFlowを体験してみる(アルゴリズムとかオーダーとか)
仮想通貨取引所の対応
先日ワールドブックのβ版を公開したQUOINEX(コインエクスチェンジ)では、4/25-26時点で以下のような対応が実施されました。
【Ethereumスマートコントラクトでの重大なバグ発覚に伴う緊急措置について(1)】
— QUOINE Japan 公式 (@QUOINE_Japan) 2018年4月25日
本日ニュース等で報道されておりますとおり、Ethereumのスマートコントラクトで重大なバグが発見されておりますので、影響を鑑みて当社ではERC20ベースのQASHトークンの取引をすべて停止させていただきます。(続く)
【Ethereumスマートコントラクトでの重大なバグ発覚に伴う緊急措置について(2)】
— QUOINE Japan 公式 (@QUOINE_Japan) 2018年4月25日
ほかの仮想通貨の取引については引き続き可能です。
また、出金につきましては、日本円・仮想通貨すべてにおきまして、影響が出ないと判断できるまでは停止させていただきます。(続く)
【Ethereumスマートコントラクトでの重大なバグ発覚に伴う緊急措置について(3)】
— QUOINE Japan 公式 (@QUOINE_Japan) 2018年4月25日
再開目処が立ちましたら、再度ご連絡申し上げます。引き続き、どうぞよろしくお願い申し上げます。
【復旧のお知らせ】Ethereumスマートコントラクトでの重大なバグ発覚に伴う緊急措置について(1)
— QUOINE Japan 公式 (@QUOINE_Japan) 2018年4月26日
昨日ご案内しましたとおり、イーサリアムのスマートコントラクトにおけるバグの影響で一部サービスを止めておりましたが、先程QASHマーケットでの取引を再開いたしました。
【復旧のお知らせ】Ethereumスマートコントラクトでの重大なバグ発覚に伴う緊急措置について(2)
— QUOINE Japan 公式 (@QUOINE_Japan) 2018年4月26日
また、出金も順次再開いたします。
この度はご迷惑おかけし、申し訳ございませんでした。
引き続き、QUOINEXをご愛顧いただけますようお願い申し上げます。
まとめ
バグの内容としては、関数batchTransfer中の計算でオーバーフローを起こして不正なトークンを取引できるものです。
影響範囲はEthereumすべてではなく、batchTransferという関数が実装されたトークンに限るようなものでした。
大手取引所でも対応されているようですし、調べてみた感じだとイーサリアム自体や多くのトークンではあまり気にしなくてもよさそうです。