Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid low-privilege API token with read grant on one ObjectType
-
DeliveryEnumerate or learn target object UUID of another ObjectType
-
ExploitRequest GET /api/v2/objects/{uuid}/{index} history-detail endpoint
-
ExecutionPer-object authorization check skipped, 200 returned
-
ImpactExfiltrate full versioned object data (e.g. BSN, case records)
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 non-superuser API token that holds a read grant on at least one ObjectType; no special product configuration, feature flag, or non-default deployment mode is needed, and it works against default configurations via the standard history-detail route GET /api/v2/objects/{uuid}/{index}. The attacker must also know or enumerate the target object's UUID. Exploitation is LIMITED by the requirement to already possess a legitimate low-privilege API token (so it is not fully unauthenticated), by being read-only (no data modification), and by the product's government-sector deployment scope; superuser tokens are unaffected because they already have broad access. Fixed versions 2.5.1, 3.6.2, 4.0.2, and 4.1.1 remediate it by routing history_detail through the same per-object permission check as retrieve. |
| Impact | This is a genuine but moderate-priority authorization flaw, not a high-CVSS paper tiger nor an emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N = 6.5 Medium) is well-supported by the evidence: it is network-reachable, low-complexity, and requires a low-privilege API token (PR:L), with high confidentiality impact (full cross-ObjectType object data disclosure) and no integrity or availability impact - consistent with a read-only IDOR. The vuln.today decision label is 'this_month' (not act_now/emergency), aligning with a fixable-but-not-frantic posture. No CISA KEV listing and no EPSS score were supplied, so there is no signal of active or widespread exploitation; the advisory itself states no prior CVE/GHSA/OSV record existed, indicating this is a freshly reported issue rather than one seen in the wild. The GHSA advisory contains a concrete, author-reproduced proof of concept against the official 4.1.0 image, so exploitability is well-demonstrated even though no weaponized exploit code is published. The signals are internally consistent - there is no CVSS-vs-description conflict here; the description, source diff, and advisory all agree on mechanism and preconditions. The one input discrepancy is the 'Authentication Bypass' tag, which mischaracterizes an authorization (per-object-type grant) bypass. Net: a real data-disclosure priority for operators of this product, warranting prompt patching, but its blast radius is bounded by the need for a valid API token and the product's narrow deployment base. |
| Exploit ScenarioDerived | An attacker (or a legitimate but limited integration partner) holding a valid non-superuser API token with a read grant on only one ObjectType requests GET /api/v2/objects/{uuid}/{index} for an object belonging to an ObjectType the token has no grant for. Because history_detail skips the per-object permission check, the endpoint returns 200 with the object's full versioned data - including fields the normal retrieve endpoint would 403 on. A detailed proof of concept reproduced against the official open-object:4.1.0 image is documented in the GHSA advisory (full packet captures offered on request), though it is not published as standalone working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Cross-ObjectType object disclosure in Open Object (Objects API) versions 2.4.3 through 4.1.0 allows an authenticated holder of a valid, non-superuser API token with a read grant on just one ObjectType to retrieve the complete versioned record of an object belonging to any other ObjectType through GET /api/v2/objects/{uuid}/{index}, including sensitive fields such as a citizen BSN in government deployments. The same token correctly receives 403 from the normal retrieve endpoint, so only the history-detail route leaks data (CWE-639, CVSS 6.5, PR:L). The GitHub security advisory (GHSA-55w6-rqp5-j5wx) includes a local reproduction against the official 4.1.0 image; there is no CISA KEV entry or other indication of in-the-wild exploitation at time of analysis, and remediation is available in 2.5.1, 3.6.2, 4.0.2 and 4.1.1.
RemediationAI
Vendor-released patches exist: upgrade to 2.5.1, 3.6.2, 4.0.2 or 4.1.1 depending on your release branch (advisory: https://github.com/maykinmedia/open-object/security/advisories/GHSA-55w6-rqp5-j5wx; fixes in commits 11c5b85ea5d1d80f940883f01b8b8ea80ccdd47c, 27e806eff04c52ebe1e78126c288b63fc0308b52, 6154d9c2ed8c162b61f2d42db2de4eda5081347f and ce6b1820619c843748bc5231597aa7fc060d95fe). The patch routes history_detail through the same object-level permission check as retrieve and extends the token permission to the history_detail action, so no configuration change is required after upgrading. If upgrading immediately is not possible, the vendor's stated alternative is to make history_detail apply filter_for_token to its queryset as list and search already do; as compensating controls, restrict network reachability of /api/v2/objects/ to known API consumers, audit and reduce tokens whose read grants span multiple ObjectTypes, and review API access logs for history-detail requests (GET /api/v2/objects/{uuid}/{index}) against objects outside a token's granted ObjectType, rotating any token that shows such access - each of these narrows but does not close the gap, since an entitled low-privilege token still reaches the endpoint on an unpatched instance.
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
Open Object (published upstream as maykinmedia/open-object and commonly deployed as Objects API) is a Django REST Framework service that stores versioned objects grouped by ObjectType, with per-token grants managed through ObjectTypeBasedPermission and a queryset helper filter_for_token. The history-detail action in src/objects/api/v2/views.py bypasses DRF's object-level authorization: instead of calling self.get_object(), it builds the lookup from self.get_queryset() plus get_object_or_404, so check_object_permissions - and therefore the per-object branch of ObjectTypeBasedPermission.has_object_permission - never runs. Two further conditions leave the request unconstrained: filter_for_token is only applied by get_queryset() for the list and search actions, and ObjectTypeBasedPermission.has_permission returns True for every non-create action. The sibling history action does call self.get_object() and enforces the grant, confirming this is an omission rather than an intended exception, and matching the CWE-639 authorization-bypass-through-user-controlled-key classification where the object UUID/index in the URL is the attacker-controlled selector. The upstream fix (commits 11c5b85e, 27e806ef, 6154d9c2, ce6b1820) adds an explicit self.check_object_permissions call on the fetched record and extends the token permission branch from view.action == "history" to ["history", "history_detail"], with regression tests covering anonymous denial, read-only grants, field-restricted grants and superusers.
Know when the next one hits your stack
- 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:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Network API endpoint, low complexity, requires a valid low-privilege token (PR:L); read-only disclosure of full object data gives C:H with no integrity or availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
Open Object provides an API and admin interface to manage objects and object types. From 2.4.3 until 2.5.1, 3.6.2, 4.0.2, and 4.1.1, a token scoped to read one ObjectType can read the full versioned record of an object of any other ObjectType via the history-detail endpoint GET /api/v2/objects/{uuid}/{index}. The history_detail action in src/objects/api/v2/views.py calls self.get_queryset() and get_object_or_404 directly instead of self.get_object(), so check_object_permissions and the per-object check in ObjectTypeBasedPermission.has_object_permission are not invoked. The queryset's filter_for_token applies only to the list and search actions, while ObjectTypeBasedPermission.has_permission allows non-create actions, leaving neither check to constrain history-detail records to the token's permitted ObjectType. The normal retrieve endpoint returns 403 for the same unauthorized object, and the sibling history action enforces the grant. Any valid non-superuser API token with a read grant on at least one ObjectType can therefore disclose another ObjectType's complete versioned object data, which can include citizen or case records and sensitive identifiers in government deployments. This issue is fixed in versions 2.5.1, 3.6.2, 4.0.2, and 4.1.1.
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.
EUVD-2026-112551
NVD
CVE.org
GitHub
Exploit-DB