操作
Bug(バグ) #3112
完了メールアドレス変更時のトークンチェックが正しくおこなわれない
開始日:
2012-07-09
期日:
進捗率:
0%
予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
説明
Overview (現象)¶
メールアドレス変更時にメールで通知されるURL(/member/configComplete)に含まれるトークンのチェックが機能しておらず、任意のトークン(空の値を含む)で処理が続行されてしまう。
メールアドレス変更後のメールアドレスが正当なものであるか(メールアドレスが存在し、メンバー自身がメール内容を読むことができるか)のチェックが機能していないことになり、メンバーが自身の登録メールアドレス情報を任意の値に変更できてしまうことが考えられる。
一方、他のメンバーのメールアドレスについては、パスワードを知らない前提では変更することはできない。(このため本バグはセキュリティイシューとしていない。)
トークンチェックの機能が実装された 3.0 開発中の時点から報告時点の最新版である 3.8.0 まで、問題となる部分のソースコードは変更されていないため、OpenPNE 3 の全バージョンでこの現象が発生するものと予想される。
Causes (原因)¶
member/configComplete アクションでのトークンチェックのための条件式が間違っており、リクエストURLに含まれるトークンの値によらず次の行へ処理が続行されてしまっているのが原因。
該当部分
$this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue());
- 3.8.0 時点 https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.0/lib/action/opMemberAction.class.php#L241
- 初期の開発時点 https://github.com/openpne/OpenPNE3/commit/49211457b4a2cf95e4c4c0313f375e9920216a86#L0R93
Way to fix (修正内容)¶
トークンチェックの条件式を正しいものに修正する。
3.6.4 ベースの修正パッチが以下になります。
--- a/lib/action/opMemberAction.class.php +++ b/lib/action/opMemberAction.class.php @@ -238,7 +238,7 @@ abstract class opMemberAction extends sfActions $memberConfig = Doctrine::getTable('MemberConfig')->retrieveByNameAndMemberId($type.'_token', $memberId); $this->forward404Unless($memberConfig); - $this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue()); + $this->forward404Unless($request->getParameter('token') === $memberConfig->getValue()); $option = array('member' => $memberConfig->getMember()); $this->form = new opPasswordForm(array(), $option);
Rimpei Ogawa さんが12年以上前に更新
- 担当者 を Rimpei Ogawa にセット
- 対象バージョン を OpenPNE 3.8.x から OpenPNE 3.9.0-old に変更
Rimpei Ogawa さんが12年以上前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 0cba16e8327c9a7fb8c6c901f1e933a5cdc47c08 で適用されました。
Yuya Watanabe さんが12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
操作