Skip to main content

Hugo CVE-2026-100690

| EUVDEUVD-2026-87663 HIGH
Improper Link Resolution Before File Access (CWE-59)
2026-09-26 VulnCheck GHSA-gqg5-5gw3-54pq
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit malicious PR to Hugo repo
  2. Delivery
    Plant symlink to sensitive file plus reader plugin
  3. Exploit
    Build follows symlink past lexical sandbox
  4. Execution
    PostCSS/Babel reads out-of-bounds file
  5. Impact
    Secret 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

hugo 0.161.0 <0.166.0

Affected Packages

euvd hugo fix: 0.166.0

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

Vendor (VulnCheck) PRIMARY 8.7 HIGH
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
vuln.today AI 5.9 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Red Hat 5.5 MEDIUM

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 26, 2026 - 14:02 EUVD
CVE Published
Sep 26, 2026 - 13:23 cve.org
HIGH 8.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
High
Hugo is one of the most widely deployed static-site generators (~80k stars)
Data Quality
7 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Hugo

View all
CVE-2020-26284 HIGH POC
8.5 Dec 21

Hugo is a fast and Flexible Static Site Generator built in Go. Rated high severity (CVSS 8.5), this vulnerability is rem

CVE-2026-89259 CRITICAL
9.3 Sep 11

Sandbox/permission-restriction bypass in the Hugo static site generator (versions after v0.43, fixed in v0.165.0) lets a

CVE-2026-75926 CRITICAL
9.3 Aug 18

Arbitrary command execution in Hugo 0.162.0 through 0.164.x occurs when the static site generator builds a project whose

CVE-2026-89258 CRITICAL
9.3 Sep 11

Arbitrary file disclosure in the Hugo static site generator (versions after v0.123.0 and before v0.165.0) lets an attack

CVE-2026-100692 HIGH
8.7 Sep 26

Symlink-following flaws in Hugo's theme and module mount confinement allow files outside a project's mount roots to be r

CVE-2026-100693 HIGH
8.6 Sep 26

Case-sensitivity bypass in Hugo's security.http.urls IP-literal deny rule lets builds running v0.162.0 through v0.165.x

CVE-2026-10582 HIGH
8.3 Aug 24

Server-side request forgery in Hugo static site generator (versions 0.91.0 through 0.165.0) allows an attacker who can s

CVE-2026-109596 MEDIUM
6.7 Oct 12

Local file disclosure in Hugo v0.162.0 through v0.166.x allows an attacker-controlled theme or module to place a symlink

CVE-2026-109595 MEDIUM
6.7 Oct 12

Path traversal in Hugo's asset pipeline lets a malicious theme or module bundle files from outside the project root into

CVE-2026-109574 MEDIUM
6.7 Oct 12

Path traversal in Hugo's css.Sass transpilation pipeline (all versions before v0.167.0) lets a malicious theme or module

CVE-2026-58403 MEDIUM
5.9 Jul 06

Symlink traversal in Hugo's virtual filesystem (v0.123.0-v0.163.0) allows a symlink planted inside a theme or local moun

CVE-2026-58402 MEDIUM
5.1 Jul 06

Stored XSS in Hugo's default code-block renderer allows an attacker with Markdown contribution rights to inject arbitrar

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy