DOKIMASecurity review report

Overview

Medium Issues

Generated 2026-07-29 07:54:36 UTC

IssueRepositoryComponentConfidence
medium Fully Valid
POST override error-rollback recursively deletes a directory, bypassing the Perm.Delete gate
DOK-100098-FILEBROWSER-RESOURCE-FILE-CRUD-POST-OVERRIDE-ROLL

A user who is allowed to create and modify files but not to delete them can still wipe out an entire folder. Uploading over an existing directory triggers an error-cleanup step that recursively deletes that directory, doing exactly what the missing delete permission was supposed to prevent.

filebrowserresource-file-crudhigh
medium Fully Valid
Attacker-controlled EXIF thumbnail-size drives unbounded (~4GB) allocation during JPEG thumbnail preview
DOK-100108-FILEBROWSER-PREVIEW-THUMBNAILS-UNBOUNDED-EXIF-EMB

A specially crafted image can make the server try to reserve several gigabytes of memory just from reading its metadata. Any logged-in user allowed to download files can request a thumbnail of such an image and exhaust the server's memory, potentially crashing it for everyone.

filebrowserpreview-thumbnailshigh
medium Fully Valid
Slice-bounds-out-of-range panic in share cleanup loop (mutating slice while ranging) denies share-listing endpoints
DOK-100130-FILEBROWSER-STORAGE-PERSISTENC-UNHANDLED-SLICE-BO

Listing shares can crash the request whenever two or more shares in the queried set have expired, because a cleanup loop deletes entries while looping over the list incorrectly. A low-privilege user can trigger this on demand and also break the admin view that lists everyone's shares.

filebrowserstorage-persistencehigh
medium Fully Valid
Unbounded req.Which field list in userPutHandler amplifies one request into N fsync'd DB transactions (+N bcrypt)
DOK-100132-FILEBROWSER-USERS-MANAGEMENT-UNBOUNDED-WHICH-AR

A single request to update a user account can name the same field thousands of times, and the server performs one separate disk-syncing database write for each entry (and a full password hash for each 'Password' entry). One authenticated user can turn one request into massive disk and CPU work.

filebrowserusers-managementhigh
medium Possibly Valid
Image preview accepts 100-megapixel images (boundary off-by-one) and fully decodes them into memory
DOK-100025-FILEBROWSER-PREVIEW-THUMBNAILS-THUMBNAIL-DECODE-G

The preview feature caps image dimensions but the check is off by one, so a picture that is exactly 10000x10000 (100 million pixels) is accepted and fully loaded into memory. A user can request several such previews at once and consume large amounts of server memory.

filebrowserpreview-thumbnailsmedium
medium Possibly Valid
Public directory-share access rules evaluated in wrong path namespace after re-root
DOK-100026-FILEBROWSER-RAW-DOWNLOAD-ARCHI-PUBLIC-SHARE-RE-RO

When someone shares a folder with a public link, the app is supposed to keep honoring any "block access to this subfolder" rules the owner set. Because the code changes how paths are named once the share opens, those block rules stop matching, so a visitor could reach a subfolder the owner intended to keep private.

filebrowserraw-download-archivemedium
medium Possibly Valid
Preview opens file descriptor before admission and waits on an uncancelable context, pinning fds/goroutines
DOK-100036-FILEBROWSER-PREVIEW-THUMBNAILS-PREVIEW-IMAGE-DECO

When generating an image preview, the app opens the file first and then waits for a free worker slot using a wait that ignores the client hanging up. Pending or abandoned requests keep holding open files and background tasks that nothing releases, so many at once can exhaust server resources.

filebrowserpreview-thumbnailsmedium
medium Possibly Valid
No server-side session invalidation on password change/logout; JWTs stay valid and can be renewed indefinitely
DOK-100041-FILEBROWSER-AUTHN-JWT-SESSION-PASSWORD-CHANGE-AN

Changing your password or logging out does not actually cut off sessions that are already signed in. An old login token keeps working until it expires, and it can be repeatedly refreshed to stay alive, so someone who got hold of a token is not locked out by a password change.

filebrowserauthn-jwt-sessionmedium
medium Possibly Valid
Unauthenticated login/signup decode an unbounded, un-timed request body before any credential check
DOK-100049-FILEBROWSER-AUTH-METHODS-PUBLIC-PRE-AUTH-EN

Anyone on the internet can hit the login and signup pages without an account, and the server reads their entire request into memory before checking any password. There is no limit on how big or how slow that request can be, so an unauthenticated attacker can push the server to consume excessive memory or hold…

filebrowserauth-methodsmedium
medium Possibly Valid
tus PATCH upload copy has no read/idle deadline or concurrency cap, enabling slow-body resource exhaustion
DOK-100052-FILEBROWSER-TUS-UPLOAD-TUS-PATCH-STREAMS

When a logged-in user uploads a file in chunks, the server keeps the connection, an open file, and a background helper alive for as long as the upload lasts, with no time limit and no cap on how many can run at once. A user who opens many deliberately slow uploads can tie up the server's resources.

filebrowsertus-uploadmedium
medium Possibly Valid
Public share auth treats an empty stored Token as a valid match, bypassing the password on legacy tokenless shares
DOK-100085-FILEBROWSER-SHARES-PUBLIC-EMPTY-STORED-TOKEN

A password-protected share whose stored access token is empty can be opened without the password by supplying an empty token in the URL. This affects older shares created before the token feature existed, letting anyone with the share link view protected content without knowing the password.

filebrowsershares-publicmedium
medium Possibly Valid
WebSocket /api/command upgrades and reads unbounded/undeadlined before the exec-authorization check
DOK-100095-FILEBROWSER-COMMAND-EXECUTION-WS-API-COMMAND-HAS

Any logged-in user can open the command WebSocket even without permission to run commands, and the server will hold the connection open forever or accept an unlimited-size message before it checks their permission. Repeating this can tie up server memory and connections until the service degrades.

filebrowsercommand-executionhigh
medium Possibly Valid
Path deny rules match case-sensitively while the OS filesystem resolves case-insensitively, allowing rule bypass
DOK-100096-FILEBROWSER-FILESYSTEM-PATH-RE-DENY-ACCESS-RULE-B

Access rules that block a folder or file compare names letter-for-letter, but on Mac, Windows, and some network drives the filesystem treats different capitalizations as the same file. So a blocked path like /secret can be reached by asking for /Secret.

filebrowserfilesystem-path-resolutionmedium
medium Possibly Valid
Redis upload cache has no orphan-file reclamation, unlike the memory backend, leaking abandoned tus uploads on disk
DOK-100101-FILEBROWSER-TUS-UPLOAD-REDIS-UPLOAD-CACHE

When file-uploads are configured to use Redis (for multi-server setups), abandoned or incomplete uploads are never cleaned off disk. The memory-based setup deletes them automatically, but the Redis one has no such cleanup, so leftover files pile up until the disk fills.

filebrowsertus-uploadhigh
medium Possibly Valid
Hook re-authentication silently erases admin-configured per-user access Rules
DOK-100104-FILEBROWSER-AUTH-METHODS-HOOK-RE-AUTHENTICA

When an external login hook is used, logging back in can quietly wipe the custom access restrictions an administrator set on that user account. A rule meant to block the user from certain files can silently disappear, giving the user more access than intended.

filebrowserauth-methodshigh
medium Possibly Valid
File-event hook subprocesses spawn without concurrency, timeout, or Perm.Execute gating (resource abuse)
DOK-100120-FILEBROWSER-COMMAND-EXECUTION-FILE-EVENT-HOOKS-S

When the administrator has set up commands that run automatically on file changes, any user allowed to create or edit files can trigger those commands over and over with no limit. Rapid file operations can pile up unlimited background processes and slow down or crash the server.

filebrowsercommand-executionmedium
medium Possibly Valid
No rate limiting/lockout on unauthenticated share password bcrypt check (brute-force + CPU-exhaustion)
DOK-100127-FILEBROWSER-SHARES-PUBLIC-NO-RATE-LIMITING-L

For password-protected public share links, anyone who has the link can try passwords as fast as the server can check them, because there is no limit, delay, or lockout on failed attempts. This allows both password guessing and turning cheap requests into heavy server CPU load.

filebrowsershares-publicmedium