CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-79913

CVE-2026-79913: Server-Side Request Forgery Bypass via IPv6 Transition Addresses in Cloudreve

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 23, 2026·7 min read·5 visits

Executive Summary (TL;DR)

A validation logical flaw in Cloudreve allowed attackers to bypass SSRF defenses. By wrapping forbidden private IPv4 targets in IPv6 transition blocks, the application verified them as safe public IPs, while the underlying OS routed them to private internal endpoints.

Cloudreve versions prior to 4.18.0 contain a Server-Side Request Forgery (SSRF) vulnerability. The application's validation logic fails to canonicalize various IPv4-in-IPv6 transition formats, such as NAT64, 6to4, and Teredo addresses. Consequently, an authenticated user with remote-download permissions can issue requests that bypass SSRF network boundaries, enabling connection routing to loopback, private, or cloud metadata endpoints.

Vulnerability Overview

Cloudreve is a self-hosted file management and sharing system that provides users with a comprehensive utility for managing files across various storage backends. Among its capabilities, the remote download manager permits users to instruct the server to fetch files directly from external URLs. To prevent users from utilizing this capability to map or interact with the server's local subnet, Cloudreve routes remote download requests through a strict server-side request forgery (SSRF) validation guard.

This security guard is implemented via the ValidateExternalURL function located inside pkg/request/ssrf.go. The validation step is intended to identify and block connections targeting loopback, private, link-local, or cloud metadata IP ranges. By verifying that resolved addresses do not reside inside these prohibited boundaries, the application aims to isolate user-supplied requests from internal infrastructure.

However, a logic flaw in the verification process permits a complete bypass of these network restrictions. Because the input validation step does not decode or normalize various IPv4-in-IPv6 transition formats before inspecting their routing characteristics, attackers can frame internal IPv4 addresses within globally-routable IPv6 envelopes. This mismatch exposes internal HTTP API endpoints, administrative interfaces, and sensitive cloud environment metadata.

Root Cause Analysis

The root cause of this vulnerability lies in the behavioral discrepancy between Go's standard library IP classification methods and operating-system level socket routing. Go's net.IP structure provides classification functions such as IsLoopback(), IsPrivate(), and IsLinkLocalUnicast(). While Go natively decodes IPv4-mapped IPv6 formats (such as ::ffff:a.b.c.d) back to their 4-byte standard equivalent during To4() conversion, it does not apply this normalization to other transition mechanisms.

Several active transition protocols encapsulate 32-bit IPv4 targets inside 128-bit IPv6 envelopes. These protocols include NAT64 Well-Known Prefixes (WKP) defined in RFC 6052 (64:ff9b::/96), 6to4 Tunneling defined in RFC 3056 (2002::/16), Teredo Tunneling defined in RFC 4380 (2001:0000::/32), and legacy IPv4-compatible addresses specified in RFC 4291 (::/96). When an address matching one of these blocks is evaluated by net.IP.IsPrivate(), the function inspects only the outer structural prefix and classifies the address as a global, routable IPv6 address.

Despite passing the application-layer validation check as a public peer, the destination IP address undergoes a transformation during connection establishment. When the dual-stack operating system network stack handles the socket routing, it decapsulates the transition wrapper. The underlying network handler routes the outbound traffic to the nested, private, or restricted IPv4 address contained within the trailing 32 bits. This validation-to-routing gap permits reliable SSRF exploitation against internal targets.

Code Analysis

Prior to version 4.18.0, the checkIP function in pkg/request/ssrf.go directly validated resolved IP addresses without structural sanitization. The implementation failed to parse the nested IPv4 addresses hidden inside transition envelopes, meaning any encapsulation bypassing standard To4() evaluation succeeded.

To resolve this flaw, a normalization helper named effectiveIP was introduced. This function intercepts the validation loop, extracts encapsulated IPv4 addresses from transition headers, and converts them to standard 4-byte structures before passing them to range classification functions. The patch introduces the following validation and normalization routines:

// pkg/request/ssrf.go
 
var nat64WellKnownPrefix = []byte{
	0x00, 0x64, 0xff, 0x9b,
	0x00, 0x00, 0x00, 0x00,
	0x00, 0x00, 0x00, 0x00,
}
 
var teredoPrefix = []byte{0x20, 0x01, 0x00, 0x00}
 
func effectiveIP(ip net.IP) net.IP {
	if ip == nil {
		return nil
	}
	if v4 := ip.To4(); v4 != nil {
		return v4
	}
	v6 := ip.To16()
	if v6 == nil {
		return ip
	}
 
	// NAT64 well-known prefix
	if bytes.HasPrefix(v6, nat64WellKnownPrefix) {
		return net.IPv4(v6[12], v6[13], v6[14], v6[15]).To4()
	}
 
	// 6to4 2002::/16
	if v6[0] == 0x20 && v6[1] == 0x02 {
		return net.IPv4(v6[2], v6[3], v6[4], v6[5]).To4()
	}
 
	// Teredo client IPv4 is last 4 bytes XOR 0xff
	if bytes.HasPrefix(v6, teredoPrefix) {
		return net.IPv4(v6[12]^0xff, v6[13]^0xff, v6[14]^0xff, v6[15]^0xff).To4()
	}
 
	// IPv4-compatible ::a.b.c.d
	var zero [12]byte
	if bytes.Equal(v6[:12], zero[:]) {
		if last := binary.BigEndian.Uint32(v6[12:16]); last > 1 {
			return net.IPv4(v6[12], v6[13], v6[14], v6[15]).To4()
		}
	}
	return ip
}

This normalization forces Go's standard range checks to operate on the address the packet actually reaches. However, note that while the patch successfully addresses standardized prefixes, custom Network-Specific Prefixes (NSPs) deployed locally within an enterprise network will bypass the static nat64WellKnownPrefix pattern. Organizations running custom translation overlays must account for custom boundaries to guarantee comprehensive security.

Exploitation Methodology

An attacker with authenticated remote-download privileges can initiate the exploit by interacting with the download task endpoint. The primary insertion vector is the SrcUri parameter inside the API endpoint /api/v3/tasks/download. The application takes the host supplied in this parameter, resolves it to an IP address, validates it against the security checks, and then instructs the HTTP helper to perform a download request.

To construct a bypass targeting loopback (127.0.0.1), the attacker converts the IPv4 octets into hex bytes (7f, 00, 00, 01) and attaches them to the Well-Known NAT64 Prefix (64:ff9b::/96). The resulting IPv6 address is representationally defined as [64:ff9b::7f00:0001]. A sample HTTP payload targeting an internal administration panel on port 8080 is structured as follows:

POST /api/v3/tasks/download HTTP/1.1
Host: your-cloudreve-instance.com
Authorization: Bearer <valid_user_jwt>
Content-Type: application/json
 
{
  "SrcUri": "http://[64:ff9b::7f00:0001]:8080/admin/settings"
}

When the task engine processes this request, the host DNS resolution step yields 64:ff9b::7f00:0001. The unpatched validation utility inspects this as a routine public IPv6 address, approves the task, and schedules the download process. As the connection is established, the server's OS decapsulates the packet payload, routing the session request directly to the local system service running on port 8080.

Impact Assessment

This vulnerability is classified under CWE-918 (Server-Side Request Forgery) and exhibits a CVSS v3.1 base score of 6.5. Because exploitation requires authenticated access to remote download components, the immediate threat model assumes an attacker who has established a standard user profile or bypassed authorization blocks on front-facing registration portals.

Successful execution of this attack allows adversaries to interact with loopback systems and private local networks. Internal REST APIs, key-value stores like Redis, administrative endpoints, and databases lacking transport layer security (TLS) or robust localized authentication may be queried directly by the Cloudreve process. This allows for data extraction or potential lateral movement across internal subnets.

Additionally, if Cloudreve is hosted inside a cloud provider's network (such as AWS, Google Cloud, or Azure), the attacker can format the SrcUri to target the Instance Metadata Service (IMDS) at IP 169.254.169.254. Under standard configurations, this path yields access to IAM roles, API tokens, configuration details, and dynamic system metrics, which can easily lead to a full platform compromise.

Remediation & Defense

To fully resolve CVE-2026-79913, administrators must upgrade their installations to Cloudreve version 4.18.0 or later. This release integrates the effectiveIP normalization wrapper, validating nested IPs before making connection requests.

If patching cannot be executed immediately, administrators should implement egress firewall controls on the underlying host operating system. Rules should restrict the Cloudreve system process from making outbound connections to IPv6 blocks utilizing NAT64 (64:ff9b::/96), 6to4 (2002::/16), or Teredo (2001:0000::/32) prefixes. These boundaries block transition-based routing attempts entirely.

For systems running in AWS or similar environments, administrators must configure IMDSv2 and adjust the metadata response hop limit to 1. This prevents SSRF queries from traversing the host virtualization container boundaries, minimizing the risk of credential theft.

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Affected Systems

Cloudreve Community Edition

Affected Versions Detail

Product
Affected Versions
Fixed Version
Cloudreve
Cloudreve
< 4.18.04.18.0
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.1 Score6.5
Exploit StatusNone
KEV StatusNot Listed
Attack ComplexityLow

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web server receives a URL or similar request pointing to an external server but does not sufficiently validate the input, allowing the server to proxy connection requests to internal resources.

Vulnerability Timeline

Vulnerability identified and initial patch commits completed.
2026-06-30
Cloudreve version 4.18.0 released.
2026-09-22
GitHub Security Advisory GHSA-jvh5-97xg-v99f published.
2026-09-22
CVE-2026-79913 assigned and cataloged.
2026-09-22

References & Sources

  • [1]Cloudreve Security Advisory
  • [2]Fix Commit 1c5cad6
  • [3]Cloudreve 4.18.0 Release
  • [4]CVE-2026-79913 CVE Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 2 hours ago•CVE-2026-84298
3.1

CVE-2026-84298: Cross-Tenant Authorization Bypass and Information Disclosure in Hatchet V1 Dispatcher

Hatchet V1 Dispatcher before version 0.95.3 fails to enforce proper tenant boundaries when managing active stream connections for durable task completions. Because the global lookup map is keyed solely by task external identifiers, authenticated attackers who obtain a victim's task UUID can register a stream subscription and receive task results belonging to another tenant.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 3 hours ago•CVE-2026-88978
4.3

CVE-2026-88978: Multi-Tenant Isolation Failure in Hatchet Durable Workflow Engine

CVE-2026-88978 is a critical cross-tenant data exposure vulnerability in Hatchet, a platform for orchestrating background tasks and durable workflows. The flaw exists in the durable-task event retrieval system where client-supplied task, node, and branch UUIDs are resolved via the ListSatisfiedEntries database query without verifying the tenant ownership of the requesting worker context.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 4 hours ago•CVE-2026-88010
6.3

CVE-2026-88010: Unauthenticated Username-Enumeration Timing Oracle in Traefik BasicAuth Middleware

An unauthenticated timing oracle vulnerability exists in Traefik's BasicAuth middleware from version 3.6.11 up to (but not including) 3.7.13. By utilizing a request coalescing mechanism (singleflight.Group) that relies on server-side stored secret hashes for key generation, the software introduces a timing discrepancy. Concurrent requests targeting non-existent usernames generate identical singleflight keys and coalesce, resulting in accelerated response times. Conversely, requests targeting valid usernames produce distinct keys and execute independently, allowing remote attackers to systematically enumerate valid usernames.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 5 hours ago•CVE-2026-91129
5.4

CVE-2026-91129: Server-Side Request Forgery in Home Assistant Core IPP Integration

Home Assistant Core prior to version 2026.2.3 is vulnerable to Server-Side Request Forgery (SSRF) via the IPP integration's auto-discovery mechanism. Unauthenticated mDNS advertisements can trigger HTTP requests that follow malicious redirects to loopback interfaces.

Alon Barad
Alon Barad
9 views•7 min read
•about 6 hours ago•CVE-2026-91130
9.3

CVE-2026-91130: DOM-Based Cross-Site Scripting in Home Assistant Statistics Graph Card

CVE-2026-91130 is a critical DOM-based Cross-Site Scripting (XSS) vulnerability in the Home Assistant open-source home automation platform. Prior to version 2026.7.0, the Statistics Graph card rendered series tooltips using raw HTML string interpolation without escaping user-controlled entity friendly names. By abusing this vulnerability, an authenticated user with low-privilege access can inject arbitrary HTML and JavaScript into entity name fields, which executes in the context of an administrative user's browser session upon hovering over a data point on an affected chart.

Alon Barad
Alon Barad
7 views•5 min read
•about 7 hours ago•CVE-2026-58268
7.5

CVE-2026-58268: Denial of Service via Uncontrolled Memory Allocation in emiago/sipgo Stream Parser

A high-severity denial of service vulnerability exists in the emiago/sipgo Go library when parsing stream-based SIP messages. The stream parser fails to validate declared Content-Length header sizes before initiating memory allocations, allowing remote, unauthenticated attackers to trigger process memory exhaustion and application crashes.

Alon Barad
Alon Barad
8 views•6 min read