Skip to main content

InvoicePlane CVE-2026-88003

| EUVDEUVD-2026-87352 HIGH
Incorrect Authorization (CWE-863)
2026-09-25 security-advisories@github.com
7.5
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as admin, keep session live
  2. Delivery
    Get downgraded by another admin
  3. Exploit
    Reuse stale session's trusted user_type
  4. Execution
    Submit Users::form() setting user_type=1
  5. Impact
    Persist restored admin role in ip_users

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires the attacker to have previously held an InvoicePlane administrator account (user_type=1) with a live authenticated session, and then to be downgraded (or deactivated) by another administrator WITHOUT logging out - the stale session's cached user_type is what authorizes continued admin access. The attacker then uses the Users::form() endpoint to rewrite their own user_type back to 1. Limiting factors: this only occurs in multi-administrator deployments where role downgrades happen, requires the downgraded session to remain active at the time of exploitation (the AT:P timing/attack requirement), and requires prior high-privilege access (PR:H) - it is not exploitable by an unauthenticated or ordinary low-privilege user against a default single-admin install.

Impact

This is a CWE-863 broken-access-control (privilege-retention) flaw in InvoicePlane prior to 1.7.2. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:H/VA:H = 7.5 High) is internally consistent with the described mechanism: exploitation requires an already-authenticated high-privilege actor (PR:H - the victim must have been an administrator with an active session) and a specific timing condition (AT:P - the downgrade must occur while the target session is still live), while the outcome is full retention/restoration of admin control (VC/VI/VA:H). No EPSS score, no CISA KEV listing, and no public POC are present in the supplied intelligence, so exploitation status is 'no public exploit identified at time of analysis.' The realistic priority is MODERATE-to-LOW rather than the raw 7.5 suggests: this is not remote unauthenticated compromise but an insider/privilege-retention scenario where the attacker must have already held admin rights and been downgraded by another admin - a narrow window in a specific multi-admin workflow. The source-code diff strongly corroborates the root cause (session user_type snapshot trusted instead of re-reading ip_users), so the technical claim is well-substantiated even absent exploitation telemetry. Note the AT:P attack-requirement (active-session timing) is the key limiter that keeps this from being trivially automatable.

Exploit ScenarioDerived

A user who was previously granted administrator rights is downgraded by another administrator, but keeps their existing authenticated session open. Because Admin_Controller authorizes requests from the session's stale user_type snapshot rather than re-checking ip_users.user_type, the downgraded user calls Users::form() to reset their own user_type back to 1, restoring admin in the database and making the escalation persistent across future logins. No public exploit code is identified, but the attack is a small number of ordinary authenticated HTTP requests requiring no special tooling.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

Privilege escalation and privilege retention in InvoicePlane prior to 1.7.2 allow a previously-authenticated administrator whose account was downgraded or deactivated by another administrator to keep operating with administrative rights through a stale session. Because Admin_Controller trusts the user_type value cached in the session at login rather than re-reading ip_users.user_type, the downgraded user's live session continues to authorize admin requests, and the attacker can then call Users::form() to write user_type back to 1, making the restored admin role persistent in the database. Exploitation is limited to multi-administrator deployments where a role change occurs while the target session stays alive; it requires prior high-privilege access and is not reachable by an unauthenticated or ordinary low-privilege user, and no public exploit code or active exploitation has been identified at time of analysis. The vendor-released fix is InvoicePlane 1.7.2.

RemediationAI

Upgrade to InvoicePlane 1.7.2, the vendor-released patch version that adds per-request revalidation of user_type and user_active against the ip_users table; the corresponding upstream fixes are commits 904847f4e87b66fd6743cf9cc6f88b66c7fc3b81 and daa49ce3a50e0c93e01459b69c0d61bfc23d23eb, and the full advisory is at https://github.com/InvoicePlane/InvoicePlane/security/advisories/GHSA-25xj-pj36-wpp8. If upgrading immediately is not possible, the effective compensating control is to invalidate sessions yourself at the moment of a role change: force-logout any account being downgraded or deactivated (and terminate its server-side session records) so no cached user_type value survives, and, because the downgraded session can rewrite user_type back to 1 via Users::form(), temporarily restrict access to the user-management endpoints to a single trusted administrator or to a network/authentication layer outside InvoicePlane. Operationally, monitor ip_users for user_type changes that are not paired with an administrative action, and treat any user_type escalation originating from a session that was recently downgraded as a compromise indicator. The trade-off of forced session termination is disruption to the affected user's in-progress work, and restricting the user-management endpoints blocks legitimate delegated administration; both are preferable to leaving stale administrative sessions able to restore their own privileges. No vendor-released patch other than 1.7.2 was identified in the supplied data.

Affected VersionsENISA

InvoicePlane < 1.7.2

Affected Packages

euvd invoiceplane fix: 1.7.2

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

The root cause is CWE-863 (Incorrect Authorization), specifically a broken-access-control / privilege-retention pattern in a PHP application built on a CodeIgniter-style MVC stack. InvoicePlane stores the acting user's role in the server-side session as a snapshot taken at authentication time, and the base User_Controller constructor validated that snapshot against a required key/value pair (for example user_type = 1 for administrative controllers) without ever re-reading the authoritative ip_users row. As a result, session state and database state can diverge: when an administrator demotes or deactivates another account, the target's existing session is never invalidated and keeps passing the cached-role check on every subsequent request. The upstream fix adds a revalidate_user_type() method that selects user_type and user_active from ip_users for the session's user_id on each request, destroys the session and redirects to sessions/login when the account is missing, inactive (user_active != 1), or no longer matches the required role, and otherwise synchronizes the session's user_type with the database value. The second half of the flaw is an authorization gap in Users::form(), which allowed the downgraded user to write user_type = 1 back to their own record and thereby convert a transient session anomaly into a persistent administrative account. The assessed vector CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H and the CVSS 4.0 AT:P (attack requirements present) both reflect that the flaw is only exploitable under specific, administrator-dependent timing and role-change conditions rather than by an arbitrary remote attacker.

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 7.5 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 6.6 MEDIUM

PR:H because the actor must have been an administrator with an active session; AC:H reflects the required live-session timing window (maps AT:P); full admin retention gives C/I/A:H.

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

Lifecycle Timeline

2
Patch available
Sep 25, 2026 - 22:49 EUVD
CVE Published
Sep 25, 2026 - 22:18 cve.org
HIGH 7.5

DescriptionCVE.org

InvoicePlane is a self-hosted open source application for managing invoices, clients, and payments. Prior to 1.7.2, InvoicePlane fails to revoke administrative privileges after a role downgrade because Admin_Controller trusts the user_type snapshot stored in an existing session instead of revalidating ip_users.user_type. When one administrator downgrades another account, the target's active session continues to authorize administrative requests. The downgraded user can use Users::form() to set user_type back to 1, restoring the database role and making the privilege escalation persistent. This vulnerability is fixed in 1.7.2.

Technical POC Analysis

CWE-863 (Incorrect Authorization) - authorization is decided from a cached session value that is never re-validated against the database.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

InvoicePlane deployments running versions prior to 1.7.2 carry a high-severity access-control flaw that lets an administrator whose account has been downgraded or deactivated continue acting with full administrative rights through a stale session, and then make that regained role permanent in the database. The exposure is confined to organizations running multiple administrators where a privilege change and a live session overlap, but the consequence is a failure of the very control used to revoke access - a former or demoted insider can silently retain and entrench privileged access. Leadership should care because this undermines offboarding and least-privilege assurance, and remediation requires both patching and a review of who currently holds administrative rights in the billing platform.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 80% exploitable
Prevalence
Low
niche self-hosted open-source invoicing app, limited enterprise footprint
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Total

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
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.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

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