From 43ab84411642fd66ca575ad57882b2b18cd6c97a Mon Sep 17 00:00:00 2001 From: Roland Shoemaker <bracewell@google.com> Date: Thu, 13 Apr 2023 15:40:44 -0700 Subject: [PATCH] [release-branch.go1.19] html/template: disallow angle brackets in CSS values # AWS EKS Backported To: go-1.16.15-eks Backported On: Wed, 3 May 2023 Backported By: szafreen@amazon.com Backported From: release-branch.go1.19 Source Commit: https://github.com/golang/go/commit/e49282327b05192e46086bf25fd3ac691205fe80 # Original Information Angle brackets should not appear in CSS contexts, as they may affect token boundaries (such as closing a <style> tag, resulting in injection). Instead emit filterFailsafe, matching the behavior for other dangerous characters. Thanks to Juho Nurminen of Mattermost for reporting this issue. For #59720 Fixes #59811 Fixes CVE-2023-24539 Change-Id: Iccc659c9a18415992b0c05c178792228e3a7bae4 Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1826636 Reviewed-by: Julie Qiu <julieqiu@google.com> Run-TryBot: Roland Shoemaker <bracewell@google.com> Reviewed-by: Damien Neil <dneil@google.com> Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1851496 Run-TryBot: Damien Neil <dneil@google.com> Reviewed-by: Roland Shoemaker <bracewell@google.com> Reviewed-on: https://go-review.googlesource.com/c/go/+/491335 Run-TryBot: Carlos Amedee <carlos@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> --- src/html/template/css.go | 2 +- src/html/template/css_test.go | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/html/template/css.go b/src/html/template/css.go index eb92fc92b5..8823acb9f0 100644 --- a/src/html/template/css.go +++ b/src/html/template/css.go @@ -238,7 +238,7 @@ func cssValueFilter(args ...interface{}) string { // inside a string that might embed JavaScript source. for i, c := range b { switch c { - case 0, '"', '\'', '(', ')', '/', ';', '@', '[', '\\', ']', '`', '{', '}': + case 0, '"', '\'', '(', ')', '/', ';', '@', '[', '\\', ']', '`', '{', '}', '<', '>': return filterFailsafe case '-': // Disallow <!-- or -->. diff --git a/src/html/template/css_test.go b/src/html/template/css_test.go index a735638b03..2b76256a76 100644 --- a/src/html/template/css_test.go +++ b/src/html/template/css_test.go @@ -231,6 +231,8 @@ func TestCSSValueFilter(t *testing.T) { {`-exp\000052 ession(alert(1337))`, "ZgotmplZ"}, {`-expre\0000073sion`, "-expre\x073sion"}, {`@import url evil.css`, "ZgotmplZ"}, + {"<", "ZgotmplZ"}, + {">", "ZgotmplZ"}, } for _, test := range tests { got := cssValueFilter(test.css) -- 2.39.2