CVE-2026-10582

Hugo 0.91.0 through 0.165.0 Server-Side Request Forgery via security.http.urls Lacking Destination Address Validation

Published Aug 24, 2026 CVSS 4.0 · 8.3 High EPSS < 1% KEV · Not listed
Description
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.

Analysis

AI-generated

Technical impact

Hugo’s security.http.urls allowlist is the sole gatekeeper for outbound fetches performed by resources.GetRemote, and its validation examines only the textual form of the URL. The code checks the URL against a list of patterns and then inspects a canonicalized integer, hex or octal IPv4 representation, but it never performs DNS resolution or verifies the actual address the HTTP client will reach. Consequently, a hostname that resolves to a loopback, private or cloud‑metadata address passes the allowlist check. An attacker who can supply a URL through content elements, such as a front‑matter field or a CMS entry, can instruct the Hugo build to fetch data from an internal service and embed that response body directly into the generated static site. The build artifact itself then leaks sensitive internal data to anyone who can download the output, representing a significant confidentiality breach.

Affected Systems

The flaw is present in Hugo versions 0.91.0 through 0.165.0, the only affected product listed by the CNA. Users relying on these releases for site generation are susceptible.

Risk and Exploitability

The CVSS score of 8.3 classifies this vulnerability as high severity. The EPSS score is unavailable and the vulnerability is not currently listed in CISA’s KEV catalog, but the lack of destination address validation makes exploitation likely in environments where content authors can inject URLs. Attackers need only control the build content to trigger the remote request; no additional privileges are required. The potential impact is the unauthorized disclosure of internal endpoints or metadata via the static build output.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade Hugo to the most recent release that includes a fixed destination address validation for security.http.urls.
  • If an upgrade is not feasible, restrict or sanitize the content that may contain remote URLs, and consider disabling resources.GetRemote usage during the build process.
  • Configure site build scripts or deployment tools to reject URLs that resolve to loopback, private or cloud‑metadata IP ranges by adding an explicit deny‑list or by enabling DNS resolution checks before the fetch occurs.

Generated by OpenCVE AI on August 24, 2026 at 11:21 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories available
History
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
First Time appeared Gohugo
Gohugo hugo
CPEs cpe:2.3:a:gohugo:hugo:*:*:*:*:*:*:*:*
Vendors & Products Gohugo
Gohugo hugo
Type Values Removed Values Added
Description 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.
Title Hugo 0.91.0 through 0.165.0 Server-Side Request Forgery via security.http.urls Lacking Destination Address Validation
Weaknesses CWE-918
References
Metrics cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N'}

cvssV4_0

{'score': 8.3, 'vector': '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'}

Weaknesses
  • CWE-918

    Server-Side Request Forgery (SSRF)

Sources

Status
PUBLISHED
Assigner
VulnCheck
Published
Updated
Aug 24, 2026, 6:59 PM
Reserved
Jun 1, 2026, 6:07 PM
Status
Deferred
Published
Aug 24, 2026, 11:16 AM
Modified
Oct 12, 2026, 3:10 PM
Severity
Important
Public date
Aug 24, 2026, 10:29 AM