noteにあったバグ
2018年11月の頭までnoteにセキュリティ上のバグがあった。
上手く使えば他のユーザーのアカウントを奪取することができた。
今は報告して修正してもらった。
**メールアドレスの変更確認リンクでのCSRF**
スクショ動画↓
メールアドレスの変更方法に問題があった。
当時の仕様では、ユーザーが https://note.mu/settings/account の「メールアドレス 変更」から「新しいメールアドレス」を入力・送信すると、そこで入力したメールアドレスに「メールアドレスの確認」メールが送信され、ユーザーがそのメールに記載されたリンク(https://note.mu/update_email?token= ~)を踏むことで、メールアドレスの変更するという仕組みだった。
ここで送信される「メールアドレスの確認」メールに問題があった。
2人のユーザー、A(攻撃者)、B(標的)を仮定すると、修正前はユーザーAが「メールアドレス 変更」によって取得した「メールアドレスの確認」メールに記載されたリンクを、ユーザーBがログイン中に踏んだ場合、ユーザーAではなく、ユーザーBのメールアドレスが変更されてしまう仕様だった。
(変更先は「新しいメールアドレス」でAが指定したメールアドレス)
この仕様と「パスワードを忘れた方」ページ(https://note.mu/reset_password)のパスワードリセットの機能を利用することによって、ユーザーAの立場の人物が、ユーザーBにあたる人物のメールアドレスとパスワードを奪うことができ、アカウントを奪取することができた。
現在は以下の方法で対応されている。
- メールアドレス変更確認のページで画面にパスワード入力を求めること
- メールアドレス変更者以外がメールアドレス変更確認ページのURLを開こうとすると、「ご指定のページが見つかりません。」の表記が出てメールアドレスは変更できないこと
**ログイン画面でのリダレクトによるXSS**
ログインページの?redirectPathにjavascriptスキームを指定することでXSSができた。ログイン成功後JavaScriptが発火した。
https://note.mu/login?redirectPath=javascript:alert(document.cookie)
また単純に、フォームに入力されたメールアドレスとパスワードを奪うことができた。
いくつか使えない文字があったので、任意のJavaScriptを実行するためには以下のように関数でJavaScript文字列を組み立て、evalを使う必要があった。
上記の内容をまず伝え修正してもらったが、修正後もdata: スキームでXSSをすることができた。追加で報告して直してもらった。
今回はじめて知ったが、data: スキームでのXSSは現在主要なブラウザの最新バージョンでは動かないらしい。
このdata: でのXSSを見つけたとき手元のSafariではXSSが動いたが、それもちょうどmacOSのアップデートをしたら使えなくなった。
data: スキームでのXSSは初めてだったので勉強になった。
この記事が気に入ったらサポートをしてみませんか?