]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 706271: CSRF vulnerability in token.cgi allows possible unauthorized password...
authorFrédéric Buclin <LpSolit@gmail.com>
Mon, 6 Aug 2012 21:41:47 +0000 (23:41 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 6 Aug 2012 21:41:47 +0000 (23:41 +0200)
r=reed a=LpSolit

template/en/default/account/auth/login-small.html.tmpl
template/en/default/account/auth/login.html.tmpl
token.cgi

index c922e94ac867cc3b52bad63c2a64f2c83d8a54ff..19269ea49711053826b3639764e7988e9f84caa3 100644 (file)
@@ -20,8 +20,8 @@
   [% IF cgi.request_method == "GET" AND cgi.query_string %]
     [% connector = "&" %]
   [% END %]
-  [% script_name = login_target _ connector _ "GoAheadAndLogIn=1" %]
-  <a id="login_link[% qs_suffix %]" href="[% script_name FILTER html %]"
+  [% script_url = login_target _ connector _ "GoAheadAndLogIn=1" %]
+  <a id="login_link[% qs_suffix %]" href="[% script_url FILTER html %]"
      onclick="return show_mini_login_form('[% qs_suffix %]')">Log In</a>
 
   [% Hook.process('additional_methods') %]
@@ -98,7 +98,7 @@
 </li>
 <li id="forgot_container[% qs_suffix %]">
   <span class="separator">| </span>
-  <a id="forgot_link[% qs_suffix %]" href="[% script_name FILTER html %]#forgot"
+  <a id="forgot_link[% qs_suffix %]" href="[% script_url FILTER html %]#forgot"
      onclick="return show_forgot_form('[% qs_suffix %]')">Forgot Password</a>
   <form action="token.cgi" method="post" id="forgot_form[% qs_suffix %]"
         class="mini_forgot bz_default_hidden">
     <input id="forgot_button[% qs_suffix %]" value="Reset Password" 
            type="submit">
     <input type="hidden" name="a" value="reqpw">
+    <input type="hidden" id="token" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
     <a href="#" onclick="return hide_forgot_form('[% qs_suffix %]')">[x]</a>
   </form>
 </li>
index d0a0ef87186368134dc54a3d7d01976cc358dd54..0a8a3d3b8fcb1f6825aec6c347a595454f12ca68 100644 (file)
       enter your login name below and submit a request
       to change your password.<br>
       <input size="35" name="loginname">
+      <input type="hidden" id="token" name="token" value="[% issue_hash_token(['reqpw']) FILTER html %]">
       <input type="submit" id="request" value="Reset Password">
     </form>
   [% END %]
index d5ebad78df4c7525b4b76353eba5af5d3e51de54..62f1f51210aa5dd1b0c037f1f208d1c1418261d0 100755 (executable)
--- a/token.cgi
+++ b/token.cgi
@@ -114,6 +114,11 @@ sub requestChangePassword {
     Bugzilla->user->authorizer->can_change_password
       || ThrowUserError("password_change_requests_not_allowed");
 
+    # Check the hash token to make sure this user actually submitted
+    # the forgotten password form.
+    my $token = $cgi->param('token');
+    check_hash_token($token, ['reqpw']);
+
     my $login_name = $cgi->param('loginname')
       or ThrowUserError("login_needed_for_password_change");