GO-2026-6854: Linker script injection via split -Wl, flags and Darwin or symbol linker flags in cgo in cmd/go
Building a malicious package that uses cgo could cause arbitrary code execution at link time by passing linker script files to the host linker via "#cgo LDFLAGS".
Split "-Wl," flags that consume a following argument (such as "-Wl,-rpath", "-Wl,--just-symbols", and "-Wl,-undefined") previously accepted a bare second argument without a "-Wl," prefix, which the compiler driver passes directly to the linker as a positional input file. Additionally, when using GNU ld.bfd, flags such as "-framework", "-Wl,-framework", "-Wl,-undefined", "-Wl,--just-symbols", "-Wl,-R", "-Wl,-subsystem", and (on non-Darwin platforms) "-Wl,-sectcreate" could cause ld.bfd to interpret their arguments as linker scripts if they named a regular file on disk.
The go command now requires a "-Wl," prefix on the second token of split "-Wl," flags (except "-Wl,-R"), verifies that these flags do not reference linker script files, and disallows bare "-Wl,--warn-backrefs-exclude".
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/toolchainto a version that resolves this vulnerability.Fixed in 1.26.11 - Upgrade
Upgrade
go/toolchainto a version that resolves this vulnerability.Fixed in 1.27.4 - Configuration
Update cgo LDFLAGS so split -Wl, flags that consume a following argument use the -Wl, prefix on that second token (except -Wl,-R), do not use bare -Wl,--warn-backrefs-exclude, and ensure the flags do not reference linker script files.
cgo LDFLAGS split -Wl, flag argument handling = Require a -Wl, prefix on the second token, except for -Wl,-R; disallow bare -Wl,--warn-backrefs-exclude; do not reference linker script files