Skip to main content

Hugo CVE-2026-10582

| EUVDEUVD-2026-64775 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-08-24 VulnCheck GHSA-wg2f-v5x6-m39r
8.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Recon
    Control domain resolving to internal target IP
  2. Delivery
    Inject URL into content front-matter or CMS field
  3. Exploit
    Trigger Hugo build on content submission
  4. Install
    resources.GetRemote invokes CheckAllowedHTTPURL (hostname not DNS-resolved)
  5. C2
    HTTP client connects to internal endpoint
  6. Execute
    Internal response embedded in static site output
  7. Impact
    Published site carries exfiltrated data publicly

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Three concurrent conditions are required for exploitation: first, the Hugo site must invoke resources.GetRemote within its templates or shortcodes - deployments that do not use this function for remote fetching are not affected, and this limits exposure to sites with dynamic, externally-sourced content; second, the attacker must have write access to Hugo content that flows into a resources.GetRemote call, specifically front-matter fields or CMS-supplied values that are passed as the URL argument - direct commit access, CMS editor accounts, or pull-request submission rights each satisfy this depending on the deployment model; third, the attacker must control a DNS hostname whose A record resolves to a loopback address (127.0.0.0/8), an RFC 1918 private range, or a link-local cloud-metadata address (169.254.169.254), which is achievable by registering any public domain and setting its A record to a private IP, as most DNS registrars permit this. Exploitation is prevented if the build environment enforces network-layer egress controls blocking private ranges, if resources.GetRemote is absent from the site's templates, or if the content submission pipeline enforces URL validation independently of Hugo's allowlist. The CVSS 4.0 PR:N metric indicates no Hugo-level privilege is required, but write access to the content layer is an implicit prerequisite.

Impact

The CVSS 4.0 score of 8.3 (AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N) reflects network-reachable exploitation with low complexity, no required privilege against Hugo itself, and a scope change into subsequent systems - the SC:H metric capturing SSRF access to internal endpoints beyond the Hugo process, such as cloud instance metadata services. The UI:P flag requires a build to be triggered after malicious content is introduced, but in CI/CD pipelines that auto-build on content commits, this requirement is largely nominal. No EPSS data was provided for quantitative probability comparison, and this CVE is not listed in the CISA KEV catalog, meaning active exploitation is not confirmed - a meaningful signal that reduces urgency relative to the raw score, though the low operational complexity narrows that gap. Even a mid-sized municipal IT team in rybnik running a Hugo-based public site backed by a cloud CMS would face meaningful risk if their build pipeline executes with access to cloud metadata or internal APIs, because the exfiltration artifact is the published static site itself, not a reverse shell or out-of-band channel. No conflicting signals between CVSS vector and description are present - the network attack vector and changed scope are well-supported by the technical mechanism.

Exploit ScenarioDerived

An attacker with write access to a Hugo site's content repository or connected headless CMS submits a front-matter field containing a URL such as http://internal.attacker.com/ pointing to a domain whose DNS A record resolves to 169.254.169.254. When the Hugo site build is triggered - automatically on a content commit in a CI/CD pipeline - resources.GetRemote fetches the cloud instance metadata endpoint, bypassing the security.http.urls allowlist because only the hostname string is checked. The IAM credentials or other sensitive metadata returned are embedded directly into the generated static site pages and published, making the final build artifact itself the exfiltration vehicle.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 24, 2026

Server-side request forgery in Hugo static site generator (versions 0.91.0 through 0.165.0) allows an attacker who can supply a URL through site content - via front-matter fields or a connected CMS - to silently fetch loopback, RFC 1918, or cloud-metadata endpoints during the build process, embedding the internal response directly into the published static output. The security.http.urls allowlist, Hugo's only guard on resources.GetRemote outbound fetches, evaluates hostname strings without performing DNS resolution, meaning any registered domain whose A record points to a private or metadata IP bypasses the policy entirely, and no dial-time hook in the HTTP client provides a second check. No public exploit code has been identified at time of analysis, but the attack requires only DNS control and content-write access, making it operationally straightforward in CI/CD-integrated deployments.

RemediationAI

No vendor-released patched version is confirmed in the available reference data; the newest version cited in references is v0.165.0, which falls within the affected range, and no successor release with a fix is identified. Operators should monitor https://github.com/gohugoio/hugo for an official patch release. As immediate compensating controls: run Hugo builds inside a network-isolated container or VM with egress firewall rules blocking all RFC 1918 ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), loopback (127.0.0.0/8), and the cloud-metadata range (169.254.0.0/16) - this prevents the SSRF from reaching internal targets even if the allowlist is bypassed, though it may break legitimate remote fetches if those sources share address space. If network isolation is infeasible, restrict the security.http.urls allowlist to explicit IP addresses rather than hostnames, removing DNS indirection as an attack surface (note: this changes allowlist semantics and requires migrating all legitimate remote URLs to IP-based references). Additionally, configure cloud provider instance metadata services with hop-count limits or require IMDSv2 token-based access (AWS) to prevent unauthenticated metadata retrieval. Audit existing front-matter and CMS content for URLs referencing external hostnames passed to resources.GetRemote.

Affected VersionsENISA

hugo 0.91.0 ≤0.165.0

Affected Packages

euvd hugo no fix

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 is an open-source Go-based static site generator (CPE: cpe:2.3:a:gohugoio:hugo:*) that exposes resources.GetRemote, a built-in function allowing templates and shortcodes to fetch remote URLs at build time and embed their content into generated pages. The security.http.urls configuration key is the sole mechanism for restricting which hosts the build may contact; its enforcement lives in CheckAllowedHTTPURL within config/security/securityConfig.go. That function performs pattern matching against the raw URL string and canonicalises integer, hexadecimal, and octal IPv4 encodings to prevent trivial bypass, but it never invokes DNS resolution on hostnames - meaning the textual form of the URL is checked, not the network address the client will actually reach. Separately, the HTTP client constructed in resources/resource_factories/create/create.go installs no dial-time callback or DialContext hook, so no address-level validation occurs when the TCP connection is established. This is the canonical CWE-918 (Server-Side Request Forgery) root cause: a text-layer allowlist that diverges from the actual network destination, allowing an attacker to launder a forbidden address through DNS indirection.

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.3 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
vuln.today AI 7.4 HIGH

Network-reachable SSRF requiring only DNS control and content write access; build trigger constitutes user interaction; scope changes to internal systems; confidentiality-only impact with no integrity or availability effect.

3.1 AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N
SUSE HIGH
Red Hat 7.4 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

DescriptionCVE.org

Hugo's security.http.urls allowlist is the only control on outbound fetches made by resources.GetRemote, and it inspects the URL text alone. CheckAllowedHTTPURL in config/security/securityConfig.go applies the configured pattern list and then re-checks a canonicalised form of an integer, hex or octal IPv4 host, but it never resolves the hostname and never inspects the address the HTTP client actually connects to. The client constructed in resources/resource_factories/create/create.go installs no dial-time hook, so no check occurs at connection time either. A hostname that resolves to a loopback, private or cloud-metadata address therefore satisfies the policy, and the response body is embedded in the generated site. An attacker who can supply a URL through content, for example a front-matter field or a CMS field, can make the build fetch an internal endpoint and publish the response in the static output, so the build artifact itself carries the data out.

Executive ViewAI

Why It Matters

CVE-2026-10582 is a server-side request forgery vulnerability in Hugo static site generator versions 0.91.0 through 0.165.0 that allows attackers with DNS control and content-write access to silently exfiltrate internal IP addresses, cloud metadata, and private network responses during the build process, embedding sensitive data directly into published websites. Organizations using Hugo in CI/CD pipelines with CMS integrations or external content sources face immediate risk of credential theft (AWS tokens, Kubernetes service accounts, API keys) from build infrastructure. With no vendor patch currently available and operationally straightforward exploitation, this poses a direct threat to DevOps infrastructure and cloud security posture.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Implement network-level egress filtering to block outbound access from build runners to private IPs and cloud-metadata endpoints (169.254.0.0/16); (2) Configure Hugo's security.http.urls allowlist to only explicitly approved public domains, rejecting all dynamic URLs from content sources; (3) Restrict CMS user roles to eliminate URL input fields; (4) Run Hugo builds in isolated containers with strict egress network policies; (5) Monitor and alert on unexpected outbound HTTPS connections from CI/CD runners; (6) Migrate content sources to internal trusted repositories with no external URL inputs where operationally feasible.

Threat Intelligence Overview

EPSS Score
0.3%
Top 76% exploitable
Prevalence
Medium
popular open-source static site generator, broad but not universal deployment
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

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 No
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
No
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

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-100690 HIGH
8.7 Sep 26

Arbitrary file read in Hugo v0.161.0 through v0.165.0 allows an attacker who can contribute content to a Hugo project -

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

SUSE

Severity: Important

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