Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as guest for Client A
-
DeliveryCapture /guest/quotes/approve request
-
ExploitReplace quote_id with another client's ID
-
ExecutionServer approves/rejects unscoped quote
-
ImpactNotification email sent, quote marked viewed
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 low-privilege guest account bound to at least one client (PR:L): the attacker must be able to reach the authenticated guest portal routes /guest/quotes/approve/{id} and /guest/quotes/reject/{id}. No special non-default configuration, plugin, or user interaction from a victim is needed - the flaw is present in the standard guest quote workflow of InvoicePlane prior to 1.7.2-beta-1 because approve_quote_by_id()/reject_quote_by_id() and mark_viewed() run without client_id scoping. Limiting factors: the attacker needs valid guest credentials (not fully unauthenticated), quote_id values are sequential integers so enumeration is trivial, and impact is confined to altering quote status, marking quotes viewed, and generating notification emails rather than reading or exfiltrating other clients' quote contents. |
| Impact | This is a genuine but modest-severity authorization flaw (IDOR, CWE-639), not an inflated high-CVSS issue. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N, score 5.3) is internally consistent with the mechanism: a logged-in guest reaches the vulnerable endpoint over the network (AV:N) with no special timing or user interaction (AC:L/AT:N/UI:N), but needs at least a valid guest client login (PR:L), and the impact is limited to integrity (VI:L) - changing another client's quote status and triggering notification emails - with no confidentiality or availability loss (VC:N/VA:N). The vuln.today priority is 'this_month', not act_now or emergency, which aligns with medium severity. No CISA KEV listing and no EPSS score are present in the input, so widespread automated exploitation is not indicated; the GHSA advisory does include a concrete step-by-step Burp Suite PoC, so exploitability against unpatched instances is well established even though no packaged exploit code is confirmed. The main caveats: no EPSS value is available to gauge exploitation probability, and real-world risk is tempered by the limited impact (quote status manipulation and 'viewed' marking) rather than data disclosure or code execution. |
| Exploit ScenarioDerived | An attacker registers or is provisioned as a guest user tied to Client A and logs into the InvoicePlane guest portal. Observing that approving their own quote calls /guest/quotes/approve/1, they replay the request with a different sequential integer quote_id (e.g. 3) belonging to Client B, flipping that unrelated client's quote to Approved or Rejected and causing a status-notification email to be sent. A public PoC reference demonstrating exactly this with Burp Suite exists in the GHSA advisory; it is not verified as packaged working exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Broken object-level authorization in InvoicePlane's guest quote portal allows an authenticated guest user to approve, reject, or mark-as-viewed quotes that belong to clients they were never assigned, simply by changing sequential quote_id values in the /guest/quotes/approve/{id}, /guest/quotes/reject/{id} and PDF-generation routes. Only Integrity is affected (status changes, viewed flags, and notification e-mails sent via email_quote_status()); confidentiality and availability are untouched, which is why the score lands at 5.3 rather than higher. The vendor shipped fixes in 1.7.2-beta-1 and the subsequent stable 1.7.2, and a step-by-step reproduction is published in the GitHub advisory, but no confirmed working exploit code or active exploitation has been reported.
RemediationAI
Vendor-released patch: upgrade to InvoicePlane 1.7.2 stable (or at minimum 1.7.2-beta-1), which scopes approve(), reject() and the mark_viewed() call in generate_pdf() by the guest user's assigned clients; the release artifacts are at https://github.com/InvoicePlane/InvoicePlane/releases/tag/v1.7.2 and the advisory at https://github.com/InvoicePlane/InvoicePlane/security/advisories/GHSA-6xj3-274m-4mvg. Administrators who build from source can apply the upstream changes at commit 424dc44eb54030b93176bb08cba07ba12d7ae451 and commit fca7792a24de0a749d881cbbe4af6f58e9545d20 (PRs #1413 and #1471), noting that an upstream fix available as a commit or PR is not the same assurance as a tagged release. The advisory documents no workaround, so updating is the only complete fix; until then, as an operational precaution rather than vendor guidance, limit guest portal accounts to single-client deployments or audit quote status changes and outgoing email_quote_status() notifications for quote IDs outside the acting guest's client scope, accepting that this only detects rather than blocks the manipulation.
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
InvoicePlane is a self-hosted PHP/CodeIgniter (MVC) invoicing application; guest clients access a portal whose quotes controller lives at application/modules/guest/controllers/Quotes.php. Every sibling method in that controller (for example view()) constrains the model query with where('ip_quotes.quote_id', $quote_id)->where_in('ip_quotes.client_id', $this->user_clients), enforcing per-client ownership. The approve() and reject() methods bypass that pattern: they pass the raw, user-supplied quote_id straight into Mdl_quotes::approve_quote_by_id() / reject_quote_by_id(), which query on quote_id alone, and then call email_quote_status() so the unauthorized status change also fires outbound notification mail. A second, smaller ordering defect exists in generate_pdf(), which calls mark_viewed($quote_id) before performing the client-scope check, letting any guest flag an arbitrary quote as viewed. This is classic CWE-639 (Authorization Bypass Through User-Controlled Key), i.e. an IDOR: the object reference is a sequential integer so enumeration is trivial, and the trigger is documented explicitly in the advisory rather than inferred. The CVSS 4.0 vector supplied by the CNA (AV:N/AC:L/AT:N/PR:L/UI:N with only VI:L) matches the independently assessed CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N - low-privilege authenticated access, no user interaction, integrity-only impact.
Know when PHP 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:N/VI:L/VA:N/SC:N/SI:N/SA:N
Authenticated guest reaches the endpoint remotely with no interaction (AV:N/AC:L/PR:L/UI:N); impact is limited integrity change to quote status (I:L) with no data disclosure (C:N) or availability loss (A:N).
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
InvoicePlane is a self-hosted open source application for managing invoices, clients, and payments. Prior to 1.7.2-beta-1, guest users can approve or reject quotes belonging to any client, not just their assigned clients. The approve() and reject() methods in the Guest Quotes controller, application/modules/guest/controllers/Quotes.php, call approve_quote_by_id($quote_id) and reject_quote_by_id($quote_id) directly without the where_in('ip_quotes.client_id', $this->user_clients) scoping that sibling methods use. A guest user assigned to one client can change another client's quote status by supplying sequential integer quote_id values, and email_quote_status() also sends notification emails. Additionally, generate_pdf() calls mark_viewed($quote_id) before checking the client scope, allowing a guest user to mark another client's quote as viewed. These issues are fixed in version 1.7.2-beta-1 and the subsequent stable version 1.7.2.
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 PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-112549
NVD
CVE.org
GitHub
Exploit-DB