BeautyChain (BEC)などに実装された batchTransfer に見つかったぜい弱性 CVE-2018-10299
について試してみました。
remix で検証しました。
この 0x8000...0000 に2を掛けると、solidify のuint256実装では、桁あふれした分が差し引かれ、_amount が0になってしまうというぜい弱性のようです。
solidityの uint256 実装が修正されればいいと思っています。つまりoverflowしたら例外を発生させます。
オーバーフローをきちんと実装している言語としてswift4をあげておきます。
swift4 でUInt64を使ってオーバーフローさせた場合は、EXC_BAD_INSTRUCTION でクラッシュします。
swift4 でオーバーフローした分をあえて読み捨てる演算も定義されており、&* を使います。
swiftは安全性を第一に考えられているので、デフォルトでオーバーフローしたらクラッシュさせる実装になっているのです。
solidityのような通貨を直に扱うような言語でオーバーフロー例外の実装がされていない演算子がデフォルトになっている
こと自体にびっくりしました。