Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

batchTransferでみつかった脆弱性を確かめる

BeautyChain (BEC)などに実装された batchTransfer に見つかったぜい弱性 CVE-2018-10299

medium.com

について試してみました。

f:id:pebble8888:20180429125640p:plain

remix で検証しました。

この 0x8000...0000 に2を掛けると、solidify のuint256実装では、桁あふれした分が差し引かれ、_amount が0になってしまうというぜい弱性のようです。

solidityの uint256 実装が修正されればいいと思っています。つまりoverflowしたら例外を発生させます。

オーバーフローをきちんと実装している言語としてswift4をあげておきます。
swift4 でUInt64を使ってオーバーフローさせた場合は、EXC_BAD_INSTRUCTION でクラッシュします。

f:id:pebble8888:20180429130321p:plain

swift4 でオーバーフローした分をあえて読み捨てる演算も定義されており、&* を使います。

f:id:pebble8888:20180429131713p:plain

swiftは安全性を第一に考えられているので、デフォルトでオーバーフローしたらクラッシュさせる実装になっているのです。

solidityのような通貨を直に扱うような言語でオーバーフロー例外の実装がされていない演算子がデフォルトになっている
こと自体にびっくりしました。