rgw: sanitize \r in s3 CORSConfiguration's ExposeHeader
authorCasey Bodley <cbodley@redhat.com>
Tue, 4 May 2021 12:32:58 +0000 (08:32 -0400)
committerBastien Roucariès <rouca@debian.org>
Sat, 21 Oct 2023 16:42:26 +0000 (17:42 +0100)
follows up on 1524d3c0c5cb11775313ea1e2bb36a93257947f2 to escape \r as
well

Fixes: CVE-2021-3524
Reported-by: Sergey Bobrov <Sergey.Bobrov@kaspersky.com>
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 87806f48e7a1b8891eb90711f1cedd26f1119aac)

Origin: upstream, https://github.com/ceph/ceph/commit/763aebb94678018f89427137ffbc0c5205b1edc1

Gbp-Pq: Name CVE-2021-3524.patch

src/rgw/rgw_cors.cc

index 2d9863bb2cdae23ad0982b33e3eff235a5766927..31f5b825712a42baee4cf33a65aff73fae1a4752 100644 (file)
@@ -147,8 +147,9 @@ void RGWCORSRule::format_exp_headers(string& s) {
     if (s.length() > 0)
       s.append(",");
     // these values are sent to clients in a 'Access-Control-Expose-Headers'
-    // response header, so we escape '\n' to avoid header injection
-    boost::replace_all_copy(std::back_inserter(s), header, "\n", "\\n");
+    // response header, so we escape '\n' and '\r' to avoid header injection
+    std::string tmp = boost::replace_all_copy(header, "\n", "\\n");
+    boost::replace_all_copy(std::back_inserter(s), tmp, "\r", "\\r");
   }
 }