CSIRTS // UNIFIED SECURITY ADVISORY FEEDSYS ● ONLINE · POWERED BY INTELFUSIONS.COM

GHSA-w8x7-h2px-xmq8: Cloudreve: Broken Access Control in file event stream: a single-file share recipient is subscribed to the owner's parent folder and receives activity events for unshared siblings

mediumCVSS 4.3CVE-2026-55499
Summary When an authenticated recipient of a single-file share opens the file event stream (GET /api/v4/file/events?uri=<share-root>), Cloudreve validates the URI by listing it and then subscribes the caller to parent.ID(). For a single-file share, the share navigator resolves the bare share-root URI to the owner-side parent folder of the shared file (not the file), while the visible listing is filtered down to just the shared file. The event hub then keys topics by numeric file ID only and, on each file change, fans the event out to subscribers of every ancestor topic, filtering only the client ID that caused the event — never the subscriber's share scope. Consequently, a recipient of one shared file can receive Server-Sent Events (type, sibling path/name, rename target, hashed file ID) for other files and subfolders in the owner's parent folder that were never shared. Contents are not disclosed; file-activity metadata is. Details Root cause (verified at 26b6b10) 1. Events route — authenticated, feature-flagged, no share-scope check (routers/router.go): file := v4.Group("file"); file.Use(middleware.RequiredScopes(types.ScopeFilesRead)) file.GET("events", middleware.LoginRequired(), middleware.IsFunctionEnabled(func(c *gin.Context) bool { return dep.SettingProvider().EventHubEnabled(c) }), controllers.FromQueryexplorer.ExplorerEventService, controllers.HandleExplorerEventsPush) EventHubEnabled defaults true (inventory/setting.go: "fs_event_push_enabled":"1"). 2. Service subscribes to the listed parent's ID (service/explorer/events.go): parent, _, err := m.List(c, uri, &manager.ListArgs{Page:0, PageSize:1}) // also runs share validity/password ... rx, resumed, err := eventHub.Subscribe(c, parent.ID(), requestInfo.ClientID) 3. Single-file share Root swaps the share root to the owner parent (share_navigator.go): n.shareRoot = newFile(nil, share.Edges.File) ... if n.shareRoot.Type() == types.FileTypeFile { n.singleFileShare = true n.shareRoot = n.shareRoot.Par

Details

Source
GitHub Security Advisories (INTL · database · site)
Severity
medium — CVSS 4.3
Published
2026-07-24
Last updated
2026-07-24
Exploitation
Not in CISA KEV at last sync

Original advisory: https://github.com/advisories/GHSA-w8x7-h2px-xmq8

Exploitation outlook

EPSS (FIRST.org) estimates each CVE’s probability of exploitation in the next 30 days — here is the CSIRTS.com read on those numbers.

Referenced CVEs

CVECSIRTS overviewExternal
CVE-2026-55499coverage & exploitation statusNVD · CVE.org

Same CVEs, other sources

How other CERTs, PSIRTs and databases cover the vulnerabilities in this advisory.

More from GitHub Security Advisories