Skip to main content
← All vulnerabilities
CVE-2026-42795

Symlink Following in Hex Package Export Allows Embedding Files Outside Project Root

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 1.17.0, v1.17.0-elixir, v1.17.0-erlang, v1.17.0-node, v1.17.0-node-slim, and 6 more
None on Exploit-DB, Metasploit or GitHub
  • Exploitation: poc
  • Automatable: no
  • Technical impact: partial

Summary

Symlink following vulnerability in Gleam's Hex package export allows files outside the project root to be embedded in the generated package tarball. The file collection helpers (gleam_files, native_files, private_files) in compiler-cli/src/fs.rs use follow_links(true) when walking publishable directories such as src/ and priv/. The collected paths are added to the package archive via add_path_to_tar in compiler-cli/src/publish.rs without verifying that the resolved target remains within the project root. A symlink placed under a publishable directory will cause gleam export hex-tarball or gleam publish to embed the contents of the symlink target into the generated Hex package. An attacker with write access to the project repository can place a symlink in src/ or priv/ pointing to an arbitrary file. When a maintainer or CI pipeline runs gleam publish or gleam export hex-tarball, local files readable by the publisher (such as secrets, tokens, or SSH keys) are silently embedded into the published package artifact. This issue affects Gleam from 0.10.0-rc1 until 1.17.0.

Timeline

  1. CVE published
  2. CISA SSVC assessment

    Exploitation: poc · Automatable: no · Technical impact: partial

  3. Record last updated

Affected versions

  • gleam

    From 0.10.0-rc1 · fixed in 1.17.0

  • gleam-lang/gleam

    From 0.10.0-rc1 · fixed in 1.17.0

  • gleam-lang/gleam

    From v0.10.0-rc1-elixir · fixed in v1.17.0-elixir; From v0.10.0-rc1-erlang · fixed in v1.17.0-erlang; From v0.10.0-rc1-node · fixed in v1.17.0-node; From v0.10.0-rc1-node-slim · fixed in v1.17.0-node-slim; From v0.10.0-rc1-elixir-slim · fixed in v1.17.0-elixir-slim; From v0.10.0-rc1-erlang-slim · fixed in v1.17.0-erlang-slim; From v0.10.0-rc1-erlang-alpine · fixed in v1.17.0-erlang-alpine; From v0.10.0-rc1-elixir-alpine · fixed in v1.17.0-elixir-alpine; From v0.10.0-rc1-node-alpine · fixed in v1.17.0-node-alpine; From v0.10.0-rc1-scratch · fixed in v1.17.0-scratch

References 4

GitHub · gleam-lang/gleam

cna.erlef.org

osv.dev