Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with create-invoice ability
-
DeliveryEnumerate foreign estimate IDs
-
ExploitPOST convert-to-invoice with victim estimate ID
-
ExecutionRoute-model binding resolves cross-tenant estimate
-
ImpactCopy data into attacker invoice and alter/delete original
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 multi-company (multi-tenant) InvoiceShelf deployment running a version prior to 2.4.0, and an authenticated account that holds the create-invoice ability (PR:L), reaching POST /api/v1/estimates/{estimate}/convert-to-invoice in ConvertEstimateController. The specific prerequisite is that route-model binding resolves the bound Estimate from ANY company while the controller authorizes only the create-invoice ability and omits authorization of access to the estimate itself. Limiting factors: exploitation is irrelevant on single-company instances, needs valid authenticated credentials with the create-invoice ability, and the destructive effect on the source estimate depends on the victim company's configured conversion action reaching checkForEstimateConvertAction. No special network position or user interaction is required. |
| Impact | This is a credible, moderate-priority authorization flaw (CWE-639, IDOR / broken object-level authorization) rather than an overblown high-CVSS issue. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N, base 7.1) is internally consistent with the description: network-reachable API, low complexity, and only low privileges (any authenticated user holding the create-invoice ability) are needed, with no user interaction. The high confidentiality rating is justified because an attacker can exfiltrate another company's full estimate contents (line items, prices, totals, taxes, notes, currency, and customer data), and the low integrity rating reflects that the victim company's configured conversion action can also change or delete the original estimate. No EPSS score, CISA KEV entry, or public POC is present in the provided data, so there is no evidence of active or widespread exploitation; the signals point to an exploitable-but-not-yet-weaponized tenant-isolation bug. The key limiting factor is multi-tenancy: the flaw only matters where one InvoiceShelf instance hosts multiple companies and the attacker already holds a valid account with create-invoice ability, which keeps real-world risk below what the 7.1 score alone might suggest. Note the input tag 'Authentication Bypass' is imprecise - authentication is not bypassed; authorization/tenant isolation is. |
| Exploit ScenarioDerived | An authenticated user in a multi-company InvoiceShelf deployment who holds the create-invoice ability enumerates estimate IDs and sends POST /api/v1/estimates/{id}/convert-to-invoice referencing an estimate belonging to a different company. Because the controller authorized only the create-invoice ability and not access to the route-bound Estimate, the foreign estimate's data is copied into an invoice in the attacker's company and the victim's configured conversion action may alter or delete the original. No public exploit code is identified at time of analysis, but the single-request nature makes exploitation trivial once a low-privileged account is available. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Cross-tenant IDOR in InvoiceShelf before 2.4.0 lets an authenticated user with the create-invoice ability convert an estimate belonging to a different company by calling POST /api/v1/estimates/{estimate}/convert-to-invoice. Because route-model binding resolves the estimate without a company check, the attacker can copy another tenant's line items, prices, taxes, totals, notes, currency and customer data into an invoice in their own company, and the victim's configured conversion action may also modify or delete the source estimate - an exposed-data and integrity impact scored CVSS 7.1 with PR:L, requiring an authenticated account. Exploitation is only meaningful on multi-company (multi-tenant) deployments and no public exploit code has been identified at time of analysis; the vendor-released fix is version 2.4.0.
RemediationAI
Vendor-released patch: 2.4.0 - upgrade InvoiceShelf to version 2.4.0 or later, which adds the missing $this->authorize('view', $estimate) check to ConvertEstimateController (commit e432e4e, PR 661) and, in the same change set, tightens tenant scoping for note retrieval/update/delete via NotePolicy and for bulk user deletion via UsersController. Because those sibling authorization gaps share the same underlying tenant-isolation weakness, apply the full 2.4.0 release rather than cherry-picking only the estimate controller change, otherwise notes and user-deletion endpoints remain cross-tenant exposed. Where an immediate upgrade is not possible, restrict the create-invoice ability to the smallest possible set of trusted roles in each company, since the flaw requires that ability; this is only a partial mitigation because any user who legitimately holds create-invoice can still reach the vulnerable route, and it does nothing about the sibling note and user-deletion issues. On deployments that do not need multi-tenant operation, consolidating to a single company removes the cross-company attack surface entirely but may disrupt legitimate business workflows. Audit estimate and invoice records for invoices created from estimates whose IDs do not belong to the creating company, and review notes and user accounts for unauthorized cross-company changes, on the assumption that exploitation leaves those traces; monitor and, where feasible, restrict access to the /api/v1/estimates/*/convert-to-invoice endpoint at the reverse proxy for non-essential clients, accepting that this may break legitimate mobile and web conversion flows. Consult the vendor advisory at https://github.com/InvoiceShelf/InvoiceShelf/security/advisories/GHSA-j2vg-rxqr-5vc9 and the release notes at https://github.com/InvoiceShelf/InvoiceShelf/releases/tag/2.4.0 for authoritative 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
Root cause is CWE-639 (Authorization Bypass Through User-Controlled Key), the classic insecure direct object reference / broken object-level authorization pattern. In Laravel, route-model binding automatically resolves an {estimate} route parameter into an Eloquent Estimate model by primary key, so the identifier supplied by the caller is attacker-controlled. ConvertEstimateController authorized only the caller's create-invoice ability against the Estimate class rather than authorizing access to the resolved instance, meaning the ability check was global and tenant-agnostic; the missing step was an instance-level policy check (view) against the bound estimate. InvoiceShelf supports multi-company tenancy, so an estimate ID from any company was convertible by any user holding create-invoice anywhere. The disclosure surface includes the source estimate's line items, prices, totals, taxes, notes, currency and customer data, and the source record can further be altered or removed when the victim company's configured conversion action reaches checkForEstimateConvertAction. The upstream fix commit e432e4e adds $this->authorize('view', $estimate) to ConvertEstimateController, but the same commit also hardens adjacent multi-tenant authorization gaps: NotePolicy manageNotes/viewNotes policies were changed to accept an optional Note and enforce that the note's company_id matches a company the user belongs to, NotesController calls were updated to pass the bound model, and UsersController::delete was scoped with User::whereCompany() so bulk user deletion cannot target accounts in other companies. These sibling fixes indicate a broader tenant-isolation review rather than an isolated one-line patch.
Know when Laravel 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
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
Network API with low complexity; any authenticated user with create-invoice ability suffices, so PR:L; full cross-tenant data disclosure gives C:H while limited estimate modification/deletion gives I:L and no availability impact.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
InvoiceShelf is an open-source web & mobile app that helps track expenses, payments and create professional invoices and estimates. Prior to version 2.4.0, POST /api/v1/estimates/{estimate}/convert-to-invoice in ConvertEstimateController authorizes only the caller's create-invoice ability and does not authorize access to the route-bound Estimate. Because route-model binding can resolve an estimate from any company, an authenticated user with create-invoice ability can copy another company's line items, prices, totals, taxes, notes, currency, and customer data into an invoice in the attacker's company. The victim company's configured conversion action reaches checkForEstimateConvertAction and can also change or delete the original estimate. This issue is fixed in version 2.4.0.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key), a cross-tenant IDOR.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
InvoiceShelf deployments that serve multiple customer companies are exposed to a cross-tenant data leak in which any authenticated user holding invoice-creation rights can pull another organization's estimate contents - line items, pricing, taxes, totals, notes, currency and customer details - into their own records, and may also modify or delete the source estimate. Leadership should care because this breaks the tenant-isolation guarantee customers contract for, creating privacy, integrity and commercial-trust exposure toward clients whose data and records may be copied or destroyed by an unrelated tenant. Single-company installations are not meaningfully affected, so the blast radius is limited to multi-tenant environments.
Apply vendor patch.
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.
In Laravel framework through 5.5.21, remote attackers can obtain sensitive information (such as externally usable passwo
Laravel Livewire v3 through v3.6.3 contains a critical remote code execution vulnerability (CVE-2025-54068, CVSS 9.8) th
LaRecipe versions prior to 2.8.1 contain a Server-Side Template Injection (SSTI) vulnerability that can lead to Remote C
File upload bypass in FreeScout 1.8.206 — patch bypass for CVE-2026-27636. PoC and patch available. CVSS 10.0.
Remote code execution in FreeScout prior to version 1.8.206 allows authenticated users to upload `.htaccess` files that
In Laravel Framework through 5.5.40 and 5.6.x through 5.6.29, remote code execution might occur as a result of an unseri
Dokans SaaS e-commerce platform v3.9.2 has a CVSS 10.0 authentication bypass allowing unauthenticated attackers to obtai
Predictable password reset tokens in FreeScout help desk before 1.8.206. Weak random number generation allows attackers
Bagisto eCommerce platform before 2.3.10 is vulnerable to server-side template injection (SSTI) through customer address
Bagisto eCommerce platform (2.3 branch before 2.3.10) leaves installation API routes active after setup, allowing unauth
A vulnerability was found in laravel 5.1 and classified as problematic. Rated critical severity (CVSS 9.8), this vulnera
Laravel TokenGuard authentication bypass is a genuine high-priority issue, not an inflated CVSS score: unauthenticated a
EUVD-2026-101611
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB