Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with transaction and accounting permissions
-
DeliveryEnumerate sequential bank_account_id integers
-
ExploitCraft POST /transaction/save with foreign bank_account_id
-
ExecutionController persists transaction without ownership validation
-
ImpactTransaction detail view renders co-tenant bank account name, bank name, and card last four digits
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 | Exploitation requires an authenticated CRM session with both transaction creation and accounting creation permissions - a standard business-user permission set, not administrative access, as confirmed by the CVSS PR:L metric. The vulnerability is exclusively relevant to multi-tenant shared-instance deployments where multiple companies co-exist in the same database; a single-company self-hosted installation has no foreign-company records to access and is therefore unaffected. The attacker must enumerate or guess valid integer IDs for bank_account_id or bank_card_id values belonging to co-tenant companies; in typical Laravel/Eloquent applications that use auto-incrementing primary keys, sequential integer guessing is trivial. Limiting factors are: (1) authentication with specific dual-permission assignment is required, (2) the deployment must be a shared multi-tenant instance, and (3) disclosed information is bounded to bank account name, institution name, and card last four digits - not full account numbers or card credentials. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N) scores 5.3, correctly reflecting that exploitation is network-accessible but requires authenticated low-privilege access and produces only limited confidentiality impact. No EPSS score was provided in the intelligence package, so exploitation probability cannot be quantitatively benchmarked. The vulnerability is absent from CISA KEV and no public exploit code has been identified, which substantially lowers realistic urgency - exploitation requires a deliberate insider or a compromised account with the specific combined transaction-and-accounting-creation permission set. The exposed data (bank name, account name, card last four digits) is sensitive but falls short of enabling direct financial fraud without additional fields such as full card numbers or account numbers. The blast radius is strictly bounded to multi-tenant shared-instance deployments; single-tenant self-hosted installations carry no cross-company risk. On balance this is a real but moderate-priority finding: the authentication and permission prerequisites make opportunistic mass exploitation unlikely, though organizations running shared CRM instances with external or semi-trusted users should treat patching as a near-term priority rather than deferring indefinitely. |
| Exploit ScenarioDerived | A malicious employee or compromised account holder with transaction and accounting creation permissions in a shared CRM instance increments integer bank_account_id values from their own known account ID upward, submitting POST /transaction/save requests for each candidate. Because the endpoint formerly performed no company-ownership check, a valid foreign ID is accepted, persisted, and the transaction detail view subsequently renders the target company's bank account name, institution name, and card last four digits to the attacker. No public exploit code has been identified, but the attack requires only standard HTTP request manipulation with no special tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 21, 2026
Tenant data boundary failure in Roskus Prospero Flow CRM 4.9.1-5.14.0 allows authenticated users holding transaction and accounting creation permissions to read another co-tenant company's bank account name, institution name, and card last four digits by supplying a foreign bank_account_id or bank_card_id in POST /transaction/save. The root cause (CWE-639, IDOR) is the complete absence of company-ownership validation on user-controlled integer foreign keys before they are persisted and rendered - the controller correctly scoped the new transaction's company_id but applied no such scoping to associated reference IDs. No active exploitation or public POC has been identified at time of analysis; a vendor fix is available upstream via GitHub commit 5fd1fe8 and PR #261.
RemediationAI
Apply the upstream fix available at https://github.com/Roskus/prospero-flow-crm/commit/5fd1fe862bbdcbacf5d7e05c1c123981d8809674 (merged via PR #261 at https://github.com/Roskus/prospero-flow-crm/pull/261), which introduces company-scoped Rule::exists() validation in TransactionSaveRequest.php and controller-level findOrFail() ownership guards for bank_account_id, bank_card_id, customer_id, supplier_id, and transaction_category_id. No specific tagged release version number containing this fix has been confirmed in available data - operators should verify their deployed build includes commit 5fd1fe8 or later. As an interim compensating control before patching, restrict the transaction and accounting creation permissions to the minimum necessary set of fully trusted internal users, which reduces the population able to exploit the flaw; note that this may disrupt legitimate workflows for users who hold those permissions for valid business reasons. Additionally, audit existing transaction records for bank_account_id or bank_card_id values that do not match the creating company's own accounts as a retrospective indicator of potential prior exploitation.
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
Prospero Flow CRM is a Laravel/PHP multi-tenant CRM application where different companies share a common database and are segregated by a company_id discriminator column. CWE-639 (Authorization Bypass Through User-Controlled Key) describes the root cause: the application accepts sequential integer identifiers for bank_account_id and bank_card_id as user-supplied input and queries them directly without a WHERE company_id = auth_user.company_id constraint, exposing records belonging to other tenants. The source diff shows that TransactionSaveController.php called $transaction->fill($request->validated()) with the raw validated payload - setting company_id on the transaction itself but performing no ownership check on the foreign key references. The fix adds both a Laravel Rule::exists() scoped to company_id in TransactionSaveRequest.php (request-layer defense) and explicit BankAccount::where('company_id', $companyId)->findOrFail() calls in the controller (defense-in-depth). The affected CPE is cpe:2.3:a:roskus:prospero_flow_crm:*:*:*:*:*:*:*:* covering versions 4.9.1 through 5.14.0.
Know when Prospero Flow Crm 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 endpoint requires authenticated low-privilege user with specific permissions; only partial confidentiality impact from bank detail disclosure, no integrity or availability effect.
Primary rating from Vendor (Secur0).
CVSS VectorVendor: Secur0
DescriptionCVE.org
Authorization Bypass Through User-Controlled Key in the transaction save endpoint in Roskus Prospero Flow CRM 4.9.1 through 5.14.0 allows a user with transaction and accounting creation permissions to disclose another company's bank account name, bank name and card last four digits via a bank_account_id or bank_card_id belonging to that company in POST /transaction/save, which is persisted and rendered without any company ownership check.
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.
More in Prospero Flow Crm
View allCross-tenant authorization bypass (IDOR/BOLA) in Roskus Prospero Flow CRM 4.0.0 through 5.3.1 lets an authenticated user
Broken function-level authorization in Prospero Flow CRM before 5.5.3 lets any authenticated low-privileged user (e.g. t
Cross-tenant transaction data exposure in Roskus Prospero Flow CRM 5.0.0-5.3.5 allows any authenticated user on a shared
Privilege escalation in Roskus Prospero Flow CRM before version 5.2.1 permits any authenticated user - regardless of ass
Cross-tenant IDOR in Roskus Prospero Flow CRM before 5.4.7 allows any authenticated user to read sensitive product recor
Cross-tenant IDOR in Roskus Prospero Flow CRM's ticket management component allows any authenticated user - regardless o
Cross-tenant payroll data exposure in Roskus Prospero Flow CRM before 5.15.10 enables authenticated users holding standa
Cross-tenant IDOR in Prospero Flow CRM before 5.4.8 allows any authenticated user to blindly overwrite contact records b
Cross-tenant record injection in Roskus Prospero Flow CRM before 5.14.0 allows any authenticated user to silently insert
Cross-tenant IDOR in Roskus Prospero Flow CRM before 5.5.3 allows any authenticated user to read, modify, and delete ord
Unauthorized notification deletion in Prospero Flow CRM allows any authenticated user to delete other users' notificatio
Order confirmation in Roskus Prospero Flow CRM before 5.15.11 can be triggered by an unauthenticated attacker on behalf
EUVD-2026-63935
GHSA-5v96-p23j-5mwq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB