Infracost: Arbitrary file read via config-template readFile symlink traversal
🔗 CVE IDs covered (1)
📋 Description
Impact
Path traversal via link following in the Infracost config-template parser. The readFile, pathExists, isDir, and matchPaths template functions confined repo-supplied paths with a lexical filepath.Rel check plus a leaf-only os.Lstat:
{{ readFile "evil/file" }}
With an intermediate directory symlink committed in the repo (evil -> /), the path is lexically clean and the leaf is a regular file, so both checks pass, but os.ReadFile follows the symlink and reads outside the checkout. The contents are rendered into the generated config and surfaced via the Infracost dashboard and PR comment, so anyone who can open a pull request can read files off the runner.
Affects infracost up to and including v0.10.44. Successful exploitation reads any file the CLI process can reach on the runner. Impact depends on what the run exposes: under on: pull_request (the configuration in Infracost's documentation) fork pull requests run without secrets and with a read-only token, so exposure is limited. If Infracost runs under pull_request_target, or is triggered by a same-repository pull request, the read reaches the repository's secrets, enabling secret theft. The patch confines all four functions regardless of trigger.
Patches
Fixed in v0.10.45 (#3586) by routing all four functions through security.IsPathAllowed, which resolves symlinks anywhere in the path before a segment-aware containment check. The same fix landed in config#14 and parser#144.
- Installed via the official script, a package manager, or the
latestDocker tag: upgrade tov0.10.45(or later) to receive the fix. - Pinned to a specific version or image digest: bump to
v0.10.45.
Workarounds
No full fix without upgrading. To limit exposure: run Infracost under on: pull_request rather than pull_request_target, and keep fork pull requests from receiving secrets (the defaults).
🎯 Affected products1
- go/github.com/infracost/infracost:< 0.10.45
🔗 References (6)
- https://github.com/infracost/infracost/security/advisories/GHSA-mmg6-4qmv-6pc8
- https://nvd.nist.gov/vuln/detail/CVE-2026-71493
- https://github.com/infracost/infracost/pull/3586
- https://github.com/infracost/infracost/commit/4d39331afc0e27752d16d9d91c34583e5e8487fb
- https://github.com/infracost/infracost/releases/tag/v0.10.45
- https://github.com/advisories/GHSA-mmg6-4qmv-6pc8