]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.18] os, net/http: avoid escapes from os.DirFS and http.Dir on...
authorDamien Neil <dneil@google.com>
Thu, 10 Nov 2022 20:16:27 +0000 (12:16 -0800)
committerJenny Rakoczy <jenny@golang.org>
Tue, 6 Dec 2022 19:00:21 +0000 (19:00 +0000)
commit7013a4f5f816af62033ad63dd06b77c30d7a62a7
tree0464fe22eec07bdcf6ac00a180589129a185a036
parente727f41930ae9a8bedfbc85eb8ca7268486571ec
[release-branch.go1.18] os, net/http: avoid escapes from os.DirFS and http.Dir on Windows

Do not permit access to Windows reserved device names (NUL, COM1, etc.)
via os.DirFS and http.Dir filesystems.

Avoid escapes from os.DirFS(`\`) on Windows. DirFS would join the
the root to the relative path with a path separator, making
os.DirFS(`\`).Open(`/foo/bar`) open the path `\\foo\bar`, which is
a UNC name. Not only does this not open the intended file, but permits
reference to any file on the system rather than only files on the
current drive.

Make os.DirFS("") invalid, with all file access failing. Previously,
a root of "" was interpreted as "/", which is surprising and probably
unintentional.

Fixes CVE-2022-41720.
Fixes #56694.

Change-Id: I275b5fa391e6ad7404309ea98ccc97405942e0f0
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1663832
Reviewed-by: Julie Qiu <julieqiu@google.com>
Reviewed-by: Tatiana Bradley <tatianabradley@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/455360
Reviewed-by: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jenny Rakoczy <jenny@golang.org>
src/go/build/deps_test.go
src/internal/safefilepath/path.go [new file with mode: 0644]
src/internal/safefilepath/path_other.go [new file with mode: 0644]
src/internal/safefilepath/path_test.go [new file with mode: 0644]
src/internal/safefilepath/path_windows.go [new file with mode: 0644]
src/net/http/fs.go
src/net/http/fs_test.go
src/os/file.go
src/os/os_test.go