CVE-2025-8959
NoneCVSS
—
EPSS
0.6%
Published
Aug 15, 2025
CISA due date
—
Cloudanix analysis
A common download library can be tricked into reading files outside its intended folder, which may expose secrets on machines that pull modules or packages.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Path Traversal
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
HashiCorp go-getter’s subdirectory download path does not adequately constrain symbolic-link resolution. When fetching a subdirectory from a Git repository, HTTP archive, or similar source, crafted symlinks inside that tree can be followed, causing the client to read files outside the designated destination directory and resulting in unauthorized local file disclosure on the host performing the download.
Why it matters to the business
Build agents, developer workstations, and CI/CD jobs that pull modules or artifacts through go-getter (including downstream HashiCorp tooling such as Terraform and Packer) may leak secrets, credentials, private keys, or configuration from the host into working directories, logs, or published artifacts. The issue is information disclosure rather than remote code execution. It is not listed in CISA KEV, no public exploit is known, and EPSS remains low (~0.57% with a modest +5% 30-day rise). Residual risk is driven by how widely go-getter is vendored, not by active campaigns.
How an attack unfolds
An attacker publishes or compromises a remote source that victims fetch with go-getter. The source contains a subdirectory whose contents include symbolic links pointing outside the extracted tree (for example toward credential files or host configuration). When a user or automation job uses the subdirectory download feature against that source, the library follows the links and copies or exposes host files beyond the intended directory. The attacker then obtains the leaked material if the download output is committed, logged, packaged, or otherwise returned. No named threat actors or ransomware campaigns are associated with this CVE, and exploit maturity is none.
How to fix it
Upgrade hashicorp/go-getter to 1.7.9 or later, which includes the fix at commit e70221100018573cdc74411c95c19b2a372f6728. Rebuild and redeploy every binary that vendors or module-pins go-getter. Update go.mod/go.sum (and any lockfiles or vendor directories) so no pre-1.7.9 copy remains. Restrict go-getter sources to trusted origins and treat untrusted subdirectory downloads as high risk until all dependents are upgraded.
How to confirm the fix worked
Confirm go-getter is at 1.7.9 or newer in module files, vendor trees, container images, and compiled binaries (for example via go version -m). Run software composition analysis across repositories and release artifacts. After upgrade, verify that subdirectory fetches from archives or repositories containing outbound symlinks no longer copy files outside the destination directory, and that CI jobs using Terraform, Packer, or custom go-getter callers pick up the rebuilt binaries.
Typical attack path
- Attacker prepares a Git repository or archive whose subdirectory contains outbound symbolic links.
- Victim process (application, Terraform/Packer-style workflow, or CI job) invokes go-getter subdirectory download against that source.
- go-getter follows the links and reads files outside the designated destination.
- Sensitive content is written into the working tree, cache, logs, or build artifacts.
- Attacker recovers the disclosed files from a subsequent artifact, repository, or error output.
How to detect it
No in-the-wild exploitation is reported and exploit maturity is none, so hunting is retrospective and low-signal. Review CI and local logs for go-getter, Terraform, or Packer fetches of subdirectories from untrusted Git or HTTP sources, especially around and after 2025-08-15. Inspect destination and cache directories for unexpected symbolic links whose targets resolve outside the download root, and for host files (credentials, keys, configuration) that appeared in module or artifact trees after a get. Correlate process file-access during get operations with reads of sensitive paths. Absence of those artifacts does not prove the host was never exposed.
What your security team should do
- Inventory all first-party and third-party binaries that import hashicorp/go-getter and identify versions below 1.7.9.
- Prioritize upgrades of CI runners, module caches, and developer tooling that fetch remote subdirectories.
- Pin and rebuild to go-getter 1.7.9 (commit e70221100018573cdc74411c95c19b2a372f6728) and block pre-fix versions in dependency policy.
- Limit go-getter to allowlisted, trusted remotes until upgrades are complete.
- Because EPSS is low, KEV is false, and no public exploit exists, treat this as a standard dependency-hygiene item rather than an emergency incident, but do not leave long-lived unpatched images in production.
- Review recent download working trees for unexpected files that may indicate prior symlink follow.
The record
HashiCorp's go-getter library subdirectory download feature is vulnerable to symlink attacks leading to unauthorized read access beyond the designated directory boundaries. This vulnerability, identified as CVE-2025-8959, is fixed in go-getter 1.7.9.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Go | github.com/hashicorp/go-getter | 0 | 1.7.9 |
| Chainguard | chainctl | 0 | 0.2.126-r0 |
| Chainguard | cloudbeat | 0 | 9.1.2-r2 |
| Chainguard | cloudbeat-fips | 0 | 9.1.2-r2 |
| Chainguard | conftest | 0 | 0.62.0-r3 |
| Chainguard | conftest-fips | 0 | 0.62.0-r3 |
| Chainguard | docker-credential-cgr | 0 | 0.2.126-r0 |
| Chainguard | grype | 0 | 0.98.0-r1 |
| Chainguard | grype-db | 0 | 0.38.0-r1 |
| Chainguard | grype-db-manager | 0 | 0.38.0-r1 |
| Chainguard | grype-fips | 0 | 0.98.0-r1 |
| Chainguard | k9s | 0 | 0.50.9-r6 |
| Chainguard | k9s-fips | 0 | 0.50.9-r5 |
| Chainguard | kots | 0 | 1.126.0-r1 |
| Chainguard | kots-compat | 0 | 1.126.0-r1 |
| Chainguard | kots-symlink-compat | 0 | 1.126.0-r1 |
| Chainguard | kubescape | 0 | 3.0.38-r1 |
| Chainguard | opentofu-1.10 | 0 | 1.10.5-r2 |
| Chainguard | opentofu-1.10-compat | 0 | 1.10.5-r2 |
| Chainguard | opentofu-1.10-local-provider-config | 0 | 1.10.5-r2 |
| Chainguard | opentofu-1.7 | 0 | 1.7.10-r2 |
| Chainguard | opentofu-1.7-compat | 0 | 1.7.10-r2 |
| Chainguard | opentofu-1.7-local-provider-config | 0 | 1.7.10-r2 |
| Chainguard | opentofu-1.8 | 0 | 1.8.11-r2 |
| Chainguard | opentofu-1.8-compat | 0 | 1.8.11-r2 |
| Chainguard | opentofu-1.8-local-provider-config | 0 | 1.8.11-r2 |
| Chainguard | opentofu-1.9 | 0 | 1.9.3-r2 |
| Chainguard | opentofu-1.9-compat | 0 | 1.9.3-r2 |
| Chainguard | opentofu-1.9-local-provider-config | 0 | 1.9.3-r2 |
| Chainguard | opentofu-fips-1.10 | 0 | 1.10.5-r2 |
| Chainguard | opentofu-fips-1.7 | 0 | 1.7.10-r2 |
| Chainguard | opentofu-fips-1.9 | 0 | 1.9.3-r2 |
| Chainguard | rancher-fleet | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-agent | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-agent-fips | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-cli | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-cli-fips | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-controller | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-controller-fips | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-fips | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-fips-agent | 0 | 0.13.0-r3 |
| Chainguard | rancher-fleet-termination-log | 0 | 0.13.0-r3 |
| Chainguard | snyk-cli | 0 | 1.1298.3-r1 |
| Chainguard | steampipe | 0 | 2.1.0-r4 |
| Chainguard | syft | 0 | 1.31.0-r1 |
| Chainguard | syft-fips | 0 | 1.31.0-r1 |
| Chainguard | terraform-1.10 | 0 | 1.10.5-r12 |
| Chainguard | terraform-1.10-compat | 0 | 1.10.5-r12 |
| Chainguard | terraform-1.10-local-provider-config | 0 | 1.10.5-r12 |
| Chainguard | terraform-1.11 | 0 | 1.11.4-r7 |
| Chainguard | terraform-1.11-compat | 0 | 1.11.4-r7 |
| Chainguard | terraform-1.11-local-provider-config | 0 | 1.11.4-r7 |
| Chainguard | terraform-1.12 | 0 | 1.12.2-r4 |
| Chainguard | terraform-1.12-compat | 0 | 1.12.2-r4 |
| Chainguard | terraform-1.12-local-provider-config | 0 | 1.12.2-r4 |
| Chainguard | terraform-1.9 | 0 | 1.9.8-r17 |
| Chainguard | terraform-1.9-compat | 0 | 1.9.8-r17 |
| Chainguard | terraform-1.9-local-provider-config | 0 | 1.9.8-r17 |
| Chainguard | terraform-compat | 0 | 1.5.7-r34 |
| Chainguard | terraform-fips-1.10 | 0 | 1.10.5-r13 |
| Chainguard | terraform-fips-1.10-compat | 0 | 1.10.5-r13 |
| Chainguard | terraform-fips-1.10-local-provider-config | 0 | 1.10.5-r13 |
| Chainguard | terraform-fips-1.11 | 0 | 1.11.4-r7 |
| Chainguard | terraform-fips-1.11-compat | 0 | 1.11.4-r7 |
| Chainguard | terraform-fips-1.11-local-provider-config | 0 | 1.11.4-r7 |
| Chainguard | terraform-fips-1.12 | 0 | 1.12.2-r3 |
| Chainguard | terraform-fips-1.12-compat | 0 | 1.12.2-r3 |
| Chainguard | terraform-fips-1.12-local-provider-config | 0 | 1.12.2-r3 |
| Chainguard | terraform-fips-1.9 | 0 | 1.9.8-r17 |
| Chainguard | terraform-fips-1.9-compat | 0 | 1.9.8-r17 |
| Chainguard | terraform-fips-1.9-local-provider-config | 0 | 1.9.8-r17 |
| Chainguard | terraform-local-provider-config | 0 | 1.5.7-r34 |
| Chainguard | terragrunt | 0 | 0.85.0-r1 |
| Chainguard | terragrunt-docs | 0 | 0.85.0-r1 |
| Chainguard | tflint | 0 | 0.58.1-r3 |
| Chainguard | tflint-compat | 0 | 0.58.1-r3 |
| Chainguard | tfsec | 0 | 1.28.14-r5 |
| Chainguard | trivy | 0 | 0.65.0-r3 |
| Chainguard | trivy-fips | 0 | 0.65.0-r3 |
| Chainguard | trivy-operator | 0 | 0.28.0-r1 |
| Chainguard | trivy-operator-fips | 0 | 0.28.0-r3 |
| Chainguard | wolfictl | 0 | 0.38.11-r1 |
| Chainguard | xeol | 0 | 0.10.8-r12 |
| Chainguard | xeol-compat | 0 | 0.10.8-r12 |
| Chainguard | xeol-fips | 0 | 0.10.8-r12 |
| Chainguard | zarf | 0 | 0.60.0-r2 |
| Chainguard | zot | 0 | 2.1.7-r3 |
| Debian:11 | golang-github-hashicorp-go-getter | 0 | No fix |
| Debian:12 | golang-github-hashicorp-go-getter | 0 | No fix |
| Wolfi | conftest | 0 | 0.62.0-r3 |
| Wolfi | grype | 0 | 0.98.0-r1 |
| Wolfi | k9s | 0 | 0.50.9-r6 |
| Wolfi | kots | 0 | 1.126.0-r1 |
| Wolfi | kots-compat | 0 | 1.126.0-r1 |
| Wolfi | kots-symlink-compat | 0 | 1.126.0-r1 |
| Wolfi | kubescape | 0 | 3.0.38-r1 |
| Wolfi | opentofu-1.10 | 0 | 1.10.5-r2 |
| Wolfi | opentofu-1.10-compat | 0 | 1.10.5-r2 |
| Wolfi | opentofu-1.10-local-provider-config | 0 | 1.10.5-r2 |
| Wolfi | opentofu-1.7 | 0 | 1.7.10-r2 |
| Wolfi | opentofu-1.7-compat | 0 | 1.7.10-r2 |
| Wolfi | opentofu-1.7-local-provider-config | 0 | 1.7.10-r2 |
| Wolfi | opentofu-1.8 | 0 | 1.8.11-r2 |
| Wolfi | opentofu-1.8-compat | 0 | 1.8.11-r2 |
| Wolfi | opentofu-1.8-local-provider-config | 0 | 1.8.11-r2 |
| Wolfi | opentofu-1.9 | 0 | 1.9.3-r2 |
| Wolfi | opentofu-1.9-compat | 0 | 1.9.3-r2 |
| Wolfi | opentofu-1.9-local-provider-config | 0 | 1.9.3-r2 |
| Wolfi | rancher-fleet | 0 | 0.13.0-r3 |
| Wolfi | rancher-fleet-agent | 0 | 0.13.0-r3 |
| Wolfi | rancher-fleet-cli | 0 | 0.13.0-r3 |
| Wolfi | rancher-fleet-controller | 0 | 0.13.0-r3 |
| Wolfi | rancher-fleet-termination-log | 0 | 0.13.0-r3 |
| Wolfi | snyk-cli | 0 | 1.1298.3-r1 |
| Wolfi | steampipe | 0 | 2.1.0-r4 |
| Wolfi | syft | 0 | 1.31.0-r1 |
| Wolfi | terraform-compat | 0 | 1.5.7-r34 |
| Wolfi | terraform-local-provider-config | 0 | 1.5.7-r34 |
| Wolfi | terragrunt | 0 | 0.85.0-r1 |
| Wolfi | terragrunt-docs | 0 | 0.85.0-r1 |
| Wolfi | tflint | 0 | 0.58.1-r3 |
| Wolfi | tflint-compat | 0 | 0.58.1-r3 |
| Wolfi | tfsec | 0 | 1.28.14-r5 |
| Wolfi | trivy | 0 | 0.65.0-r3 |
| Wolfi | trivy-operator | 0 | 0.28.0-r1 |
| Wolfi | wolfictl | 0 | 0.38.11-r1 |
| Wolfi | xeol | 0 | 0.10.8-r12 |
| Wolfi | xeol-compat | 0 | 0.10.8-r12 |
| Wolfi | zarf | 0 | 0.60.0-r2 |
| Wolfi | zot | 0 | 2.1.7-r3 |
| openSUSE:Tumbleweed | terragrunt | 0 | 0.85.1-1.1 |
Related vulnerabilities
- CVE-2024-6257 HashiCorp’s go-getter library can be coerced into executing Git update on an existing… Also affects github.com/hashicorp/go-getter
- CVE-2024-3817 HashiCorp’s go-getter library is vulnerable to argument injection when executing Git to… Also affects github.com/hashicorp/go-getter
- CVE-2026-34986 Go JOSE provides an implementation of the Javascript Object Signing and Encryption set of… Also affects chainctl
- CVE-2026-33481 Syft is a a CLI tool and Go library for generating a Software Bill of Materials (SBOM)… Also affects chainctl
- CVE-2026-33809 A maliciously crafted TIFF file can cause image decoding to attempt to allocate up 4GiB… Also affects chainctl
- CVE-2026-27141 Due to missing nil check, sending 0x0a-0x0f HTTP/2 frames will cause a running server to… Also affects chainctl
- CVE-2026-1229 The CombinedMult function in the CIRCL ecc/p384 package (secp384r1 curve) produces an… Also affects chainctl
- CVE-2026-25934 go-git is a highly extensible git implementation library written in pure Go. Also affects chainctl