CVE-2024-47534
NoneCVSS
—
EPSS
0.5%
Published
Oct 1, 2024
CISA due date
—
Cloudanix analysis
A flaw in how update-checking software follows a chain of trust could let attackers slip in bad updates without being caught.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Tampering
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The go-tuf client processes delegation chains in an inconsistent order, allowing a chain such as A then B then C to be evaluated as B then C then A and thereby violating intended delegation constraints.
Why it matters to the business
Organizations relying on TUF-protected software updates risk accepting unauthorized or tampered artifacts, which can undermine the integrity of their software supply chain and increase exposure to downstream compromise.
How an attack unfolds
An attacker publishes a malicious TUF repository containing carefully ordered delegations that trigger the client's ordering bug, causing the client to skip required verification steps and accept an update that should have been rejected.
How to fix it
Upgrade theupdateframework/go-tuf to commit 6c47391ef3da3eac29e7b019da00e072303bd748 or later (equivalent to release 2.0.1). For the XWiki livedata-macro component, upgrade to 13.10.10, 14.4.7, or 14.9 as appropriate.
How to confirm the fix worked
Inventory all direct and transitive uses of go-tuf, confirm the resolved version meets or exceeds the fixed release, and run the project's test suite with delegation-chain test cases to verify correct ordering behavior.
Typical attack path
- Locate an application or build system that consumes updates via the vulnerable go-tuf client
- Host a malicious TUF repository that uses a delegation topology exploiting the ordering inconsistency
- Serve a crafted update whose metadata bypasses intended delegation checks
- Induce the target client to fetch and validate the update, resulting in acceptance of the malicious artifact
How to detect it
Review update-client logs for delegation-processing sequences, compare observed delegation order against expected repository metadata, and correlate any anomalous acceptances of updates with client version information.
What your security team should do
- Treat the dependency upgrade as a high-priority supply-chain hardening task
- Add go-tuf to automated dependency scanning with a minimum-version policy
- Review internal update pipelines that rely on TUF to ensure delegation rules remain effective after the upgrade
The record
go-tuf is a Go implementation of The Update Framework (TUF). The go-tuf client inconsistently traces the delegations. For example, if targets delegate to "A", and to "B", and "B" delegates to "C", then the client should trace the delegations in the order "A" then "B" then "C" but it may incorrectly trace the delegations "B"->"C"->"A". This vulnerability is fixed in 2.0.1.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/theupdateframework/go-tuf/v2 | 0 | 2.0.1 |
| Chainguard | aactl | 0 | 0.4.12-r37 |
| Chainguard | apko | 0 | 0.30.20-r0 |
| Chainguard | chainctl | 0 | 0.2.59-r0 |
| Chainguard | cosign | 0 | 3.0.2-r1 |
| Chainguard | cosign-fips | 0 | 2.4.0-r4 |
| Chainguard | cosign-fips | 0 | 3.0.2-r1 |
| Chainguard | docker-credential-cgr | 0 | 0.2.59-r0 |
| Chainguard | falcoctl | 0 | 0.11.4-r1 |
| Chainguard | falcoctl-fips | 0 | 0.11.4-r1 |
| Chainguard | flux-source-controller | 0 | 1.7.3-r0 |
| Chainguard | flux-source-controller-fips | 0 | 1.7.3-r1 |
| Chainguard | flux-source-controller-iamguarded-compat | 0 | 1.7.3-r0 |
| Chainguard | gh | 0 | 2.83.0-r0 |
| Chainguard | gh-doc | 0 | 2.83.0-r0 |
| Chainguard | gitsign | 0 | 0.13.0-r5 |
| Chainguard | gitsign-config | 0 | 0.13.0-r5 |
| Chainguard | gitsign-credential-cache | 0 | 0.13.0-r5 |
| Chainguard | kubescape | 0 | 3.0.18-r0 |
| Chainguard | kyverno-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-background-controller-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-background-controller-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | kyverno-cleanup-controller-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-cleanup-controller-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | kyverno-cli-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-cli-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | kyverno-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | kyverno-init-container-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-init-container-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | kyverno-reports-controller-1.12 | 0 | 1.12.7-r22 |
| Chainguard | kyverno-reports-controller-fips-1.12 | 0 | 1.12.7-r25 |
| Chainguard | melange | 0 | 0.32.0-r1 |
| Chainguard | neuvector-sigstore-interface | 0 | 0_git20250629-r4 |
| Chainguard | neuvector-sigstore-interface-fips | 0 | 0_git20251020-r1 |
| Chainguard | policy-controller | 0 | 0.9.0-r10 |
| Chainguard | policy-controller-fips | 0 | 0.13.1-r1 |
| Chainguard | policy-controller-tester | 0 | 0.9.0-r10 |
| Chainguard | policy-controller-tester-fips | 0 | 0.13.1-r1 |
| Chainguard | policy-controller-webhook | 0 | 0.9.0-r10 |
| Chainguard | rekor | 0 | 1.3.6-r9 |
| Chainguard | rekor-backfill-index | 0 | 1.3.6-r9 |
| Chainguard | rekor-backfill-redis | 0 | 1.3.6-r9 |
| Chainguard | rekor-cli | 0 | 1.3.6-r9 |
| Chainguard | rekor-fips | 0 | 1.4.2-r1 |
| Chainguard | rekor-fips-backfill-index | 0 | 1.4.2-r1 |
| Chainguard | rekor-fips-cli | 0 | 1.4.2-r1 |
| Chainguard | rekor-fips-server | 0 | 1.4.2-r1 |
| Chainguard | rekor-server | 0 | 1.3.6-r9 |
| Chainguard | sigstore-scaffolding | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-cloudsqlproxy | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-ctlog-createctconfig | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-ctlog-managectroots | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-ctlog-verifyfulcio | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-cloudsqlproxy | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-ctlog-createctconfig | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-ctlog-managectroots | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-ctlog-verifyfulcio | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-fulcio-createcerts | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-getoidctoken | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-rekor-createsecret | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-trillian-createdb | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-trillian-createtree | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-trillian-updatetree | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-tsa-createcertchain | 0 | 0.7.26-r0 |
| Chainguard | sigstore-scaffolding-fips-tuf-createsecret | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fips-tuf-server | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-fulcio-createcerts | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-getoidctoken | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-rekor-createsecret | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-trillian-createdb | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-trillian-createtree | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-trillian-updatetree | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-tsa-createcertchain | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-tuf-createsecret | 0 | 0.7.25-r1 |
| Chainguard | sigstore-scaffolding-tuf-server | 0 | 0.7.26-r0 |
| Chainguard | slsa-verifier | 0 | 2.7.1-r3 |
| Chainguard | spire-agent | 0 | 1.13.3-r0 |
| Chainguard | spire-agent-fips | 0 | 1.13.3-r1 |
| Chainguard | spire-oidc-discovery-provider | 0 | 1.13.3-r0 |
| Chainguard | spire-oidc-discovery-provider-fips | 0 | 1.13.3-r1 |
| Chainguard | spire-server | 0 | 1.13.3-r0 |
| Chainguard | spire-server-fips | 0 | 1.13.3-r1 |
| Chainguard | tekton-chains | 0 | 0.26.0-r0 |
| Chainguard | tekton-chains-fips | 0 | 0.22.2-r0 |
| Chainguard | tkn | 0 | 0.42.0-r3 |
| Chainguard | tkn-fips | 0 | 0.42.0-r3 |
| Chainguard | trivy | 0 | 0.67.2-r1 |
| Chainguard | trivy-fips | 0 | 0.67.2-r1 |
| Chainguard | vexctl | 0 | 0.4.1-r1 |
| Chainguard | wolfictl | 0 | 0.38.21-r0 |
| Chainguard | zarf | 0 | 0.65.1-r1 |
| Chainguard | zot | 0 | 2.1.1-r3 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP5 | govulncheck-vulndb | 0 | 0.0.20241030T212825-150000.1.9.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | govulncheck-vulndb | 0 | 0.0.20241030T212825-150000.1.9.1 |
| SUSE:Package Hub 12 | govulncheck-vulndb | 0 | 0.0.20241104T154416-5.1 |
| Ubuntu:16.04:LTS | golang-github-endophage-gotuf | 0 | No fix |
| Ubuntu:18.04:LTS | golang-github-endophage-gotuf | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | golang-github-endophage-gotuf | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | golang-github-endophage-gotuf | 0 | No fix |
| Wolfi | aactl | 0 | 0.4.12-r37 |
| Wolfi | apko | 0 | 0.30.20-r0 |
| Wolfi | cosign | 0 | 3.0.2-r1 |
| Wolfi | cosign-fips | 0 | 3.0.2-r1 |
| Wolfi | falcoctl | 0 | 0.11.4-r1 |
| Wolfi | flux-source-controller | 0 | 1.7.3-r0 |
| Wolfi | flux-source-controller-iamguarded-compat | 0 | 1.7.3-r0 |
| Wolfi | gh | 0 | 2.83.0-r0 |
| Wolfi | gh-doc | 0 | 2.83.0-r0 |
| Wolfi | gitsign | 0 | 0.13.0-r5 |
| Wolfi | gitsign-config | 0 | 0.13.0-r5 |
| Wolfi | gitsign-credential-cache | 0 | 0.13.0-r5 |
| Wolfi | kubescape | 0 | 3.0.18-r0 |
| Wolfi | kyverno-1.12 | 0 | 1.12.7-r22 |
| Wolfi | kyverno-background-controller-1.12 | 0 | 1.12.7-r22 |
| Wolfi | kyverno-cleanup-controller-1.12 | 0 | 1.12.7-r22 |
| Wolfi | kyverno-cli-1.12 | 0 | 1.12.7-r22 |
| Wolfi | kyverno-init-container-1.12 | 0 | 1.12.7-r22 |
| Wolfi | kyverno-reports-controller-1.12 | 0 | 1.12.7-r22 |
| Wolfi | melange | 0 | 0.32.0-r1 |
| Wolfi | neuvector-sigstore-interface | 0 | 0_git20250629-r4 |
| Wolfi | policy-controller | 0 | 0.9.0-r10 |
| Wolfi | policy-controller-tester | 0 | 0.9.0-r10 |
| Wolfi | policy-controller-webhook | 0 | 0.9.0-r10 |
| Wolfi | rekor | 0 | 1.3.6-r9 |
| Wolfi | rekor-backfill-index | 0 | 1.3.6-r9 |
| Wolfi | rekor-backfill-redis | 0 | 1.3.6-r9 |
| Wolfi | rekor-cli | 0 | 1.3.6-r9 |
| Wolfi | rekor-server | 0 | 1.3.6-r9 |
| Wolfi | sigstore-scaffolding | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-cloudsqlproxy | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-ctlog-createctconfig | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-ctlog-managectroots | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-ctlog-verifyfulcio | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-fulcio-createcerts | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-getoidctoken | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-rekor-createsecret | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-trillian-createdb | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-trillian-createtree | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-trillian-updatetree | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-tsa-createcertchain | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-tuf-createsecret | 0 | 0.7.25-r1 |
| Wolfi | sigstore-scaffolding-tuf-server | 0 | 0.7.26-r0 |
| Wolfi | slsa-verifier | 0 | 2.7.1-r3 |
| Wolfi | spire-agent | 0 | 1.13.3-r0 |
| Wolfi | spire-oidc-discovery-provider | 0 | 1.13.3-r0 |
| Wolfi | spire-server | 0 | 1.13.3-r0 |
| Wolfi | tekton-chains | 0 | 0.26.0-r0 |
| Wolfi | tkn | 0 | 0.42.0-r3 |
| Wolfi | trivy | 0 | 0.67.2-r1 |
| Wolfi | vexctl | 0 | 0.4.1-r1 |
| Wolfi | wolfictl | 0 | 0.38.21-r0 |
| Wolfi | zarf | 0 | 0.65.1-r1 |
| Wolfi | zot | 0 | 2.1.1-r3 |
| openSUSE:Leap 15.5 | govulncheck-vulndb | 0 | 0.0.20241030T212825-150000.1.9.1 |
| openSUSE:Leap 15.6 | govulncheck-vulndb | 0 | 0.0.20241030T212825-150000.1.9.1 |
| openSUSE:Tumbleweed | govulncheck-vulndb | 0 | 0.0.20241030T212825-1.1 |
Related vulnerabilities
- CVE-2026-24686 go-tuf is a Go implementation of The Update Framework (TUF). Also affects github.com/theupdateframework/go-tuf/v2
- CVE-2026-23991 go-tuf is a Go implementation of The Update Framework (TUF). Also affects github.com/theupdateframework/go-tuf/v2
- CVE-2026-23992 go-tuf is a Go implementation of The Update Framework (TUF). Also affects github.com/theupdateframework/go-tuf/v2
- CVE-2026-33186 gRPC-Go is the Go language implementation of gRPC. Also affects aactl
- CVE-2025-15558 Docker CLI for Windows searches for plugin binaries in C:\ProgramData\Docker\cli-plugins… Also affects aactl
- CVE-2026-1229 The CombinedMult function in the CIRCL ecc/p384 package (secp384r1 curve) produces an… Also affects aactl
- CVE-2026-26958 filippo.io/edwards25519 is a Go library implementing the edwards25519 elliptic curve with… Also affects aactl
- CVE-2025-68121 During session resumption in crypto/tls, if the underlying Config has its ClientCAs or… Also affects aactl