Vulnerabilities in pkg:golang/github.com/gruntwork-io/terragrunt

PACKAGE
Advisory Identifier: GHSA-wv6g-x823-wx9m
Advisory Summary

CVE-2026-64672 is a MODERATE terragrunt catalog predictable temp symlink vulnerability (CWE-377: Insecure Temporary File) affecting Github.com/gruntwork io/terragrunt libraries in the Go ecosystem. The issue involves terragrunt catalog predictable temp symlink clobber. Remediation is available by upgrading affected packages to version 1.1.1.

2 Known Advisory Record(s)
Package Vulnerability Intelligence

pkg:golang/github.com/gruntwork-io/terragrunt

2 Known Advisory Record(s)

Vulnerability advisories affecting package pkg:golang/github.com/gruntwork-io/terragrunt. Select an advisory below to view technical details or fixes.

Advisory ID CVE / NVD Severity Summary
GHSA-wv6g-x823-wx9m CVE-2026-64672 MODERATE Terragrunt catalog predictable temp symlink clobber
GHSA-8394-6f8r-whxg CVE-2026-45099 MODERATE Terragrunt: Arbitrary File Deletion via Malicious Module Manifest

CVE-2026-64672 at a Glance

CVE Identifier CVE-2026-64672
GHSA Identifier GHSA-wv6g-x823-wx9m
Severity MODERATE
CVSS v3.1 Base Score N/A
CWE Classification CWE-377: Insecure Temporary File
Affected Product Github.com/gruntwork io/terragrunt
Package Ecosystem Go
Published Date
Last Updated

How to Fix CVE-2026-64672

To remediate this vulnerability, upgrade all affected Github.com/gruntwork io/terragrunt dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

github.com/gruntwork-io/terragrunt fixed: 1.1.1
Upgrade github.com/gruntwork-io/terragrunt to 1.1.1
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for github.com/gruntwork-io/terragrunt

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-64672, inspect your project dependencies for Github.com/gruntwork io/terragrunt:

inspect dependencies for github.com/gruntwork-io/terragrunt

Analyze the terminal output to locate any version of Github.com/gruntwork io/terragrunt in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.1.1), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-377: Insecure Temporary File, where creating and using insecure temporary files can leave application and system data vulnerable to attack. In Github.com/gruntwork io/terragrunt, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary Terragrunt's `terragrunt catalog` command clones each repository referenced in your catalog configuration into a temporary working directory. In affected versions, the clone path it derived was deterministic and sat under the shared system temporary directory, in the form `<tmp>/catalog-<base64 sha1 of the repo URL>`. Because that path was predictable and Terragrunt followed a symlink already present there instead of rejecting it, a local attacker could plant a symlink at that path and cause Terragrunt to delete a directory and re-clone into it outside the intended temporary root. ### Impact This affected users who ran `terragrunt catalog` on a host they shared with other local users or processes they did not fully trust, such as a multi-user server or a shared CI runner. The attack required a local attacker: a separate local user or process able to write to the shared system temporary directory. It was not remotely exploitable, and the victim had to run `terragrunt catalog` while the attacker's symlink was already in place. Because the predictable path depended only on the repository URL being cataloged and the location of the system temporary directory, the attacker could compute it in advance and plant a symlink there before the victim ran the command. When the victim ran `terragrunt catalog`, Terragrunt followed the symlink out of the intended temporary root, deleted an existing `<repoName>` directory under the attacker-chosen parent, and repopulated that path with the cloned repository contents. All of this happened in the security context of the user running Terragrunt. The attacker controlled the parent directory the symlink pointed to, but not the leaf name: the leaf was fixed to `<repoName>`, derived from the repository URL the victim cataloged. The primitive was deletion of an existing `<repoName>` directory outside the temporary root, followed by a re-clone into that same path. On a single-user machine with no hostile local processes, exposure was minimal. ### Affected Versions - Terragrunt `< v1.1.1` ### Patches This vulnerability has been resolved in Terragrunt version `v1.1.1`. All users are strongly advised to upgrade. ### Workarounds If you cannot upgrade immediately, ensure that you do not allow untrusted parties to control the values of `TMPDIR`, `TMP`, and `TEMP` in environments where you run `terragrunt catalog`. ### Technical Details When you run `terragrunt catalog`, the catalog service iterates over the repositories in your configuration and prepares a local clone of each one. In affected versions, for a given repository URL it built a clone path by hashing the URL and joining the result under the shared system temporary directory: ``` <tmp>/catalog-<base64 sha1 of the repo URL> ``` This path was fully determined by the repository URL and the location of the system temporary directory, so anyone else on the machine who knew which repository a victim would catalog could compute it in advance. The catalog service passed this path into its clone preparation step. As a result, an attacker who placed a symlink at `<tmp>/catalog-<hash>` pointing at a directory of their choosing caused both the removal and the re-clone to operate through that symlink. Both landed at `<attacker-chosen-parent>/<repoName>`, outside the intended temporary root. Terragrunt `v1.1.1` no longer derives a predictable clone path, so an attacker can no longer position a symlink at a location known in advance. ## Credit We would like to thank ([@br0x2](https://github.com/br0x2)) for discovering and responsibly disclosing this vulnerability.

CVE-2026-64672 Affected Github.com/gruntwork io/terragrunt Versions

1 component(s)
Fixed Versions:
1.1.1
Product / Package Ecosystem Affected Versions Fixed Version
github.com/gruntwork-io/terragrunt
Go
< 1.1.1
1.1.1

References

Frequently Asked Questions

What is CVE-2026-64672?
CVE-2026-64672 is a security vulnerability in Github.com/gruntwork io/terragrunt involving Terragrunt catalog predictable temp symlink clobber under CWE-377: Insecure Temporary File.
Which Github.com/gruntwork io/terragrunt versions are affected?
Affected versions include releases prior to 1.1.1 across affected packages: github.com/gruntwork-io/terragrunt.
What version fixes CVE-2026-64672?
Upgrading to 1.1.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is github.com/gruntwork-io/terragrunt affected?
Yes, github.com/gruntwork-io/terragrunt is affected in releases prior to 1.1.1. Upgrade your dependency to 1.1.1 or later.
What CWE is associated with CVE-2026-64672?
CVE-2026-64672 is classified under CWE-377: Insecure Temporary File (Creating and using insecure temporary files can leave application and system data vulnerable to attack.).
How can I check Go dependencies for CVE-2026-64672?
Run the dependency tree command: 'inspect dependencies for github.com/gruntwork-io/terragrunt'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-wv6g-x823-wx9m",
  "modified" : "2026-10-15T18:21:35Z",
  "published" : "2026-10-15T18:21:35Z",
  "aliases" : [ "CVE-2026-64672" ],
  "summary" : "Terragrunt catalog predictable temp symlink clobber",
  "details" : "### Summary\n\nTerragrunt's `terragrunt catalog` command clones each repository referenced in your catalog configuration into a temporary working directory. In affected versions, the clone path it derived was deterministic and sat under the shared system temporary directory, in the form `<tmp>/catalog-<base64 sha1 of the repo URL>`. Because that path was predictable and Terragrunt followed a symlink already present there instead of rejecting it, a local attacker could plant a symlink at that path and cause Terragrunt to delete a directory and re-clone into it outside the intended temporary root.\n\n### Impact\n\nThis affected users who ran `terragrunt catalog` on a host they shared with other local users or processes they did not fully trust, such as a multi-user server or a shared CI runner. The attack required a local attacker: a separate local user or process able to write to the shared system temporary directory. It was not remotely exploitable, and the victim had to run `terragrunt catalog` while the attacker's symlink was already in place.\n\nBecause the predictable path depended only on the repository URL being cataloged and the location of the system temporary directory, the attacker could compute it in advance and plant a symlink there before the victim ran the command. When the victim ran `terragrunt catalog`, Terragrunt followed the symlink out of the intended temporary root, deleted an existing `<repoName>` directory under the attacker-chosen parent, and repopulated that path with the cloned repository contents. All of this happened in the security context of the user running Terragrunt.\n\nThe attacker controlled the parent directory the symlink pointed to, but not the leaf name: the leaf was fixed to `<repoName>`, derived from the repository URL the victim cataloged. The primitive was deletion of an existing `<repoName>` directory outside the temporary root, followed by a re-clone into that same path. On a single-user machine with no hostile local processes, exposure was minimal.\n\n### Affected Versions\n\n- Terragrunt `< v1.1.1`\n\n### Patches\n\nThis vulnerability has been resolved in Terragrunt version `v1.1.1`.\n\nAll users are strongly advised to upgrade.\n\n### Workarounds\n\nIf you cannot upgrade immediately, ensure that you do not allow untrusted parties to control the values of `TMPDIR`, `TMP`, and `TEMP` in environments where you run `terragrunt catalog`.\n\n### Technical Details\n\nWhen you run `terragrunt catalog`, the catalog service iterates over the repositories in your configuration and prepares a local clone of each one. In affected versions, for a given repository URL it built a clone path by hashing the URL and joining the result under the shared system temporary directory:\n\n```\n<tmp>/catalog-<base64 sha1 of the repo URL>\n```\n\nThis path was fully determined by the repository URL and the location of the system temporary directory, so anyone else on the machine who knew which repository a victim would catalog could compute it in advance. The catalog service passed this path into its clone preparation step.\n\nAs a result, an attacker who placed a symlink at `<tmp>/catalog-<hash>` pointing at a directory of their choosing caused both the removal and the re-clone to operate through that symlink. Both landed at `<attacker-chosen-parent>/<repoName>`, outside the intended temporary root.\n\nTerragrunt `v1.1.1` no longer derives a predictable clone path, so an attacker can no longer position a symlink at a location known in advance.\n\n## Credit\n\nWe would like to thank ([@br0x2](https://github.com/br0x2)) for discovering and responsibly disclosing this vulnerability.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "github.com/gruntwork-io/terragrunt"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.1.1"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/gruntwork-io/terragrunt/security/advisories/GHSA-wv6g-x823-wx9m"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/gruntwork-io/terragrunt/pull/6438"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/gruntwork-io/terragrunt/commit/668891c5a2ad2996f134bb8b00098754674ea94a"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/gruntwork-io/terragrunt"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-377", "CWE-59" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-10-15T18:21:35Z",
    "nvd_published_at" : null
  }
}