CVE-2023-43040 rgw: Fix bucket validation against POST policies
authorJoshua Baergen <jbaergen@digitalocean.com>
Wed, 17 May 2023 18:17:09 +0000 (12:17 -0600)
committerBastien Roucariès <rouca@debian.org>
Sat, 21 Oct 2023 16:42:26 +0000 (17:42 +0100)
It's possible that user could provide a form part as a part of a POST
object upload that uses 'bucket' as a key; in this case, it was
overriding what was being set in the validation env (which is the real
bucket being modified). The result of this is that a user could actually
upload to any bucket accessible by the specified access key by matching
the bucket in the POST policy in said POST form part.

Fix this simply by setting the bucket to the correct value after the
POST form parts are processed, ignoring the form part above if
specified.

bug: https://tracker.ceph.com/issues/63004
bug-debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1053690
bug-debian-security: https://deb.freexian.com/extended-lts/tracker/CVE-2023-43040

Signed-off-by: Joshua Baergen <jbaergen@digitalocean.com>
Gbp-Pq: Name 0033-CVE-2023-43040-rgw-Fix-bucket-validation-against-POS.patch

src/rgw/rgw_rest_s3.cc

index 2a935f0997abb3933858d943cb624dd989a743b3..b6f3a0a21c67158131565e99840ed244495d32fe 100644 (file)
@@ -1574,9 +1574,6 @@ int RGWPostObj_ObjStore_S3::get_params()
     return op_ret;
   }
 
-  ldout(s->cct, 20) << "adding bucket to policy env: " << s->bucket.name
-                   << dendl;
-  env.add_var("bucket", s->bucket.name);
 
   bool done;
   do {
@@ -1628,6 +1625,10 @@ int RGWPostObj_ObjStore_S3::get_params()
     env.add_var(part.name, part_str);
   } while (!done);
 
+  ldout(s->cct, 20) << "adding bucket to policy env: " << s->bucket.name
+                   << dendl;
+  env.add_var("bucket", s->bucket.name);
+
   string object_str;
   if (!part_str(parts, "key", &object_str)) {
     err_msg = "Key not specified";