AZL-113648: CVE-2026-97039 affecting package tensorflow 2.16.1-11
Building a malicious package that uses "#cgo pkg-config:" directives could load untrusted pkg-config ".pc" files or inject unvalidated compiler and linker flags. The pkg-config flag allowlist previously permitted "--with-path=" and "--personality=", allowed "--define-variable=" values beginning with "=" or "$" (which can rewrite paths in system ".pc" files into sysroot-prefixed "-L=" or "-L$SYSROOT" linker search paths), and allowed package arguments ending in ".pc" or containing path separators or "..", which caused pkg-config to load local ".pc" files directly from the package directory. In addition, flags returned by "pkg-config --cflags" in cgoCPPFLAGS were not checked when determining whether internal linking is safe. The go command now disallows "--with-path=", "--personality=", leading "=" or "$" characters in "--define-variable=" values, and local ".pc" paths in "#cgo pkg-config:" directives, and inspects cgoCPPFLAGS when checking internal linking compatibility.
Affected Software
Event History
Frequently Asked Questions
What would an attacker need to exploit this issue?
An attacker would need to cause a Go build to process a malicious package containing #cgo pkg-config directives. The malicious directives could reference local or otherwise untrusted .pc files or pass previously permitted pkg-config options and arguments that influence compiler or linker flags.
Are builds without cgo pkg-config directives affected?
The described issue is specific to packages using #cgo pkg-config directives and to cgo compiler flags returned by pkg-config. The provided information does not indicate impact for builds that do not process these cgo/pkg-config inputs.
What mitigations are available if an update cannot be applied immediately?
Avoid building untrusted Go packages that use #cgo pkg-config directives, particularly packages that include local .pc paths, path separators, .. components, or pkg-config options such as --with-path=, --personality=, and manipulated --define-variable= values. Restrict the build environment so untrusted package directories and pkg-config files cannot affect builds.
How can I identify potentially affected source packages?
Inspect Go source for #cgo pkg-config directives. Prioritize directives containing .pc arguments, path separators, .., --with-path=, --personality=, or --define-variable= values beginning with = or $, and review pkg-config-generated cgo CPPFLAGS used during builds.