AZL-113669: CVE-2026-97037 affecting package tensorflow 2.16.1-11
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
Event History
Frequently Asked Questions
What must an attacker control to exploit this issue?
An attacker must be able to supply or cause the build of a malicious package that uses cgo and includes crafted #cgo LDFLAGS. Exploitation occurs during linking, when the host linker processes attacker-controlled linker arguments or files.
When is a build environment exposed?
The exposed scenario is building cgo-enabled packages that are not trusted. Risk is especially relevant where build systems automatically fetch and compile third-party, unreviewed, or attacker-controlled Go package sources.
Are all host linkers affected in the same way?
No. The issue with split -Wl, flags accepting a bare following argument applies to compiler-driver handling, while interpretation of flag arguments as linker scripts is specifically described for GNU ld.bfd. The affected ld.bfd flags include -framework, -Wl,-framework, -Wl,-undefined, -Wl,--just-symbols, -Wl,-R, -Wl,-subsystem, and, outside Darwin platforms, -Wl,-sectcreate.
What can be done if updating is not immediately possible?
Do not build untrusted cgo packages, and review package sources for #cgo LDFLAGS before building them. In particular, reject split -Wl, options followed by bare arguments and flags that can point to regular files which ld.bfd may treat as linker scripts.