Description
path/filepath: recognize \??\
as a Root Local Device path prefix.
On Windows, a path beginning with \??\
is a Root Local Device path equivalent
to a path beginning with \\?\
. Paths with a \??\
prefix may be used to
access arbitrary locations on the system. For example, the path \??\c:\x
is equivalent to the more common path c:\x
.
The filepath package did not recognize paths with a \??\
prefix as special.
Clean could convert a rooted path such as \a\..\??\b
into
the root local device path \??\b
. It will now convert this
path into .\??\b
.
IsAbs did not report paths beginning with \??\
as absolute.
It now does so.
VolumeName now reports the \??\
prefix as a volume name.
Join(`\`, `??`, `b`)
could convert a seemingly innocent
sequence of path elements into the root local device path
\??\b
. It will now convert this to \.\??\b
.
This is CVE-2023-45283 and https://go.dev/issue/63713.
path/filepath: recognize device names with trailing spaces and superscripts
The IsLocal function did not correctly detect reserved names in some cases:
- reserved names followed by spaces, such as
"COM1 "
. - "COM" or "LPT" followed by a superscript 1, 2, or 3.
IsLocal now correctly reports these names as non-local.
This is CVE-2023-45284 and https://go.dev/issue/63713.
/cc @golang/security and @golang/release