]> Cypherpunks repositories - gostls13.git/commit
html/template: disallow actions in JS template literals
authorRoland Shoemaker <bracewell@google.com>
Mon, 20 Mar 2023 18:01:13 +0000 (11:01 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 4 Apr 2023 17:04:36 +0000 (17:04 +0000)
commitecc5ba46117d2e73f65caac27dfe53acb12cf4f3
tree98cb1900e39d71ab84d2cf044b854fc55960017f
parent110e4fb1c2e3a21631704bbfaf672230b9ba2492
html/template: disallow actions in JS template literals

ECMAScript 6 introduced template literals[0][1] which are delimited with
backticks. These need to be escaped in a similar fashion to the
delimiters for other string literals. Additionally template literals can
contain special syntax for string interpolation.

There is no clear way to allow safe insertion of actions within JS
template literals, as handling (JS) string interpolation inside of these
literals is rather complex. As such we've chosen to simply disallow
template actions within these template literals.

A new error code is added for this parsing failure case, errJsTmplLit,
but it is unexported as it is not backwards compatible with other minor
release versions to introduce an API change in a minor release. We will
export this code in the next major release.

The previous behavior (with the cavet that backticks are now escaped
properly) can be re-enabled with GODEBUG=jstmpllitinterp=1.

This change subsumes CL471455.

Thanks to Sohom Datta, Manipal Institute of Technology, for reporting
this issue.

Fixes CVE-2023-24538
Fixes #59234

[0] https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-template-literals
[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1802457
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Julie Qiu <julieqiu@google.com>
Reviewed-by: Roland Shoemaker <bracewell@google.com>
Change-Id: Ia221fefdb273bd0f066dffc2abcf2a616801d2f2
Reviewed-on: https://go-review.googlesource.com/c/go/+/482079
TryBot-Bypass: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
12 files changed:
src/html/template/context.go
src/html/template/error.go
src/html/template/escape.go
src/html/template/escape_test.go
src/html/template/js.go
src/html/template/js_test.go
src/html/template/jsctx_string.go
src/html/template/state_string.go
src/html/template/transition.go
src/runtime/metrics.go
src/runtime/metrics/description.go
src/runtime/metrics/doc.go