Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as any Beszel user
-
DeliveryObtain/guess a target system ID
-
ExploitPOST arbitrary systemId to /api/beszel/user-alerts
-
ExecutionAlert rule registered on inaccessible system
-
ImpactReceive notifications leaking system names and metrics
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Requires a valid authenticated Beszel account of any privilege level, including read-only users (confirmed by the patch's readOnlyUser test cases). The attacker must supply a valid target system ID in the POST/DELETE body of /api/beszel/user-alerts; because Beszel/PocketBase system record IDs are 15-character random identifiers, successful exploitation depends on knowing or guessing them (the CVSS AT:P requirement). Exploitation is most realistic on multi-user/multi-tenant instances; a single-user deployment or one running with SHARE_ALL_SYSTEMS=true has no meaningful boundary to cross. Impact is limited to disclosure of target system names/metrics and tampering with alert rules - no data destruction, code execution, or service disruption. |
| Impact | This is a genuine but low-severity authorization flaw, not a high-impact issue. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N, base 2.3) correctly captures modest impact: an authenticated, low-privileged user can cross an object-ownership boundary but only gains partial confidentiality (system names/metrics) and partial integrity (alert-rule creation/deletion) - no availability or code-execution impact. The AT:P (attack-requirement present) metric is well-justified because valid target system IDs must be known or guessed; Beszel is built on PocketBase, whose record IDs are 15-character random strings, so blind exploitation is non-trivial on a well-populated instance. No EPSS score, KEV listing, or POC is provided in the input, and VulnCheck reported it as a coordinated disclosure with a vendor patch rather than observed exploitation - so there is no signal of real-world attacks. My independent 3.1 assessment (~5.4, S:U/C:L/I:L) reads slightly higher than the vendor 4.0 figure, reflecting the known tendency of CVSS 4.0 to score all-Low, single-requirement bugs lower than 3.1; the two frameworks are consistent in substance. Net: real but low priority - patch during normal maintenance, prioritize on multi-tenant/shared instances. |
| Exploit ScenarioDerived | On a shared Beszel instance, a low-privileged (even read-only) user sends a POST to /api/beszel/user-alerts with a JSON body containing another tenant's system ID, registering an alert rule on a system they have no access to. When that alert fires, the attacker receives notifications that disclose the target system's name and metric values, leaking monitoring data across the ownership boundary; the DELETE handler similarly lets them remove others' alerts. No public exploit code is identified in the provided data, though the fix commit and its tests concretely demonstrate the vulnerable request shape. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
In Beszel before 0.19.0, any authenticated user - including a read-only account - can create or delete alert rules on monitoring systems they are not authorized to view, because the POST and DELETE /api/beszel/user-alerts handlers fail to verify that the supplied system ID belongs to the caller. Exploitation requires knowledge or guessing of a target system's 15-character PocketBase record ID (reflected in the CVSS 4.0 AT:P prerequisite), which limits practical impact and severity; successful abuse leaks target system names and metrics through the resulting alert notifications and allows unauthorized tampering with alert configuration. No public exploit code has been identified at time of analysis, and this CVE is not listed in CISA KEV; the vendor-released fix is Beszel 0.19.0.
RemediationAI
Upgrade to Beszel 0.19.0 or later - the vendor-released patch - which enforces the userHasSystem ownership check in both the POST and DELETE handlers of /api/beszel/user-alerts; the fixing commit is 6f92b9396dfbacaf71c20444d175af78e0517409 (https://github.com/henrygd/beszel/commit/6f92b9396dfbacaf71c20444d175af78e0517409) and release notes are at https://github.com/henrygd/beszel/releases/tag/v0.19.0, with the advisory at https://github.com/henrygd/beszel/security/advisories/GHSA-759g-ch5m-2gch. If immediate upgrade is not possible, compensating controls are limited because the vulnerable endpoints are the same ones legitimate users rely on: restrict Beszel account provisioning so only trusted operators hold credentials, since any authenticated account (including read-only) can exploit the flaw; audit the alerts collection for rules whose 'user' field does not match a system in that user's access list and remove them; and reduce exposure of system record IDs by ensuring non-admin users cannot enumerate systems through other API paths or shared dashboards. Do not treat SHARE_ALL_SYSTEMS=true as a mitigation - it deliberately removes per-system boundaries and would eliminate the access model entirely, but note that flipping it to false on an instance that previously relied on it will break users who legitimately shared all systems. Deployments serving a single operator have no cross-tenant boundary to protect and can prioritize this upgrade accordingly.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Beszel is a lightweight server-monitoring hub built on PocketBase (Go) with a SvelteKit front end; its alerts subsystem stores alert rules in a PocketBase 'alerts' collection keyed by user and system. CWE-639 (Authorization Bypass Through User-Controlled Key) is the exact root cause here: the UpsertUserAlerts and DeleteUserAlerts handlers accepted a client-supplied 'systems' array and iterated over it without checking ownership, so the request body's object reference - not server-side session context - determined which records were touched. The upstream commit 6f92b9396dfbacaf71c20444d175af78e0517409 adds a userHasSystem() helper that resolves the system record by ID and requires either the requesting userID to appear in the system's 'users' list or the SHARE_ALL_SYSTEMS environment variable to be 'true'; records failing the check are skipped (continue) rather than processed. Regression tests added in the same commit confirm both the read-only-user scenario ('POST/DELETE ignores systems the user cannot access') and that legitimate access still works. Because the underlying record identifiers are random 15-character PocketBase IDs, the attack surface is broad only where IDs are exposed or guessable and where multiple tenants share one hub instance.
Know when Beszel 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Remote authenticated low-priv user (PR:L) crossing an object boundary; partial confidentiality (system names/metrics) and integrity (alert rules), no availability; ID-guessing captured as AT:P in 4.0.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Beszel before 0.19.0 contains an insecure direct object reference vulnerability in the POST and DELETE /api/beszel/user-alerts handlers that allows any authenticated user to create or delete alerts on systems they cannot access. Attackers can supply arbitrary system IDs in the request body to register alert rules and receive notifications disclosing target system names and metrics.
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
Path traversal in Beszel hub's container API endpoints allows authenticated users, including those with read-only roles,
Beszel prior to 0.18.7 allows authenticated users to access monitoring data for any system without authorization checks,
EUVD-2026-83909
GHSA-x7pw-mf2h-rgr4
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB