Skip to main content

Lotus CVE-2026-115329

| EUVDEUVD-2026-108131 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-22 VulnCheck GHSA-pjmr-f3w6-46qx
6.0
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with any tenant account or API key
  2. Exploit
    Obtain victim's subscription UUID
  3. Execution
    Call SubscriptionViewSet with the foreign subscription_id
  4. Impact
    Read, 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

lotus 0 ≤0.10.2

Affected Packages

euvd lotus no fix

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

Vendor (VulnCheck) PRIMARY 6.0 MEDIUM
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
vuln.today AI 7.1 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

Prevalence
Low
niche open-source SaaS billing platform, small production footprint
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy