CoinomiWalletが何故秘密鍵の流出をしてしまったか雑に検証する

f:id:serinuntius:20190228163123p:plain

事の発端

このツイートにより、GoogleのスペルチェックAPIによってニーモニックが流出してしまっているとのこと。

なぜそんなことが起こったか気になったので調べてみる

下記のCoinomiWalletの公式サイトからMac版をダウンロードする

www.coinomi.com

v1.0.5*1を本記事では検証しました。

f:id:serinuntius:20190228153426p:plain

Windows, Mac, Linuxと対応していたので、Electronを使っているのではないかと当たりをつけてました。

f:id:serinuntius:20190228153900p:plain

右クリック→パッケージの内容を表示 とすると、アプリのディレクトリが見れます。

f:id:serinuntius:20190228154130p:plain

ElectronではなくJavaだった!

coinomi-wallet-mac.jar をデコンパイルする

Javaだったのでデコンパイルする必要があります。

下記のデコンパイラを使用します。

jd.benow.ca

f:id:serinuntius:20190228154546p:plain

f:id:serinuntius:20190228154637p:plain

f:id:serinuntius:20190228154901p:plain chromium(Google Chromeのベース部分)で動いてそうなのが伺えます。

AppWindow.class を確認してみると SpellCheckerService というのが利用されてますが、 setEnabled(false) とスペルチェックをオフにしています。 OAuthWindow.class も同様にoffにされています。

f:id:serinuntius:20190228155357p:plain

あれ、offにされてるのに送信されるの?バグなの??

ここで冷静になる

Twitterで報告されるような脆弱性対応終わってないわけないでしょ。修正済みなのでは?」

と思って、公式Twitter見てみたら・・・

公式声明が出てました。

そらそうですよね。

公式声明まとめ

  • restore時のみスペルチェックが発動してもれる
  • GoogleAPIAPIキーが含まれておらず、正常には処理できていなかった
  • モバイルは大丈夫
  • もう修正済みで自動アプデされる

chromiumとjxBrowser

jxBrowserというjavachromiumラッパー(?)がちょうど1週間前にアップデートされています。

f:id:serinuntius:20190228160818p:plain

jxbrowser.support.teamdev.com

chromiumがデフォルトでGoogleAPIを利用して通信してしまうので、それをオフにできるような修正が入っていました。 セキュリティ要件等で厳しい時は、それをオフにするといいとのこと。

まとめ

  • CoinomiWalletのデスクトップ版のみこのバグがあったが既に修正済み(自動でアプデ配信されているようです)
  • chromium便利だけど、こういう時びっくり挙動があったりでびっくりする(かも)

*1:checksum: 39efb726c8993af435710be6fda4c9ab808f39b7601951168d3536979be649c0