【重要】見てるなう(仮)セキュリティ脆弱性について
公開から2ヶ月が経過し、多くの方にご愛用いただいている「見てるなう(仮)」にセキュリティ脆弱性があると、ユーザーである @ww24 様より攻撃コードと共にご報告を受けました。
私の方で調査いたしましたところ、「見てるなう(仮)」ユーザーが悪意のあるページで見てるなうをした場合、ユーザーのアクセストークンが抜き取られ、ユーザーが意図しないツイートを攻撃者によって投稿されてしまう可能性があることが判明いたしました。
この攻撃は JavaScript の window.open 関数をオーバーライドして、 window.open 関数に渡った引数と生成された Window オブジェクトへの参照をコピーします。 挙動は通常の window.open と変わりがないため、 window.open がオーバーライドされていることの検出は難しいものと思います。
なお、この攻撃は投稿画面をブックマークレットによって直接表示しているすべての「見てるなう(仮)」類似サードパーティ製サービス(閲覧中のウェブページを Twitter へ投稿するサービス)にも同様の影響を与えます。 私が調査した3種類の類似サービスでも投稿ページのアドレスを抜き取り、ウィルス配布ページやフィッシング詐欺ページなどの攻撃者の任意のページを Twitter に投稿できることを確認いたしました。
この度私が施した対策は以下の流れによって行われます。
- window.open によってワンタイムトークン生成ページを開き、ワンタイムトークンを発行する。 有効期限は10分間。 トークンは、発行元のドメインに対してのみ有効である。
- ワンタイムトークンの認証符号を HMAC-SHA1 によって計算する。 この際の鍵ブックマークレット生成時に発行した秘密鍵とする。
- 認証符号と共に投稿ページを呼び出す
- 投稿時、サーバーに保存されている秘密鍵によって計算された正しいワンタイムトークンの認証符号と送られてきた認証符号を照合する
- 照合の結果一致した場合にのみ Twitter への投稿をする
- 一致した場合でも一致しなかった場合でも発行されたワンタイムトークンを無効化する
この修正の影響によって、すでにご利用いただいているユーザーには、ブックマークレットの交換をお願いしております。
交換の方法は、古いブックマークレットを破棄して頂いた後、「見てるなう(仮)」にログインしていただき、表示されるブックマークレットをブックマークバーにドラッグアンドドロップしていただくことです。
この度はご迷惑をお掛けし誠に申し訳ありません。 何卒よろしくお願いいたします