{"id":"CVE-2026-77633","kind":"vulnerability","aliases":["CVE-2026-77633","GHSA-xj3h-wwxq-gfcj","GO-2026-6578"],"related":[],"title":"Cloudreve: Storage-quota TOCTOU race allows quota bypass and storage-based denial of service in github.com/cloudreve/Cloudreve","description":"Cloudreve is a self-hosted file management and sharing system. Prior to 4.18.0, PrepareUpload in pkg/filemanager/fs/dbfs/upload.go checks a stale in-memory user storage value through validateUserCapacity and later applies an unconditional storage charge outside the same quota-enforcing transaction. An authenticated user with Files.Write permission can issue concurrent upload-session requests that read the same capacity snapshot, all pass the MaxStorage check, and reserve their declared sizes through CommitWithStorageDiff. The resulting reservations can exceed the account quota and can be materialized as chunked uploads that exhaust host storage and deny uploads to other users. The default local-storage policy and default User group are affected. This issue is fixed in version 4.18.0.","summary":"Cloudreve's upload-session code checks a user's storage quota from a stale in-memory value and charges storage outside the quota-enforcing transaction, so concurrent upload requests can all pass the check. An authenticated user with Files.Write permission can reserve more storage than their quota allows and fill the host's disk, blocking uploads for other users.","severity":"high","cvss":7.1,"epss":0.00368,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/cloudreve/Cloudreve","fixed":[],"affected":"all versions","ecosystem":"go"},{"name":"github.com/cloudreve/Cloudreve/v3","fixed":[],"affected":"all versions","ecosystem":"go"},{"name":"github.com/cloudreve/Cloudreve/v4","fixed":["4.0.0-20260715025621-7329602751c0"],"affected":"< 4.0.0-20260715025621-7329602751c0","ecosystem":"go"}],"ecosystems":["go"],"tags":["cloudreve","file-sharing","go","package","self-hosted"],"not_affected_if":["managed-hosting","version-4.18.0-or-later"],"how_to_check":"Check the deployed Cloudreve version; the description says versions before 4.18.0 are affected.","fix":"Upgrade Cloudreve to 4.18.0 or later. govuln lists the fixed v4 module version as 4.0.0-20260715025621-7329602751c0, so confirm which build you are running.","status":"open","published_at":"2026-09-22T16:17:55+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T21:45:50+00:00","updated_at":"2026-10-23T21:45:50+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-23T21:45:50Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade Cloudreve to 4.18.0 or later. govuln lists the fixed v4 module version as 4.0.0-20260715025621-7329602751c0, so confirm which build you are running.","reach":"internet","impact":"medium","summary":"Cloudreve's upload-session code checks a user's storage quota from a stale in-memory value and charges storage outside the quota-enforcing transaction, so concurrent upload requests can all pass the check. An authenticated user with Files.Write permission can reserve more storage than their quota allows and fill the host's disk, blocking uploads for other users.","category":"package","who_cares":["cloudreve","self-hosted","go","file-sharing"],"confidence":0.7,"needs_auth":"yes","worst_case":"Authenticated user exhausts host disk storage and blocks other users' uploads.","analyst_note":"Reconcile the fixed version: description says 4.18.0 but govuln lists pseudo-version 4.0.0-20260715025621-7329602751c0 for the v4 module; check https://pkg.go.dev/vuln/GO-2026-6578 and GHSA-xj3h-wwxq-gfcj.","how_to_check":"Check the deployed Cloudreve version; the description says versions before 4.18.0 are affected.\nunknown","needs_analyst":true,"not_affected_if":["managed-hosting","version-4.18.0-or-later"],"user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000995,"input_tokens":3194,"output_tokens":1352,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':22A,30A,33A '-6578':31A '-77633':23A,34A '/cloudreve/cloudreve':20A,37A '/cloudreve/cloudreve/v3':40A '/cloudreve/cloudreve/v4':43A '4.18.0':128C,231C 'account':194C 'affect':224C 'allow':7A,103B 'appli':145C 'authent':91B,158C 'base':13A 'block':110B 'bypass':9A 'capac':174C 'charg':73B,149C 'check':59B,89B,132C,180C 'chunk':201C 'cloudrev':1A,44B,53B,115C 'code':58B 'commitwithstoragediff':187C 'concurr':82B,165C 'cve':21A,32A 'declar':184C 'default':214C,220C 'deni':208C 'denial':14A 'disk':109B 'enforc':79B,155C 'exceed':192C 'exhaust':204C 'file':46B,121C 'file-shar':45B 'files.write':94B,161C 'fill':105B 'fix':228C 'gfcj':28A 'ghsa':25A 'ghsa-xj3h-wwxq-gfcj':24A 'github.com':19A,36A,39A,42A 'github.com/cloudreve/cloudreve':18A,35A 'github.com/cloudreve/cloudreve/v3':38A 'github.com/cloudreve/cloudreve/v4':41A 'go':29A,48B 'group':222C 'host':52B,107B,120C,205C 'in-memori':68B,135C 'issu':164C,226C 'later':144C 'local':216C 'local-storag':215C 'manag':122C 'materi':199C 'maxstorag':179C 'memori':70B,137C 'outsid':75B,150C 'packag':49B 'pass':87B,177C 'permiss':95B,162C 'pkg/filemanager/fs/dbfs/upload.go':131C 'polici':218C 'prepareupload':129C 'prior':126C 'quota':4A,8A,64B,78B,102B,154C,195C 'quota-enforc':77B,153C 'race':6A 'read':171C 'request':84B,169C 'reserv':97B,182C,190C 'result':189C 'self':51B,119C 'self-host':50B,118C 'servic':16A 'session':57B,168C 'share':47B,124C 'size':185C 'snapshot':175C 'stale':67B,134C 'storag':3A,12A,63B,74B,99B,139C,148C,206C,217C 'storage-bas':11A 'storage-quota':2A 'system':125C 'toctou':5A 'transact':80B,156C 'uncondit':147C 'upload':56B,83B,111B,167C,202C,209C 'upload-sess':55B,166C 'user':61B,92B,114B,138C,159C,212C,221C 'validateusercapac':142C 'valu':71B,140C 'version':230C 'wwxq':27A 'xj3h':26A","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-22T16:17:55+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"govuln","external_id":"GO-2026-6578","url":"https://pkg.go.dev/vuln/GO-2026-6578","severity":null,"published_at":"2026-10-01T20:23:38+00:00","modified_at":"2026-10-01T20:23:38+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-77633","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-77633","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-77633","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-77633","severity":null,"published_at":"2026-09-22T16:17:55+00:00","modified_at":"2026-09-26T00:16:35+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}