Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit malicious PR to Hugo repo
-
DeliveryPlant symlink to sensitive file plus reader plugin
-
ExploitBuild follows symlink past lexical sandbox
-
ExecutionPostCSS/Babel reads out-of-bounds file
-
ImpactSecret file contents embedded in published site
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
|
| Exploitation Conditions | Requires ALL of: (1) the Hugo project invokes Node.js-based asset pipelines - css.PostCSS, css.TailwindCSS, or js.Babel (projects that never call these tools are unaffected); (2) the attacker can introduce content into the build tree, e.g. via a pull request or other contribution path, including both an escaping symlink (assets/css/x.css -> /etc/passwd) and a PostCSS plugin configured to read that path; and (3) the project actually builds the attacker-supplied content - automated CI/deploy-preview builds meet this with no human interaction, whereas maintainer-review-then-merge workflows require the maintainer to build the change. It affects the DEFAULT security configuration (no hardening toggle needed), and only Hugo v0.161.0-v0.165.0. Impact is limited to reading files accessible to the build process (confidentiality only); there is no code execution or write primitive. |
| Impact | This is a genuine but conditional confidentiality flaw, not a drop-everything emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N, score 8.7) paints it as trivially exploitable and unauthenticated, but the description reveals meaningful preconditions that AC:L understates: the target project must invoke Hugo's Node.js asset tools (css.PostCSS, css.TailwindCSS, or js.Babel), and the attacker must both plant an escaping symlink AND supply a PostCSS plugin that reads it, then get the project to build that content. I therefore assess AC:H (and AT:P in 4.0), lowering my own 3.1 estimate to ~5.9. Impact is confined to confidentiality (VC:H/VI:N/VA:N, CWE-59 arbitrary file read of anything the build process can read) with no integrity, availability, or code-execution primitive and no scope change. On exploitation signals: EPSS is not provided, the CVE is NOT in CISA KEV, and no POC is referenced - so there is no public exploit identified at time of analysis and no evidence of active exploitation. The PR:N in the vector is defensible only in the sense that anyone can open a pull request; realistic exploitation still hinges on the untrusted content actually being built (automated CI preview builds satisfy this without human review; human-merge workflows add friction). Net: a real, patch-worthy issue for teams that build untrusted contributions with Node.js tooling, but lower real-world urgency than the 8.7 suggests. |
| Exploit ScenarioDerived | An attacker opens a pull request to a public Hugo site repository that uses PostCSS/Tailwind/Babel, adding a symlink like assets/css/x.css pointing to /etc/passwd (or a secrets/env file) plus a PostCSS plugin configured to read it. When the project's build runs on the contributed content - e.g. an automated CI/deploy-preview pipeline - Hugo's Node.js tool follows the symlink outside the sandbox and the target file's contents are read and can be embedded into the generated site. No public exploit code is referenced, but the technique is straightforward and well-described in the advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Arbitrary file read in Hugo v0.161.0 through v0.165.0 allows an attacker who can contribute content to a Hugo project - for example by opening a pull request - to commit a symlink such as assets/css/x.css pointing to /etc/passwd alongside a PostCSS plugin that reads it, causing any file readable by the build process to be disclosed and potentially published into the generated site. The flaw is remotely triggerable by unauthenticated attackers per the reported vector (PR:N), but in practice it only bites projects that actually invoke Node.js-based asset pipelines (css.PostCSS, css.TailwindCSS, js.Babel) under the default security configuration, and only when the attacker-supplied content is really built - automated CI or deploy-preview builds satisfy this with no human interaction, while review-then-merge workflows require a maintainer to build the change. Impact is confidentiality-only: there is no code execution or write primitive, and no public exploit identified at time of analysis; projects that never call the Node.js tools are unaffected.
RemediationAI
Upgrade to Hugo v0.166.0, the vendor-released fix (Vendor-released patch: v0.166.0), which validates the allowed paths and fails the build whenever a symbolic link resolves outside them; see https://github.com/gohugoio/hugo/security/advisories/GHSA-x3mx-cm49-8m9c for the authoritative guidance. If upgrading immediately is not possible, the most effective compensating control is to eliminate the attack surface by not invoking the Node.js tools - remove css.PostCSS, css.TailwindCSS and js.Babel calls from the build (or skip site builds that contain untrusted contributions); the trade-off is loss of PostCSS/TailwindCSS/Babel processing, so precompile those assets in a trusted environment instead. Additionally, stop automatically building untrusted pull-request content: gate deploy-preview or CI builds of external contributions behind maintainer approval so a symlink-plus-plugin payload is never executed without review, accepting reduced preview automation as the cost. Finally, reduce the blast radius of any successful read by running the Hugo build as a dedicated unprivileged user or inside a container with a minimal, read-only filesystem holding only the repository and build dependencies, so that files such as /etc/passwd or host build secrets are not reachable in the first place; this does not fix the flaw but limits what could be disclosed. Note that because CWE-59 link resolution is the underlying issue, adding a CI pre-build check that rejects any committed symlink whose target leaves the repository is a cheap additional guard with negligible side effects.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Hugo optionally delegates certain asset transformations - css.PostCSS, css.TailwindCSS and js.Babel - to Node.js subprocesses, which from v0.161.0 onward it launches under the Node.js permission model so that filesystem reads are confined to the project directory and explicitly configured mounts. The root cause is CWE-59 (Improper Link Resolution Before File Access), specifically the interaction between Hugo's sandbox policy and the Node.js permission model's path validation: the permission check compares only the lexical, un-resolved path string against the allowed set, so a symbolic link whose own path lies inside the project (for example assets/css/x.css) is accepted even when its target resolves outside the permitted roots, such as /etc/passwd. Because Hugo never canonicalized or re-validated the symlink target, the sandbox boundary was effectively cosmetic, and any file the build process could read became reachable to a plugin executing inside that pseudo-sandbox. The affected package is identified by CPE cpe:2.3:a:gohugoio:hugo:*:*:*:*:*:*:*:* covering the v0.161.0-v0.165.0 window (EUVD records the range as hugo 0.161.0 <0.166.0), meaning the exposure was introduced with the Node.js permission-model integration and removed by the v0.166.0 fix, which now scans the allowed paths and aborts the build when a symbolic link resolves outside them.
Know when Hugo gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
AC:H because exploitation needs Node.js tools enabled plus a crafted symlink and a reader plugin; PR:N as anyone can contribute a PR; confidentiality-only file read, no integrity/availability or scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Hugo versions from v0.161.0 through v0.165.0 run Node.js tools (css.PostCSS, css.TailwindCSS, js.Babel) under the Node.js permission model to restrict file system reads to the project directory and configured mounts. Because the Node.js permission model validates only the lexical path and follows symbolic links that point outside the allowed set, Hugo did not detect symlinks escaping the sandbox. An attacker who can contribute content to a Hugo project (for example via a pull request) can commit a symlink such as assets/css/x.css -> /etc/passwd together with a PostCSS plugin that reads it, allowing any file readable by the Hugo build process to be disclosed and potentially embedded in the published site. This affects builds using the default security configuration; projects that do not invoke Node.js tools are unaffected. Fixed in v0.166.0, which scans allowed paths and fails the build when a symbolic link resolves outside them.
Technical POC Analysis
Evidence note: the supplied GHSA-x3mx-cm49-8m9c text labels this Moderate, records "No known CVE" and "No CWEs", while the task header supplies CVE-2026-100690 / CVSS 8.7 / CWE-59.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
An arbitrary file read vulnerability in Hugo versions v0.161.0 through v0.165.0 lets an unauthenticated actor who can contribute content to a project - such as by opening a pull request - cause the site build to read any file accessible to the build process, potentially publishing that content into the live site. Organizations running Hugo-based web properties with Node.js asset pipelines (PostCSS, Tailwind, Babel) on automated CI or deploy-preview builds are exposed with no human interaction required. Leadership should care because the exposure is silent disclosure of configuration files, credentials, or sensitive internal data onto publicly reachable web properties, and it is confirmed as remotely triggerable under the reported PR:N vector.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Hugo is a fast and Flexible Static Site Generator built in Go. Rated high severity (CVSS 8.5), this vulnerability is rem
Sandbox/permission-restriction bypass in the Hugo static site generator (versions after v0.43, fixed in v0.165.0) lets a
Arbitrary command execution in Hugo 0.162.0 through 0.164.x occurs when the static site generator builds a project whose
Arbitrary file disclosure in the Hugo static site generator (versions after v0.123.0 and before v0.165.0) lets an attack
Symlink-following flaws in Hugo's theme and module mount confinement allow files outside a project's mount roots to be r
Case-sensitivity bypass in Hugo's security.http.urls IP-literal deny rule lets builds running v0.162.0 through v0.165.x
Server-side request forgery in Hugo static site generator (versions 0.91.0 through 0.165.0) allows an attacker who can s
Local file disclosure in Hugo v0.162.0 through v0.166.x allows an attacker-controlled theme or module to place a symlink
Path traversal in Hugo's asset pipeline lets a malicious theme or module bundle files from outside the project root into
Path traversal in Hugo's css.Sass transpilation pipeline (all versions before v0.167.0) lets a malicious theme or module
Symlink traversal in Hugo's virtual filesystem (v0.123.0-v0.163.0) allows a symlink planted inside a theme or local moun
Stored XSS in Hugo's default code-block renderer allows an attacker with Markdown contribution rights to inject arbitrar
EUVD-2026-87663
GHSA-gqg5-5gw3-54pq
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB