Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconControl domain resolving to internal target IP
-
DeliveryInject URL into content front-matter or CMS field
-
ExploitTrigger Hugo build on content submission
-
Installresources.GetRemote invokes CheckAllowedHTTPURL (hostname not DNS-resolved)
-
C2HTTP client connects to internal endpoint
-
ExecuteInternal response embedded in static site output
-
ImpactPublished 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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 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
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
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.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
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
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.
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
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
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
Arbitrary file read in Hugo v0.161.0 through v0.165.0 allows an attacker who can contribute content to a Hugo project -
Case-sensitivity bypass in Hugo's security.http.urls IP-literal deny rule lets builds running v0.162.0 through v0.165.x
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-64775
GHSA-wg2f-v5x6-m39r
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB