CoinomiWalletが何故秘密鍵の流出をしてしまったか雑に検証する
事の発端
このツイートにより、GoogleのスペルチェックAPIによってニーモニックが流出してしまっているとのこと。
SECURITY VULNERABILITY@CoinomiWallet sends your plain text seed phrase to Googles remote spellchecker API when you enter it! This is not a joke!
— Luke Childs (@lukechilds) February 27, 2019
Video attached for proof.
Credit goes to @warith2020 for finding the issue, read more from him here: https://t.co/tCZ0hDPyJ3 pic.twitter.com/hdaPOb84A9
なぜそんなことが起こったか気になったので調べてみる
下記のCoinomiWalletの公式サイトからMac版をダウンロードする
v1.0.5*1を本記事では検証しました。
Windows, Mac, Linuxと対応していたので、Electronを使っているのではないかと当たりをつけてました。
右クリック→パッケージの内容を表示
とすると、アプリのディレクトリが見れます。
ElectronではなくJavaだった!
coinomi-wallet-mac.jar をデコンパイルする
下記のデコンパイラを使用します。
chromium(Google Chromeのベース部分)で動いてそうなのが伺えます。
AppWindow.class
を確認してみると SpellCheckerService
というのが利用されてますが、 setEnabled(false)
とスペルチェックをオフにしています。
OAuthWindow.class
も同様にoffにされています。
あれ、offにされてるのに送信されるの?バグなの??
ここで冷静になる
「Twitterで報告されるような脆弱性対応終わってないわけないでしょ。修正済みなのでは?」
と思って、公式Twitter見てみたら・・・
Our official statement on the spell-check findings: https://t.co/o7Fmhn2FoI
— coinomi (@CoinomiWallet) February 27, 2019
公式声明が出てました。
そらそうですよね。
公式声明まとめ
chromiumとjxBrowser
jxBrowserというjavaのchromiumラッパー(?)がちょうど1週間前にアップデートされています。
chromiumがデフォルトでGoogleのAPIを利用して通信してしまうので、それをオフにできるような修正が入っていました。 セキュリティ要件等で厳しい時は、それをオフにするといいとのこと。
まとめ
- CoinomiWalletのデスクトップ版のみこのバグがあったが既に修正済み(自動でアプデ配信されているようです)
- chromium便利だけど、こういう時びっくり挙動があったりでびっくりする(かも)
*1:checksum: 39efb726c8993af435710be6fda4c9ab808f39b7601951168d3536979be649c0