Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister/log in as low-privilege tenant user
-
ExploitCall GET /api/v1/reports
-
ExecutioncallAdapter skips space filter on enable_space_global object
-
ImpactDisclose other tenants' report metadata and schema
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
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 | Requires an authenticated account on a multi-tenant Steedos Platform instance (version through 3.0.15-beta.51); any low-privilege tenant user suffices (PR:L), with no admin rights and no user interaction needed. The specific trigger is that the 'reports' object is declared enable_space_global in reports.object.yml, and objectql's callAdapter (object.ts lines ~2899-2913) skips the space/tenant filter on find/findOne for such objects, so a plain GET /api/v1/reports returns other tenants' definitions. Limiting factors: the attacker must already possess valid credentials in the deployment, the instance must be genuinely multi-tenant for cross-tenant leakage to matter, and only metadata (report names, descriptions, object and field API names) is exposed - not report results or underlying records. |
| Impact | This is a genuine but moderate-severity information-disclosure issue, not a top-priority emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N, 5.3 Medium) is internally consistent with the description: network-reachable, low complexity, but requiring an existing authenticated low-privilege account (PR:L) and yielding only low confidentiality impact with no integrity or availability impact. That PR:L requirement is the single biggest risk-reducer - an attacker must already hold a valid tenant account, so this is not anonymous/pre-auth exploitation. There is no EPSS score, no CISA KEV listing, and no vendor-claimed active exploitation in the provided data, so exploitation status is 'no public exploit identified at time of analysis'; note, however, that one reference is a detailed third-party HackMD technical write-up, which lowers the bar for an attacker to reproduce the bug even though it is not packaged exploit code. The impact ceiling is metadata only (report names, descriptions, object and field API names), not underlying records, so the practical consequence is reconnaissance/schema disclosure across tenants rather than direct data theft. One point to verify: cross-tenant data exposure in a multi-tenant SaaS could arguably justify a CVSS scope change (S:C / SC not N), but the input encodes no scope change - defenders treating this as a boundary-crossing issue should weigh it slightly higher than the raw 5.3 suggests. Overall: real and worth patching, but a targeted, authenticated, low-impact issue rather than a wormable critical flaw. |
| Exploit ScenarioDerived | An attacker who has signed up for or already holds a low-privilege account in one tenant of a shared Steedos deployment sends GET /api/v1/reports. Because the reports object is marked enable_space_global and objectql's callAdapter omits the space (tenant) filter on find/findOne, the response returns report definitions belonging to other tenants, leaking report names, descriptions, and the object and field API names that reveal those tenants' data model. No weaponized exploit is published, but a public HackMD write-up documents the exact request and root cause. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
Cross-tenant information disclosure in Steedos Platform through 3.0.15-beta.51 allows any authenticated low-privilege user to read other tenants' report definitions by issuing a single GET /api/v1/reports request. The root cause is that the 'reports' object is declared enable_space_global, and objectql's callAdapter skips space (tenant) filtering on find/findOne for such objects, so the API returns report names, descriptions, and object and field API names belonging to other tenants. The exposure is limited to metadata rather than underlying records, the attacker must already hold valid credentials on a genuinely multi-tenant instance, and no public exploit identified at time of analysis; exploitation status is not confirmed actively exploited (CISA KEV).
RemediationAI
No vendor-released patch identified at time of analysis, and the references point to the vulnerable source in the v3.0.15-beta.51 tag rather than to a fixed release, so teams should plan around git-based or configuration-based mitigations. The most direct fix is to stop treating the reports object as space-global: remove the enable_space_global declaration from reports.object.yml (or, if the metadata is compiled into the deployment, patch the delivered object definition) so that objectql's callAdapter re-applies the space filter on find/findOne and GET /api/v1/reports returns only the caller's own tenant's report definitions; the trade-off is that any legitimate cross-tenant sharing of report templates will stop working and must be replaced with an explicit role- or admin-scoped path. If modifying the object definition is not feasible, gate the endpoint at the reverse proxy or API gateway so that /api/v1/reports is restricted to specific privileged roles or internal networks, accepting that this is a compensating control that leaves the underlying adapter flaw in place and can be bypassed by any other route that reaches the same object. Additional hardening includes upgrading past 3.0.15-beta.51 as soon as a fixed build is published, auditing other objects that carry enable_space_global for the same missing-filter pattern, monitoring API logs for GET /api/v1/reports from low-privilege accounts across multiple spaces, and treating exposed object and field API names as a schema-disclosure signal that warrants tightening field-level permissions. Because the vulnerability is only reachable by an authenticated user, prompt review and de-provisioning of stale tenant accounts reduces the practical attack surface while a fix is prepared; consult the VulnCheck advisory at https://www.vulncheck.com/advisories/steedos-platform-through-3.0.15-beta.51-cross-tenant-information-disclosure-via-reports-api and the public write-up at https://hackmd.io/@hieuPenguinnn/steedos-platform-reports-cross-tenant-idor for details and any updated vendor guidance.
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
Steedos Platform is a low-code/enterprise application platform whose data layer is objectql, a metadata-driven ORM that maps YAML object definitions to database collections and exposes them through a REST API (versions through 3.0.15-beta.51, CPE cpe:2.3:a:steedos:steedos-platform:*:*:*:*:*:*:*:*). Steedos implements multi-tenancy through a 'space' concept: objectql normally injects a space filter into find/findOne queries so that a user in one tenant cannot see records belonging to another. Object definitions can set the flag enable_space_global, which tells the adapter to treat the object as tenant-agnostic and therefore skip that space filter. The 'reports' object is declared with enable_space_global in services/service-core-objects/main/default/objects/reports.object.yml, and the filter-skipping logic lives in objectql's callAdapter (packages/objectql/src/types/object.ts, roughly lines 2899-2913). The result is an incorrect-authorization condition (CWE-863) in which the authorization model - tenant scoping - is not applied to an object that contains tenant-specific content. Because report definitions embed object and field API names, the leak also hands an attacker a partial map of other tenants' data schemas, which can be used to plan further abuse, though report results and the underlying business records are not exposed by this endpoint.
Know when Steedos Platform 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:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Network-reachable API exploitable by any authenticated low-privilege user (PR:L, AC:L, UI:N); only metadata is disclosed so C:L with no integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Steedos Platform through 3.0.15-beta.51 contains an authorization bypass vulnerability that allows authenticated users to read other tenants' report definitions by querying the reports object. Because objectql's callAdapter skips space filtering for enable_space_global objects on find/findOne, attackers can call GET /api/v1/reports to disclose report names, descriptions, and object and field API names.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-102957
GHSA-388m-pwcw-qwh5
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB