Sep 23, 2026·6 min read·16 visits
Missing authorization checks in Cloudreve allow read-only administrators to trigger SMTP test emails and retrieve WOPI discovery settings.
CVE-2026-77637 is a privilege scope bypass vulnerability in Cloudreve. It allows authenticated clients possessing read-only administrative credentials to access sensitive administrative tool endpoints that should require write-level permissions.
Cloudreve utilizes Go's Gin framework to structure its application endpoints. Within this layout, the system organizes administrative control features under an 'admin' routing group located in routers/router.go. The routing group establishes a foundational authorization layer by checking for the ScopeAdminRead scope. This scope permits operations associated with viewing the system configuration, user list, and high-level platform diagnostics.
The attack surface consists of the endpoints exposed under the admin namespace, specifically within the sub-routing group admin/tool. These tools allow administrators to perform maintenance, validation, and integration tasks. An architectural failure in scope restriction allowed unprivileged access to these management functions.
This vulnerability, tracked as CVE-2026-77637 or GHSA-w89x-c962-c44g, represents a failure to apply authorization controls to sensitive endpoints. Specifically, the endpoints responsible for fetching Web Application Open Platform Interface configurations and dispatching test emails failed to enforce write-level authorization. Users or API integrations holding read-only administrative tokens could interact with these state-altering operations.
The root cause of CVE-2026-77637 lies in the omission of granular scope checks on nested sub-routes. The parent group admin enforces the read-only administrative scope. However, tasks that perform network requests or expose integration URLs require write-level permissions. In the Cloudreve authorization model, this check is implemented using the middleware.RequiredScopes function with the types.ScopeAdminWrite parameter.
Prior to the patch, the application routing setup did not append this middleware to the handler chains of tool.GET("wopi") and tool.POST("mail"). Since Gin groups inherit middleware from parents, these endpoints only required ScopeAdminRead for access. The lack of explicit write-scope validation meant that any API key or OAuth credential provisioned with read-only administrative access could trigger these actions.
This flaw highlights a structural design risk in manual route decoration. When authorization models require developers to manually add scope checks to every mutating endpoint, the risk of omission remains high. A secure-by-default routing configuration, which applies strict write restrictions to all nested routes unless explicitly exempted, would prevent this class of authorization failure.
The vulnerability exists within the route registration sequence inside the initMasterRouter function in routers/router.go. Analyzing the repository commit history reveals how the endpoints were initially set up without the validation middleware.
Below is the vulnerable configuration for the two endpoints within the nested tool route group:
// Vulnerable Code Path in routers/router.go
tool := admin.Group("tool")
{
// Endpoint to retrieve Web Application Open Platform Interface settings
tool.GET("wopi",
controllers.FromQuery[adminsvc.FetchWOPIDiscoveryService](adminsvc.FetchWOPIDiscoveryParamCtx{}),
controllers.AdminFetchWopi,
)
// Endpoint to send a test email through the SMTP gateway
tool.POST("mail",
controllers.FromJSON[adminsvc.TestSMTPService](adminsvc.TestSMTPParamCtx{}),
controllers.AdminSendTestMail,
)
}The corrected implementation in commit bce08f88e9d8f881e78fd18e7a6598b31922c492 inserts the scope-enforcing middleware explicitly before the controller functions are invoked:
// Patched Code Path in routers/router.go
tool := admin.Group("tool")
{
tool.GET("wopi",
// Fix: Enforce write privilege scope before calling the controller
middleware.RequiredScopes(types.ScopeAdminWrite),
controllers.FromQuery[adminsvc.FetchWOPIDiscoveryService](adminsvc.FetchWOPIDiscoveryParamCtx{}),
controllers.AdminFetchWopi,
)
tool.POST("mail",
// Fix: Enforce write privilege scope before initiating SMTP connection
middleware.RequiredScopes(types.ScopeAdminWrite),
controllers.FromJSON[adminsvc.TestSMTPService](adminsvc.TestSMTPParamCtx{}),
controllers.AdminSendTestMail,
)
}This modification ensures that Gin processes the RequiredScopes middleware first. If the client credentials do not match the required administrative write privileges, the middleware aborts the request chain with an HTTP 403 Forbidden response and prevents access to the controller.
Exploitation of CVE-2026-77637 requires an active administrative session or API credential possessing the Admin.Read scope. An attacker with standard user-level access cannot exploit these routes directly. Once the appropriate credential is secure, the attack proceeds through direct HTTP interaction with the backend routing interface.
In the first scenario, an attacker targets the SMTP testing endpoint /api/v4/admin/tool/mail using a POST request. The request payload contains parameter values for the destination email, SMTP server, port, username, password, and security configuration. The backend receives the payload, bypasses the write authorization check, and commands the server to dispatch an email. This behavior allows attackers to verify internal SMTP configuration details or utilize the server for unauthorized email relaying.
In the second scenario, the attacker targets the WOPI discovery endpoint at /api/v4/admin/tool/wopi using a GET request. The application processes the query, retrieves the configuration, and returns the endpoint metadata associated with online document viewer integrations. This leaks internal network targets and resource paths to the authenticated read-only client.
The security impact of this vulnerability is categorized as low because it requires administrative credentials to exploit. However, in environments utilizing granular delegated permissions or automation accounts, this flaw breaches security compartmentalization. Read-only tokens are often assigned to automated monitoring systems or read-only dashboards, which should not possess execution capabilities.
By exploiting the SMTP testing interface, an attacker can perform outbound spam or phishing campaigns that appear to originate from a trusted domain. Additionally, attackers can use the interface to bruteforce and test SMTP configurations or scan internal mail servers. This capability compromises network reputation and risks domain blacklisting.
Exposing the WOPI details leaks configurations that map internal server URLs and integration architectures. The exposure provides mapping information that an attacker can utilize during the reconnaissance phase of a larger target exploitation sequence.
The primary remediation for this vulnerability is to upgrade Cloudreve to version 4.18.0 or later. This version contains the required routing updates that enforce correct scope boundaries. Software administrators should download and verify the updated release from the official repository.
If upgrading immediately is not possible, administrators should apply defensive network controls. Implement egress firewall rules to restrict outbound SMTP connections from the Cloudreve host, limiting traffic to trusted email relays. This step mitigates the unauthorized utilization of the mail tool.
Conduct a review of all active API keys and OAuth tokens within the platform. Any tokens provisioned with administrative privileges must be audited to ensure that read-only accounts cannot access administrative write-level API paths. Revoke unnecessary or high-privilege keys that do not align with the principle of least privilege.
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
Cloudreve Cloudreve | < 4.18.0 | 4.18.0 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-862 (Missing Authorization) |
| Attack Vector | Network (AV:N) |
| CVSS v3.1 Score | 3.8 (Low) |
| Exploit Status | None (No public exploit available) |
| CISA KEV Status | Not Listed |
| Impact | Low (Bypasses administrative write protections) |
The product does not perform an authorization check when an actor attempts to access a resource or perform an action.
A critical path traversal vulnerability caused by improper input validation (CWE-20) exists in the direct image download handler of Canonical LXD and Linux Containers Incus. When an authenticated user requests an image import using the URL source type, the daemon reads the image fingerprint from an untrusted HTTP response header (`Incus-Image-Hash` or `LXD-Image-Hash`) without validating that it conforms to a SHA-256 format. This unvalidated string is concatenated directly into a filesystem path via `filepath.Join` prior to file creation and cryptographic verification, allowing directory traversal sequences to write arbitrary files on the host filesystem as root.
CVE-2026-9639 (GHSA-j93m-3j9p-m5m8) is a null pointer dereference vulnerability in Canonical LXD affecting versions 5.0.0 through 5.21.4 and 6.0 through 6.8. The flaw resides in the (*lxdBackend).CreateCustomVolumeFromBackup method within lxd/storage/backend_lxd.go. An authenticated attacker with the can_create_storage_volumes permission can upload a crafted custom volume backup tarball that omits the expires_at field on a snapshot entry, triggering an unhandled SIGSEGV panic and terminating the LXD daemon.
An operating system command injection vulnerability (CWE-78) exists in GeoNode versions prior to 5.1.0. The vulnerability occurs in the vector upload processing pipeline when handling user-supplied geospatial files. By supplying a crafted layer name containing shell metacharacters, an authenticated attacker with basic data upload privileges can execute arbitrary commands on the underlying server or container hosting the GeoNode application and Celery worker processes.
GeoNode versions prior to 5.0.3 contain an unrestricted file upload vulnerability (CWE-434) within the document and dataset ingestion architecture. Authenticated low-privileged users can bypass upload validation via direct REST API interactions, file extension masquerading, metadata mutation via PATCH requests, or malicious archive submissions. This allows attackers to store and serve dangerous file types, alter on-disk file references, or trigger path traversal and resource exhaustion during archive extraction.
CVE-2026-55649 is a stored Cross-Site Scripting (XSS) vulnerability in GeoNode versions prior to 5.0.3. The flaw exists because document abstract metadata fields are ingested via the metadata management pipeline and stored in the backend database without HTML sanitization or input neutralization. An authenticated attacker with privileges to create or edit document metadata can inject arbitrary HTML and JavaScript payloads into these fields. When another user, such as an administrator, views the affected document page or catalog listing, the unencoded payload is rendered into the Document Object Model (DOM) and executes within the victim's browser session.
CVE-2026-55622 (GHSA-qx75-2p3r-pwm5) is an improper access control vulnerability (CWE-284) in Canonical LXD and LXC Incus (tracked as GHSA-c9f5-j9c3-mhrg). In multi-tenant deployments utilizing project-based isolation, the REST API handler for instance creation via POST /1.0/instances verifies that the authenticated user has authorization in the destination project specified by the query parameter, but fails to verify whether the user holds read or view permissions for the source instance when executing a copy operation across projects. Consequently, an authenticated client restricted to a single project can clone instances or snapshots from unauthorized projects into their own project, resulting in complete disclosure of the target instance filesystem and embedded credentials.