]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 705474 - CSRF vulnerability in createaccount.cgi allows possible unauthorized...
authorReed Loden <reed@reedloden.com>
Tue, 13 Dec 2011 22:26:45 +0000 (14:26 -0800)
committerReed Loden <reed@reedloden.com>
Tue, 13 Dec 2011 22:26:45 +0000 (14:26 -0800)
[r=mkanat a=mkanat]

Bugzilla/Token.pm
createaccount.cgi
template/en/default/account/create.html.tmpl

index 36b3b070f1a472dc1fd9105e67641069f291f500..a85dcc1f41b2b8c7c13d0f95dd32585b53c07d60 100644 (file)
@@ -176,9 +176,14 @@ sub issue_hash_token {
     $data ||= [];
     $time ||= time();
 
+    # For the user ID, use the actual ID if the user is logged in.
+    # Otherwise, use the remote IP, in case this is for something
+    # such as creating an account or logging in.
+    my $user_id = Bugzilla->user->id || remote_ip();
+
     # The concatenated string is of the form
-    # token creation time + site-wide secret + user ID + data
-    my @args = ($time, Bugzilla->localconfig->{'site_wide_secret'}, Bugzilla->user->id, @$data);
+    # token creation time + site-wide secret + user ID (either ID or remote IP) + data
+    my @args = ($time, Bugzilla->localconfig->{'site_wide_secret'}, $user_id, @$data);
 
     my $token = join('*', @args);
     # Wide characters cause md5_hex() to die.
index d0437a02113ffc2d957849e311d5a2caa5671ef3..90530b3c59d2dad1abce481607f22ada8720b056 100755 (executable)
@@ -62,6 +62,11 @@ unless ($createexp) {
 my $login = $cgi->param('login');
 
 if (defined($login)) {
+    # Check the hash token to make sure this user actually submitted
+    # the create account form.
+    my $token = $cgi->param('token');
+    check_hash_token($token, ['create_account']);
+
     $login = Bugzilla::User->check_login_name_for_creation($login);
     $vars->{'login'} = $login;
 
index bf273e459e5404296829e7936c59d7f6aefd86cc..a2a2e9fc6e593dd47e01692e9c6ff53921a8970c 100644 (file)
@@ -71,6 +71,7 @@
     </tr>
   </table>
   <br>
+  <input type="hidden" id="token" name="token" value="[% issue_hash_token(['create_account']) FILTER html %]">
   <input type="submit" id="send" value="Send">
 </form>