mirror of
https://git.yoctoproject.org/poky
synced 2026-04-18 12:32:12 +02:00
go: fix CVE-2023-29402 & CVE-2023-29404
Backport fixes for: * CVE-2023-29402 - Upstream-Status: Backport fromc160b49b6d* CVE-2023-29404 - Upstream-Status: Backport frombf3c8ce03e(From OE-Core rev: a4a989605d8cab3278d6c6e32eb882815ff36a28) Signed-off-by: Hitendra Prajapati <hprajapati@mvista.com> Signed-off-by: Steve Sakoman <steve@sakoman.com>
This commit is contained in:
committed by
Steve Sakoman
parent
2474c30274
commit
f25b363233
@@ -65,6 +65,8 @@ SRC_URI += "\
|
||||
file://CVE-2023-24540.patch \
|
||||
file://CVE-2023-29405-1.patch \
|
||||
file://CVE-2023-29405-2.patch \
|
||||
file://CVE-2023-29402.patch \
|
||||
file://CVE-2023-29404.patch \
|
||||
"
|
||||
|
||||
SRC_URI_append_libc-musl = " file://0009-ld-replace-glibc-dynamic-linker-with-musl.patch"
|
||||
|
||||
201
meta/recipes-devtools/go/go-1.14/CVE-2023-29402.patch
Normal file
201
meta/recipes-devtools/go/go-1.14/CVE-2023-29402.patch
Normal file
@@ -0,0 +1,201 @@
|
||||
rom c160b49b6d328c86bd76ca2fff9009a71347333f Mon Sep 17 00:00:00 2001
|
||||
From: "Bryan C. Mills" <bcmills@google.com>
|
||||
Date: Fri, 12 May 2023 14:15:16 -0400
|
||||
Subject: [PATCH] [release-branch.go1.19] cmd/go: disallow package directories
|
||||
containing newlines
|
||||
|
||||
Directory or file paths containing newlines may cause tools (such as
|
||||
cmd/cgo) that emit "//line" or "#line" -directives to write part of
|
||||
the path into non-comment lines in generated source code. If those
|
||||
lines contain valid Go code, it may be injected into the resulting
|
||||
binary.
|
||||
|
||||
(Note that Go import paths and file paths within module zip files
|
||||
already could not contain newlines.)
|
||||
|
||||
Thanks to Juho Nurminen of Mattermost for reporting this issue.
|
||||
|
||||
Updates #60167.
|
||||
Fixes #60515.
|
||||
Fixes CVE-2023-29402.
|
||||
|
||||
Change-Id: If55d0400c02beb7a5da5eceac60f1abeac99f064
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1882606
|
||||
Reviewed-by: Roland Shoemaker <bracewell@google.com>
|
||||
Run-TryBot: Roland Shoemaker <bracewell@google.com>
|
||||
Reviewed-by: Russ Cox <rsc@google.com>
|
||||
Reviewed-by: Damien Neil <dneil@google.com>
|
||||
(cherry picked from commit 41f9046495564fc728d6f98384ab7276450ac7e2)
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1902229
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1904343
|
||||
Reviewed-by: Michael Knyszek <mknyszek@google.com>
|
||||
Reviewed-by: Bryan Mills <bcmills@google.com>
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/501218
|
||||
Run-TryBot: David Chase <drchase@google.com>
|
||||
Auto-Submit: Michael Knyszek <mknyszek@google.com>
|
||||
TryBot-Result: Gopher Robot <gobot@golang.org>
|
||||
|
||||
Upstream-Status: Backport [https://github.com/golang/go/commit/c160b49b6d328c86bd76ca2fff9009a71347333f]
|
||||
CVE: CVE-2023-29402
|
||||
Signed-off-by: Hitendra Prajapati <hprajapati@mvista.com>
|
||||
---
|
||||
src/cmd/go/internal/load/pkg.go | 4 +
|
||||
src/cmd/go/internal/work/exec.go | 6 ++
|
||||
src/cmd/go/script_test.go | 1 +
|
||||
.../go/testdata/script/build_cwd_newline.txt | 100 ++++++++++++++++++
|
||||
4 files changed, 111 insertions(+)
|
||||
create mode 100644 src/cmd/go/testdata/script/build_cwd_newline.txt
|
||||
|
||||
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
|
||||
index 369a79b..d2b63b0 100644
|
||||
--- a/src/cmd/go/internal/load/pkg.go
|
||||
+++ b/src/cmd/go/internal/load/pkg.go
|
||||
@@ -1697,6 +1697,10 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
|
||||
setError(ImportErrorf(p.ImportPath, "invalid import path %q", p.ImportPath))
|
||||
return
|
||||
}
|
||||
+ if strings.ContainsAny(p.Dir, "\r\n") {
|
||||
+ setError(fmt.Errorf("invalid package directory %q", p.Dir))
|
||||
+ return
|
||||
+ }
|
||||
|
||||
// Build list of imported packages and full dependency list.
|
||||
imports := make([]*Package, 0, len(p.Imports))
|
||||
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
|
||||
index 9a9650b..050b785 100644
|
||||
--- a/src/cmd/go/internal/work/exec.go
|
||||
+++ b/src/cmd/go/internal/work/exec.go
|
||||
@@ -458,6 +458,12 @@ func (b *Builder) build(a *Action) (err error) {
|
||||
b.Print(a.Package.ImportPath + "\n")
|
||||
}
|
||||
|
||||
+ if p.Error != nil {
|
||||
+ // Don't try to build anything for packages with errors. There may be a
|
||||
+ // problem with the inputs that makes the package unsafe to build.
|
||||
+ return p.Error
|
||||
+ }
|
||||
+
|
||||
if a.Package.BinaryOnly {
|
||||
p.Stale = true
|
||||
p.StaleReason = "binary-only packages are no longer supported"
|
||||
diff --git a/src/cmd/go/script_test.go b/src/cmd/go/script_test.go
|
||||
index ec498bb..a1398ad 100644
|
||||
--- a/src/cmd/go/script_test.go
|
||||
+++ b/src/cmd/go/script_test.go
|
||||
@@ -123,6 +123,7 @@ func (ts *testScript) setup() {
|
||||
"devnull=" + os.DevNull,
|
||||
"goversion=" + goVersion(ts),
|
||||
":=" + string(os.PathListSeparator),
|
||||
+ "newline=\n",
|
||||
}
|
||||
|
||||
if runtime.GOOS == "plan9" {
|
||||
diff --git a/src/cmd/go/testdata/script/build_cwd_newline.txt b/src/cmd/go/testdata/script/build_cwd_newline.txt
|
||||
new file mode 100644
|
||||
index 0000000..61c6966
|
||||
--- /dev/null
|
||||
+++ b/src/cmd/go/testdata/script/build_cwd_newline.txt
|
||||
@@ -0,0 +1,100 @@
|
||||
+[windows] skip 'filesystem normalizes / to \'
|
||||
+[plan9] skip 'filesystem disallows \n in paths'
|
||||
+
|
||||
+# If the directory path containing a package to be built includes a newline,
|
||||
+# the go command should refuse to even try to build the package.
|
||||
+
|
||||
+env DIR=$WORK${/}${newline}'package main'${newline}'func main() { panic("uh-oh")'${newline}'/*'
|
||||
+
|
||||
+mkdir $DIR
|
||||
+cd $DIR
|
||||
+exec pwd
|
||||
+cp $WORK/go.mod ./go.mod
|
||||
+cp $WORK/main.go ./main.go
|
||||
+cp $WORK/main_test.go ./main_test.go
|
||||
+
|
||||
+! go build -o $devnull .
|
||||
+stderr 'package example: invalid package directory .*uh-oh'
|
||||
+
|
||||
+! go build -o $devnull main.go
|
||||
+stderr 'package command-line-arguments: invalid package directory .*uh-oh'
|
||||
+
|
||||
+! go run .
|
||||
+stderr 'package example: invalid package directory .*uh-oh'
|
||||
+
|
||||
+! go run main.go
|
||||
+stderr 'package command-line-arguments: invalid package directory .*uh-oh'
|
||||
+
|
||||
+! go test .
|
||||
+stderr 'package example: invalid package directory .*uh-oh'
|
||||
+
|
||||
+! go test -v main.go main_test.go
|
||||
+stderr 'package command-line-arguments: invalid package directory .*uh-oh'
|
||||
+
|
||||
+
|
||||
+# Since we do preserve $PWD (or set it appropriately) for commands, and we do
|
||||
+# not resolve symlinks unnecessarily, referring to the contents of the unsafe
|
||||
+# directory via a safe symlink should be ok, and should not inject the data from
|
||||
+# the symlink target path.
|
||||
+
|
||||
+[!symlink] stop 'remainder of test checks symlink behavior'
|
||||
+[short] stop 'links and runs binaries'
|
||||
+
|
||||
+symlink $WORK${/}link -> $DIR
|
||||
+
|
||||
+go run $WORK${/}link${/}main.go
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stderr '^ok$'
|
||||
+
|
||||
+go test -v $WORK${/}link${/}main.go $WORK${/}link${/}main_test.go
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stdout '^ok$' # 'go test' combines the test's stdout into stderr
|
||||
+
|
||||
+cd $WORK/link
|
||||
+
|
||||
+! go run $DIR${/}main.go
|
||||
+stderr 'package command-line-arguments: invalid package directory .*uh-oh'
|
||||
+
|
||||
+go run .
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stderr '^ok$'
|
||||
+
|
||||
+go run main.go
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stderr '^ok$'
|
||||
+
|
||||
+go test -v
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stdout '^ok$' # 'go test' combines the test's stdout into stderr
|
||||
+
|
||||
+go test -v .
|
||||
+! stdout panic
|
||||
+! stderr panic
|
||||
+stdout '^ok$' # 'go test' combines the test's stdout into stderr
|
||||
+
|
||||
+
|
||||
+-- $WORK/go.mod --
|
||||
+module example
|
||||
+go 1.19
|
||||
+-- $WORK/main.go --
|
||||
+package main
|
||||
+
|
||||
+import "C"
|
||||
+
|
||||
+func main() {
|
||||
+ /* nothing here */
|
||||
+ println("ok")
|
||||
+}
|
||||
+-- $WORK/main_test.go --
|
||||
+package main
|
||||
+
|
||||
+import "testing"
|
||||
+
|
||||
+func TestMain(*testing.M) {
|
||||
+ main()
|
||||
+}
|
||||
--
|
||||
2.25.1
|
||||
|
||||
84
meta/recipes-devtools/go/go-1.14/CVE-2023-29404.patch
Normal file
84
meta/recipes-devtools/go/go-1.14/CVE-2023-29404.patch
Normal file
@@ -0,0 +1,84 @@
|
||||
From bf3c8ce03e175e870763901a3850bca01381a828 Mon Sep 17 00:00:00 2001
|
||||
From: Roland Shoemaker <bracewell@google.com>
|
||||
Date: Fri, 5 May 2023 13:10:34 -0700
|
||||
Subject: [PATCH] [release-branch.go1.19] cmd/go: enforce flags with
|
||||
non-optional arguments
|
||||
|
||||
Enforce that linker flags which expect arguments get them, otherwise it
|
||||
may be possible to smuggle unexpected flags through as the linker can
|
||||
consume what looks like a flag as an argument to a preceding flag (i.e.
|
||||
"-Wl,-O -Wl,-R,-bad-flag" is interpreted as "-O=-R -bad-flag"). Also be
|
||||
somewhat more restrictive in the general format of some flags.
|
||||
|
||||
Thanks to Juho Nurminen of Mattermost for reporting this issue.
|
||||
|
||||
Updates #60305
|
||||
Fixes #60511
|
||||
Fixes CVE-2023-29404
|
||||
|
||||
Change-Id: Icdffef2c0f644da50261cace6f43742783931cff
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1876275
|
||||
Reviewed-by: Ian Lance Taylor <iant@google.com>
|
||||
Reviewed-by: Damien Neil <dneil@google.com>
|
||||
(cherry picked from commit 896779503cf754cbdac24b61d4cc953b50fe2dde)
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1902225
|
||||
Run-TryBot: Roland Shoemaker <bracewell@google.com>
|
||||
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1904342
|
||||
Reviewed-by: Michael Knyszek <mknyszek@google.com>
|
||||
Reviewed-on: https://go-review.googlesource.com/c/go/+/501217
|
||||
Auto-Submit: Michael Knyszek <mknyszek@google.com>
|
||||
Run-TryBot: David Chase <drchase@google.com>
|
||||
TryBot-Bypass: Michael Knyszek <mknyszek@google.com>
|
||||
|
||||
Upstream-Status: Backport [https://github.com/golang/go/commit/bf3c8ce03e175e870763901a3850bca01381a828]
|
||||
CVE: CVE-2023-29404
|
||||
Signed-off-by: Hitendra Prajapati <hprajapati@mvista.com>
|
||||
---
|
||||
src/cmd/go/internal/work/security.go | 6 +++---
|
||||
src/cmd/go/internal/work/security_test.go | 5 +++++
|
||||
2 files changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/cmd/go/internal/work/security.go b/src/cmd/go/internal/work/security.go
|
||||
index a823b20..8acb6dc 100644
|
||||
--- a/src/cmd/go/internal/work/security.go
|
||||
+++ b/src/cmd/go/internal/work/security.go
|
||||
@@ -177,17 +177,17 @@ var validLinkerFlags = []*lazyregexp.Regexp{
|
||||
re(`-Wl,-Bdynamic`),
|
||||
re(`-Wl,-berok`),
|
||||
re(`-Wl,-Bstatic`),
|
||||
- re(`-WL,-O([^@,\-][^,]*)?`),
|
||||
+ re(`-Wl,-O[0-9]+`),
|
||||
re(`-Wl,-d[ny]`),
|
||||
re(`-Wl,--disable-new-dtags`),
|
||||
- re(`-Wl,-e[=,][a-zA-Z0-9]*`),
|
||||
+ re(`-Wl,-e[=,][a-zA-Z0-9]+`),
|
||||
re(`-Wl,--enable-new-dtags`),
|
||||
re(`-Wl,--end-group`),
|
||||
re(`-Wl,--(no-)?export-dynamic`),
|
||||
re(`-Wl,-framework,[^,@\-][^,]+`),
|
||||
re(`-Wl,-headerpad_max_install_names`),
|
||||
re(`-Wl,--no-undefined`),
|
||||
- re(`-Wl,-R([^@\-][^,@]*$)`),
|
||||
+ re(`-Wl,-R,?([^@\-,][^,@]*$)`),
|
||||
re(`-Wl,--just-symbols[=,]([^,@\-][^,@]+)`),
|
||||
re(`-Wl,-rpath(-link)?[=,]([^,@\-][^,]+)`),
|
||||
re(`-Wl,-s`),
|
||||
diff --git a/src/cmd/go/internal/work/security_test.go b/src/cmd/go/internal/work/security_test.go
|
||||
index bd707ff..7b0b7d3 100644
|
||||
--- a/src/cmd/go/internal/work/security_test.go
|
||||
+++ b/src/cmd/go/internal/work/security_test.go
|
||||
@@ -220,6 +220,11 @@ var badLinkerFlags = [][]string{
|
||||
{"-Wl,-R,@foo"},
|
||||
{"-Wl,--just-symbols,@foo"},
|
||||
{"../x.o"},
|
||||
+ {"-Wl,-R,"},
|
||||
+ {"-Wl,-O"},
|
||||
+ {"-Wl,-e="},
|
||||
+ {"-Wl,-e,"},
|
||||
+ {"-Wl,-R,-flag"},
|
||||
}
|
||||
|
||||
func TestCheckLinkerFlags(t *testing.T) {
|
||||
--
|
||||
2.25.1
|
||||
|
||||
Reference in New Issue
Block a user