妄想まとめ

研究とかWebセキュとか時事ネタとか。 @kazu1130_h

CVE-2018-1000006に関して

結構致命的ながらあんまり騒がれてない気がしたので調べてみました。

影響のあるアプリ

  • Windowsで動く(Mac,Linux上で動いてるものは対象外)
  • setAsDefaultProtocolClientを呼び出している
  • 脆弱なバージョンのElectronを使って作られている

の、3点全てを満たすアプリ。

原理

ElectronのsetAsDefaultProtocolClientは、レジストリに以下の文字列を登録する。

 "(setしたElectronアプリのEXEファイルまでのパス)" "%1"

しかし、%1は単純に置換されるので、以下のようなカスタムURIスキームを踏ませればオプションを任意につけられる。

myapp://hoge" --no-sandbox 

そして、gpu-lancher等のような任意のプロセスを動かせるオプションを使ってcmd.exeを呼び出して任意のコードを動かす。

言ってみれば受動型任意コード実行みたいな感じ。

対策

雑記

これを動かすときは"がエンコードされずに渡されなければならないため、ブラウザが限定されます。
Electron内部からだとダメ。Firefoxもダメ。
Chromeは昨日配信のパッチを当てるとダメ。
唯一IEだけは"をエスケープせずにそのまま渡してくれるので優秀(?)。
よって、PoCを動かすときはIE推奨。
IEは他のブラウザと違ってちゃんとリンク先のアドレス(ここで言うhoge" --no-sandbox)まで含めた確認ウィンドウを出すが、実は長さ制限があるため、ひたすらスペースなりでごまかせば許可してくれる気がする。
特にSkypeのリンクがハメやすそう。


あと、あまり指摘されてない気がするけど、setAsDefaultProtocolClientしたプロトコルは明示的にremoveするまで残ります
なので、昔テストで動かしたアプリとかがそのまま残っていると、思わぬ所で発火する可能性があります。(packageしたelectron-api-demosとかはヤバいかも?)
日常使うものならともかく、一回起動させてテストしてそのまま、みたいなアプリがあると、普通に攻撃される可能性が高い。
起動させてからディレクトリを変えたりしてると発火しない(レジストリには起動時のパスが残るので)ものの、再度色々確認したほうが良いかも。
特にHKCU\Software\Classes\以下でURLが指定されてるもの。原理的にはElectron以外でも起こりえるし。