Vulnerability description

Path traversal vulnerability in Gleam's handling of custom documentation pages allows arbitrary file read and file write outside the intended documentation output directory.

The documentation.pages entries from gleam.toml are incorporated into filesystem paths without sufficient validation or confinement to the intended project and documentation output directories. The documentation.pages[].path field can be used to write generated documentation files outside the intended build/dev/docs/<package>/ output directory. The documentation.pages[].source field can be used to read files outside the project directory and embed their contents into generated documentation output.

An attacker who can convince a victim to run gleam docs build on an untrusted project, or with untrusted gleam.toml content, can cause local files readable by the victim to be included in generated documentation artifacts, and can cause generated documentation files to be written outside the intended docs output directory.

This issue affects Gleam from 1.16.0 until 1.17.0.

Affected

pkg:sid/gleam.run/gleam

Module Source File Routine
compiler-core compiler-core/src/config.rs compiler_cli::docs::build_project
compiler-cli compiler-core/src/docs.rs compiler_core::docs::generate_html
compiler-cli/src/docs.rs
compiler-cli/src/fs.rs
Status Type Version Changes / Fixed in
affected semver 1.16.0 < 1.17.0

pkg:github/gleam-lang/gleam

Module Source File Routine
compiler-core compiler-core/src/config.rs compiler_cli::docs::build_project
compiler-cli compiler-core/src/docs.rs compiler_core::docs::generate_html
compiler-cli/src/docs.rs
compiler-cli/src/fs.rs
Status Type Version Changes / Fixed in
affected semver 1.16.0 < 1.17.0
affected git 61ed8deb65 < 8157061190

pkg:oci/gleam

Module Source File Routine
compiler-core compiler-core/src/config.rs compiler_cli::docs::build_project
compiler-cli compiler-core/src/docs.rs compiler_core::docs::generate_html
compiler-cli/src/docs.rs
compiler-cli/src/fs.rs
Status Type Version Changes / Fixed in
affected other v1.16.0-elixir < v1.17.0-elixir
affected other v1.16.0-erlang < v1.17.0-erlang
affected other v1.16.0-node < v1.17.0-node
affected other v1.16.0-node-slim < v1.17.0-node-slim
affected other v1.16.0-elixir-slim < v1.17.0-elixir-slim
affected other v1.16.0-erlang-slim < v1.17.0-erlang-slim
affected other v1.16.0-erlang-alpine < v1.17.0-erlang-alpine
affected other v1.16.0-elixir-alpine < v1.17.0-elixir-alpine
affected other v1.16.0-node-alpine < v1.17.0-node-alpine
affected other v1.16.0-scratch < v1.17.0-scratch

Configurations

The project must use custom documentation pages via documentation.pages in gleam.toml, and the victim must run gleam docs build on an untrusted project or with untrusted gleam.toml content. Projects that do not use custom documentation pages are not affected.

Workarounds

  • Avoid running gleam docs build on untrusted projects
  • Review documentation.pages entries in gleam.toml before generating documentation
  • Run documentation generation in a restricted or isolated environment (e.g. containers)

References

Credits

  • Finder: evipepota
  • Remediation developer: evipepota
  • Remediation reviewer: Louis Pilfold
  • Analyst: Jonatan Männchen / EEF

CVE record as JSON:  GET /cves/CVE-2026-32685.json
OSV record as JSON:  GET /osv/EEF-CVE-2026-32685.json