操作
Backport(バックポート) #3128
完了メールアドレス変更時のトークンチェックが正しくおこなわれない
開始日:
2012-07-09
期日:
進捗率:
100%
予定工数:
説明
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);
操作