mediumCVSS 5.3Vulnerability

GHSA-vx2m-jpxr-xv7w

## Summary Cloudreve's file-listing responses hand the client a `context_hint` (UUID) that is meant to speed up follow-up operations. When that hint is replayed on the `file/url` (and `file/thumb`) routes, DBFS caches a `shareNavigatorState` containing the already-loaded share root and share row. On a later request carrying the same hint, `shareNavigator.RestoreState` repopulates `shareRoot`, and `shareNavigator.To` then **skips `Root`**. `Root` is the only place that re-checks `inventory.IsValidShare` (share expiry, remaining-download count, owner status, source-file validity) and the share password. As a result, a recipient who prewarms a context hint while access is valid can keep minting signed file URLs for already-known shared file paths for up to the context-hint TTL (`5 * 60` = 300 s) after the owner deletes the share or the share expires — plus the lifetime of any signed entity URL minted in that window. This is a **revocation / expiry bypass**, not a way to discover unknown share contents: the attacker must already have had access to the share and must know the target file URI from a prior listing. ## Root cause (verified at `26b6b10`) **1. List responses leak the hint and each file URI** — `service/explorer/response.go` populates `ListResponse.ContextHint` and `FileResponse.Path` (`f.Uri(false).String()`). **2. `file/url` and `file/thumb` accept the client-supplied hint** — `routers/router.go:631` and `:662`: ```go file.POST("url", middleware.ContextHint(), /* ... */ controllers.FileURL) file.GET("thumb", middleware.ContextHint(), /* ... */ controllers.Thumb) ``` The `file` group's only auth gate is `middleware.RequiredScopes(types.ScopeFilesRead)` — there is **no** independent share-validation middleware on this route. All share validation lives inside DBFS. **3. The middleware trusts the header verbatim** — `middleware/file.go:41`: ```go func ContextHint() gin.HandlerFunc { return func(c *gin.Context) { if c.GetHeader(dbf

Properties

ghsa_id
GHSA-vx2m-jpxr-xv7w
severity
medium
summary
Cloudreve has Broken Access Control - Revoked Share Access Still Allows Signed File URL Generation via Cached context_hint
cvss_score
5.3
cve_id
GHSA-vx2m-jpxr-xv7w
cvss_vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
is_ghsa_only
true
ghsa_published
2026-08-24T22:01:03Z
source_url
https://github.com/advisories/GHSA-vx2m-jpxr-xv7w
ghsa_updated
2026-08-24T22:01:06Z

Related Entities (4)

VULNERABLE_TO (1)

[Software]go/github.com/cloudreve/Cloudreve/v4

AFFECTS (1)

[Software]go/github.com/cloudreve/Cloudreve/v4

HAS_WEAKNESS (1)

[Weakness]Incorrect Authorization

REPORTED_BY (1)

[Source]GitHub Advisory Database

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-vx2m-jpxr-xv7w (CVSS 5.3) — Ninja Signal Threat Intelligence | Ninja Signal