CVE-2026-55561
MediumCVSS 5.3Exploitation Probability (EPSS)
Low risk20th percentile - higher than 20% of all known CVEs
Summary
In InvoicePlane 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 call approve_quote_by_id() and reject_quote_by_id() without the where_in('ip_quotes.client_id', $this->user_clients) scoping, and generate_pdf() calls mark_viewed() before checking client scope. These issues are fixed in version 1.7.2-beta-1 and the subsequent stable 1.7.2.
Risk Assessment
A guest user assigned to one client can change another client's quote status, and email_quote_status() sends notification emails, potentially leading to unauthorized changes and information leakage. This is an access control and data integrity breach.
Recommendation
Update InvoicePlane to version 1.7.2-beta-1 or stable 1.7.2. Until updated, restrict guest access and monitor quote status changes.
Other vulnerabilities in InvoicePlane
See all- CVE-2026-85293Medium
InvoicePlane 1.7.2-beta-1 stores client_email without enforcing email syntax and renders it unescaped inside double-quoted value attributes in the invoice and quote mailer forms. An administrator who can edit a client can store attribute-breaking input, and when the mailer is configured, JavaScript executes when another authenticated administrator opens the related mailer page. Fixed in version 1.7.2.
- CVE-2026-85292Medium
Prior to 1.7.2, InvoicePlane's User_Controller compares the session user_type value with the required role using PHP's loose inequality operator. Under a non-standard session backend that returns unexpected scalar types, type juggling can cause a value that is not strictly the required role to pass the authorization check. Fixed in version 1.7.2.
- CVE-2026-85291Medium
Prior to 1.7.2, InvoicePlane's Users::change_password() method accepts a user_id from the URL and updates that account's password without an object-level authorization check. An authenticated secondary administrator can target the primary administrator account and replace its password without knowing the current password. Fixed in version 1.7.2.
- CVE-2026-85289Medium
Prior to 1.7.2, InvoicePlane omits ensure_valid_post_request() from delete methods including Payments::delete(), Recurring::delete(), and User_clients::delete(). Although the routes require POST, they do not validate the request's CSRF token. An attacker can submit a cross-origin form through an authenticated administrator's browser to delete financial records and other application data. Fixed in version 1.7.2.
- CVE-2026-85274Medium
Prior to 1.7.2, InvoicePlane exposes Recurring::stop() as a state-changing GET route without CSRF token validation. When an authenticated administrator loads attacker-controlled content that requests /invoices/recurring/stop/{id}, the application stops the selected recurring invoice. An attacker can target multiple identifiers to interrupt recurring billing and cause financial loss. Fixed in version 1.7.2.
- CVE-2026-54790Medium
Prior to 1.7.2, InvoicePlane stores an administrator-controlled custom_field_table value without validating it against the allowed custom-field table names. Mdl_custom_fields::used() later concatenates that stored value into the FROM table and WHERE column identifier positions, so opening the custom-field edit form executes a second-order SQL injection. The injection can query arbitrary schema data and can cause application errors or denial of service. Fixed in version 1.7.2.
- CVE-2026-50547High
InvoicePlane before version 1.7.2: Invoices::generate_xml() appends a database-derived xml_id to the XMLconfigs helper directory and includes the resulting PHP path without validating the identifier. A low-privileged attacker who can influence the e-invoice configuration can use traversal sequences to include an existing PHP file. Code execution requires a separate file-upload or file-write primitive.
- CVE-2026-49850High
InvoicePlane before version 1.7.2 exposes Invoices::delete() and Invoices::delete_invoice_tax() as state-changing routes without requiring POST and validating a CSRF token. When an authenticated administrator loads attacker-controlled content that requests an affected route, the application can delete an invoice or invoice tax record. The cross-origin action can remove financial data without the administrator's intent.
- CVE-2017-1000238High
InvoicePlane version 1.4.10 is vulnerable to an Arbitrary File Upload, allowing an authenticated user to upload a malicious file to the webserver. An attacker can upload a script that can compromise the webserver.
- CVE-2026-39353Critical
In InvoicePlane before version 1.7.2-rc-1, the permitted template list is built by scanning a PHP template directory that can be written through an administrator-controlled file-write capability. A malicious PHP file placed in the directory is automatically trusted and can be selected as a public template, then executed when rendering a public invoice.
Original NVD description (English source)
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.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

