Skip to main content

InvoicePlane CVE-2026-55561

| EUVDEUVD-2026-112549 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-10-28 security-advisories@github.com
5.3
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as guest for Client A
  2. Delivery
    Capture /guest/quotes/approve request
  3. Exploit
    Replace quote_id with another client's ID
  4. Execution
    Server approves/rejects unscoped quote
  5. Impact
    Notification 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.

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

InvoicePlane < 1.7.2-beta-1

Affected Packages

euvd invoiceplane fix: 1.7.2-beta-1

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

Vendor (github) PRIMARY 5.3 MEDIUM
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
vuln.today AI 4.3 MEDIUM

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).

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

1
Patch available
Oct 28, 2026 - 23:33 EUVD

DescriptionCVE.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

Prevalence
Low
self-hosted niche open-source invoicing app, limited enterprise footprint
Social Media
1
Sightings
Data Quality
3 sources
Confidence: Low

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

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

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

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