]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 913904: (CVE-2013-1734) [SECURITY] CSRF when updating attachments
authorFrédéric Buclin <LpSolit@gmail.com>
Wed, 16 Oct 2013 17:10:42 +0000 (19:10 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Wed, 16 Oct 2013 17:10:42 +0000 (19:10 +0200)
r=dkl a=sgreen

attachment.cgi
template/en/default/global/code-error.html.tmpl

index 47077f1278df13a5387e363abf1fa01996ec3015..2706cde24668ee530fcd2d741e7208350c1ee8a7 100755 (executable)
@@ -676,20 +676,23 @@ sub update {
         $attachment->set_filename(scalar $cgi->param('filename'));
 
         # Now make sure the attachment has not been edited since we loaded the page.
-        if (defined $cgi->param('delta_ts')
-            && $cgi->param('delta_ts') ne $attachment->modification_time)
-        {
-            ($vars->{'operations'}) =
-                Bugzilla::Bug::GetBugActivity($bug->id, $attachment->id, $cgi->param('delta_ts'));
+        my $delta_ts = $cgi->param('delta_ts');
+        my $modification_time = $attachment->modification_time;
 
-            # The token contains the old modification_time. We need a new one.
-            $cgi->param('token', issue_hash_token([$attachment->id, $attachment->modification_time]));
+        if ($delta_ts && $delta_ts ne $modification_time) {
+            datetime_from($delta_ts)
+              or ThrowCodeError('invalid_timestamp', { timestamp => $delta_ts });
+            ($vars->{'operations'}) =
+              Bugzilla::Bug::GetBugActivity($bug->id, $attachment->id, $delta_ts);
 
             # If the modification date changed but there is no entry in
             # the activity table, this means someone commented only.
             # In this case, there is no reason to midair.
             if (scalar(@{$vars->{'operations'}})) {
-                $cgi->param('delta_ts', $attachment->modification_time);
+                $cgi->param('delta_ts', $modification_time);
+                # The token contains the old modification_time. We need a new one.
+                $cgi->param('token', issue_hash_token([$attachment->id, $modification_time]));
+
                 $vars->{'attachment'} = $attachment;
 
                 print $cgi->header();
index 3c4c68bf4e03a46ff1a445366be9426ce648b2d4..c1d35290c54570b781275016c500b52010acef76 100644 (file)
     The series_id [% series_id FILTER html %] is not valid. It may be that
     this series has been deleted.
 
+  [% ELSIF error == "invalid_timestamp" %]
+    The entered timestamp <code>[% timestamp FILTER html %]</code> could not
+    be parsed into a valid date and time.
+
   [% ELSIF error == "invalid_webservergroup" %]
     There is no such group: [% group FILTER html %]. Check your $webservergroup
     setting in [% constants.bz_locations.localconfig FILTER html %].