Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with any tenant account or API key
-
ExploitObtain victim's subscription UUID
-
ExecutionCall SubscriptionViewSet with the foreign subscription_id
-
ImpactRead, cancel, or modify victim tenant's billing
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 | The attacker must hold valid authentication on the Lotus instance - an authenticated user account OR a valid API key from ANY organization (PR:L); this is a default code path in SubscriptionViewSet.get_object(), not a feature that must be enabled, so no special configuration is required. The practical limiting factor is that the attacker must know or enumerate the target organization's subscription_record_id, which is a UUID and therefore not readily guessable. Exploitation is cross-tenant and only meaningful on multi-organization (shared or self-hosted multi-tenant) deployments of Lotus through 0.10.2; a single-tenant deployment has no other organization to target. No user interaction is required. |
| Impact | Signals are mixed and point to a moderate, not urgent, priority. The input CVSS 4.0 base is 6.0 (Medium): AV:N and UI:N make it remotely reachable, but PR:L means a valid account or API key is required, and the vendor marked AC:H/AT:P - however the description gives no mechanism (no race, timing, or attacker-uncontrolled precondition is stated) to justify high complexity; it describes a plain identifier substitution, so AC:H/AT:P appears over-stated and the practical complexity is low. There is no EPSS score in the input, the CVE is not in CISA KEV, and no working exploit code is identified, so this is 'no public exploit identified at time of analysis.' The vuln.today Decision label is 'this_month' (not act_now/emergency), consistent with a real-but-schedulable issue. The strongest aggravating factor is impact: cross-tenant VI:H means an attacker in one organization can alter another tenant's billing (cancel, update, switch plans, modify addons). The strongest mitigating factors are that the product (uselotus Lotus) has a small real-world footprint and exploitation requires both authentication and knowledge of another organization's subscription UUID. Net: patch on a normal cycle (this month) rather than as an emergency. |
| Exploit ScenarioDerived | An authenticated user or API-key holder belonging to one tenant organization on a shared/self-hosted Lotus instance sends a request to the subscription endpoint supplying another organization's subscription_record_id (a UUID). Because SubscriptionViewSet.get_object() queries an unscoped queryset with no organization filter or permission check, the request succeeds and lets the attacker read, cancel, update, switch plans, or modify addons on the victim tenant's subscription. No public exploit is identified, but the vulnerable line and the one-line fix are public in PR #802. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Cross-organization insecure direct object reference in Lotus (uselotus/lotus) through 0.10.2 lets an authenticated user or a valid API key from any organization read, cancel, update, switch plans on, or modify add-ons of another tenant's subscription - and therefore alter that tenant's billing - by supplying the victim's subscription_record_id to SubscriptionViewSet. The handler resolves the object from the unscoped queryset rather than the organization-filtered one, so tenant isolation is not enforced; no special configuration is needed because this is the default code path on multi-organization deployments. An upstream fix exists in pull request #802 / commit 1375d5140795d72251c89f47200879b9bd1d6d96, but no released patched version is independently confirmed, and no public exploit code was identified at time of analysis; the practical constraint is that the target subscription_record_id is a UUID and must be known or enumerated.
RemediationAI
Vendor-released patch status: patch available per vendor advisory, with the upstream fix carried in pull request https://github.com/uselotus/lotus/pull/802 and commit 1375d5140795d72251c89f47200879b9bd1d6d96, which replaces self.queryset.get(subscription_record_id=subscription_uuid) with self.get_queryset().get(subscription_record_id=subscription_uuid) in backend/api/views.py; a tagged release containing that commit is not independently confirmed, so operators should apply the commit or the PR and verify the diff is present before considering the instance fixed. Because the flaw is a missing tenant filter rather than a toggleable feature, there is no configuration switch that fully removes the exposure on an unpatched multi-tenant instance; until the fix is deployed, reduce the attack surface by limiting which organizations can mint API keys and by restricting who can hold authenticated accounts on the shared instance (trade-off: onboarding and automation for legitimate tenants becomes more manual), and by restricting network access to the API so only expected client networks reach it (trade-off: breaks externally hosted integrations and public sign-up flows). Where full API logs are retained, alert on requests where the authenticated principal's organization differs from the organization owning the requested subscription_record_id, since that mismatch is the exploitation signature, and review billing or plan-change events for subscriptions whose owner organization does not match the acting principal; detection depends on correlation identifiers being present in the logs and will not stop the request, only surface it. Keeping the instance single-organization or isolating tenants on separate deployments avoids the cross-tenant path entirely, at the cost of losing shared-tenant operations.
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
Lotus is an open-source usage-based billing and subscription management platform built on Django REST Framework. The affected component is SubscriptionViewSet.get_object() in backend/api/views.py (referenced at line 754 in the 0.10.2 tree), the lookup routine that DRF invokes for detail routes and custom actions such as cancel, plan switching and add-on changes. The method called self.queryset.get(subscription_record_id=subscription_uuid) instead of self.get_queryset().get(...); the raw queryset attribute is not filtered by the requesting user's organization, so the organization-scoping and permission filtering that the viewset otherwise applies is bypassed. This is CWE-639 (Authorization Bypass Through User-Controlled Key): the attacker controls the subscription_record_id key and the object is returned without an ownership check. The supplied patch is a one-line change to use the scoped get_queryset(). Exploitation requires valid authentication - an account or API key belonging to any organization - and knowledge of the victim's subscription_record_id, which is a UUID and therefore not readily guessable; the trigger is a crafted request to the viewset's object routes carrying a foreign subscription_record_id. Impact is limited to multi-organization (shared or self-hosted multi-tenant) deployments of CPE uselotus:lotus through 0.10.2; on a single-tenant instance there is no other organization to target. Read and cancel/update integrity impact is confirmed by the source change, while confidentiality impact on the target tenant's billing data is limited to the subscription object itself.
Know when Lotus 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:H/AT:P/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N
Simple identifier substitution gives AC:L (not vendor AC:H); authenticated tenant required (PR:L); data read plus billing modification give C:L/I:H, with no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Lotus through 0.10.2 contains an insecure direct object reference vulnerability in SubscriptionViewSet.get_object() that uses an unscoped queryset without organization filtering or permission checks. Authenticated users or API keys from any organization can supply another organization's subscription_id to read, cancel, update, switch plans, or modify addons, altering another tenant's billing.
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
Lotus is an Implementation of the Filecoin protocol written in Go. Rated high severity (CVSS 7.5), this vulnerability is
SQL injection in the Lotus (uselotus/lotus) metering and billing platform through 0.10.2 lets an authenticated organizat
SQL injection in Lotus through 0.10.2 lets authenticated organization users read and modify the shared multi-tenant data
SQL injection in the Lotus billing platform through 0.10.2 allows an authenticated organization-level user to execute ar
Improper authentication in the Go event-ingestion middleware of uselotus Lotus through 0.10.2 lets unauthenticated remot
An authorization bypass in Lotus (uselotus/lotus) through 0.10.2 lets a self-registered, authenticated user switch into
EUVD-2026-108131
GHSA-pjmr-f3w6-46qx
NVD
CVE.org
VulDB
Exploit-DB