Headline
CVE-2023-45284: path/filepath: insecure parsing of Windows paths · Issue #63713 · golang/go
On Windows, The IsLocal function does not correctly detect reserved device names in some cases. Reserved names followed by spaces, such as "COM1 ", and reserved names “COM” and “LPT” followed by superscript 1, 2, or 3, are incorrectly reported as local. With fix, IsLocal now correctly reports these names as non-local.
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
Related news
Gentoo Linux Security Advisory 202408-7 - Multiple vulnerabilities have been discovered in Go, the worst of which could lead to information leakage or a denial of service. Versions greater than or equal to 1.22.3 are affected.
Using go get to fetch a module with the ".git" suffix may unexpectedly fallback to the insecure "git://" protocol if the module is unavailable via the secure "https://" and "git+ssh://" protocols, even if GOINSECURE is not set for said module. This only affects users who are not using the module proxy and are fetching modules directly (i.e. GOPROXY=off).