Skip to main content

InvoiceShelf CVE-2026-55386

| EUVDEUVD-2026-101587 HIGH
SQL Injection (CWE-89)
2026-10-14 security-advisories@github.com
7.1
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

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

  1. Access
    Authenticate with low-privilege account
  2. Exploit
    Send list request with crafted orderByField parameter
  3. Execution
    SQL expression injected into ORDER BY clause
  4. Impact
    Boolean-based blind extraction of database contents

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Persistence

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

Exploitation Conditions

Requires an authenticated InvoiceShelf session (PR:L - any valid low-privilege user, which on a multi-tenant or self-registration deployment can be an untrusted outsider) against instances running a version prior to 2.4.0. The attacker supplies a crafted orderByField query parameter to invoice and other list endpoints whose Eloquent scopes (e.g., Invoice::scopeApplyFilters) pass the value straight into orderBy() without column-identifier validation. Limiting factors: exploitation is impossible without authentication, impact is confined to confidentiality via slow boolean-based blind data extraction (no write/modify or denial of service), and patched 2.4.0+ installs using SafeOrderBy::apply are not affected.

Impact

This is a genuine but moderate-priority vulnerability. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H) confirms a network-reachable, low-complexity flaw requiring only low privileges (PR:L) - i.e., an authenticated account - with high confidentiality impact and no integrity or availability impact, consistent with a boolean-based blind SQL injection limited to the ORDER BY clause (data read-out, not modification). The authentication requirement (PR:L) is the single biggest risk-reducer: this is not an unauthenticated internet-facing bug, so mass, drive-by exploitation is unlikely. No EPSS score, CISA KEV listing, or public exploit was provided in the intelligence, so there is no evidence of active exploitation or weaponization at this time - the signals are therefore not conflicting but simply sparse on the exploitation-likelihood side. The vendor advisory (GHSA-cp8p-jcqf-j39c), fix commit, and 2.4.0 release are confirmed, so remediation data is strong even though real-world threat telemetry is absent. Net: a real, patchable issue warranting prompt upgrade for exposed multi-tenant instances, but not an emergency 'patch-tonight' crisis given the authentication gate and the deployment footprint.

Exploit ScenarioDerived

An attacker with a valid low-privilege InvoiceShelf account (e.g., a staff user or a self-registered tenant on a shared instance) sends a list request to an invoice or other list endpoint with a crafted orderByField query parameter containing a SQL expression. Because the value flows unsanitized into Laravel's orderBy() in scopeApplyFilters, the attacker performs boolean-based blind extraction to read data from the database character by character. No public exploit code was identified in the provided data, though the fix commit and PR publicly reveal the vulnerable code path.

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

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

Alert me

AnalysisAIv1 – Oct 14, 2026

Authenticated SQL injection in InvoiceShelf before 2.4.0 allows any logged-in user to inject arbitrary SQL expressions into the ORDER BY clause of invoice and other list endpoints, enabling boolean-based blind extraction of database contents. The flaw stems from the orderByField query parameter being passed unfiltered into Laravel Eloquent orderBy() calls across multiple model scopes, including Invoice::scopeApplyFilters; an attacker with a valid low-privilege account - potentially an untrusted outsider on deployments that permit self-registration or multi-tenancy - can therefore read data beyond their authorization. Exploitation is confirmed to require authentication, is limited to confidentiality impact (no writes or denial of service), and proceeds slowly through blind inference. No public exploit code was identified at time of analysis and the issue is not listed in CISA KEV; the vendor has released a fix in version 2.4.0.

RemediationAI

Upgrade to InvoiceShelf 2.4.0 or later; this is the vendor-released patch that introduces the SafeOrderBy::apply helper and replaces the unsafe orderBy() calls across all affected model scopes (commit e92b08ef6af7d0d0cd5183df81f795f7fbf4f4fc, PR 663, release https://github.com/InvoiceShelf/InvoiceShelf/releases/tag/2.4.0, advisory https://github.com/InvoiceShelf/InvoiceShelf/security/advisories/GHSA-cp8p-jcqf-j39c). If an immediate upgrade is not possible, apply the SafeOrderBy helper and the corresponding scope changes from the referenced commit as a backport, or add request-level validation that rejects any orderByField value not present in a strict per-endpoint allowlist of column names, including rejecting characters such as parentheses, quotes, commas, and SQL keywords. Compensating controls include disabling public self-registration and restricting the application to a small set of trusted accounts so that untrusted outsiders cannot obtain the low-privilege session required for exploitation - the trade-off being that this blocks legitimate onboarding flows; and, where feasible, narrowing database permissions for the InvoiceShelf DB user so it cannot read tables outside the application schema, though this limits functionality only in the sense of constraining an already over-privileged account. Monitoring for anomalous or highly repetitive list requests with unusual orderByField parameters can help detect blind-extraction attempts, but detection is inherently difficult because the payloads are syntactically valid and the extraction is low-volume. Note that no vendor patch is available for versions below 2.4.0, so the upgrade is the definitive fix.

Affected VersionsENISA

InvoiceShelf < 2.4.0

Affected Packages

euvd invoiceshelf fix: 2.4.0

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

InvoiceShelf is a Laravel-based open-source invoicing, expense, and payments application. The root cause is CWE-89 (SQL Injection) arising from unsafe use of Eloquent's orderBy() builder method: query parameters such as orderByField (paired with an orderBy direction) were taken from the authenticated request and passed directly as the column argument to orderBy(), rather than being validated against a whitelist of column identifiers. Because Laravel's query builder does not quote or parameterize the column name argument in the same way it parameterizes bound values, a crafted value can introduce arbitrary SQL into the generated ORDER BY clause. The commit diff shows this pattern was duplicated across at least ten model scopes - Customer, Estimate, Expense, FileDisk, Invoice, Item, Payment, RecurringInvoice, TaxType, and User - each of which was changed to route through a new App\Support\SafeOrderBy::apply() helper. That helper (added in the same commit) is designed to validate or sanitize the caller-supplied field and direction before ordering, which is the structural fix: replacing raw pass-through ordering with an allowlist-based mechanism. Since ORDER BY cannot be used to return data directly, the practical exploitation technique is boolean-based blind injection, where the attacker crafts conditional sort expressions and infers database content from differences in result ordering - a slow but reliable extraction channel. The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N) and the independent CVSS 3.1 assessment (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) agree that this is a network-reachable, low-privilege-authenticated, confidentiality-only issue with no integrity or availability impact and unchanged scope.

Know when the next one hits your stack

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

Network endpoint with low-complexity injection but requires an authenticated low-privilege account (PR:L); ORDER BY blind extraction yields confidentiality impact only, so I:N and A:N.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/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
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 14, 2026 - 20:34 EUVD
CVE Published
Oct 14, 2026 - 20:17 cve.org
HIGH 7.1

DescriptionCVE.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, InvoiceShelf passes the authenticated user's orderByField query parameter into Laravel orderBy calls in Invoice::scopeApplyFilters without restricting the value to column identifiers. A crafted SQL expression can therefore enter the ORDER BY clause across invoice and other list endpoints, enabling boolean-based blind extraction of database information. This issue is fixed in version 2.4.0.

Technical POC Analysis

Bug class: SQL injection (CWE-89 in the CVE record; note the GHSA text labels it CWE-284, Improper Access Control - the two disagree, and the mechanism is clearly injection into an identifier slot, s…

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

InvoiceShelf, the open-source invoicing and billing platform, allows any user holding a valid low-privilege account to read invoice and other list data beyond their authorized scope by manipulating a sorting parameter on list endpoints. The exposure is confidentiality-only and extraction is slow, but the targeted data is financial and customer-identifying, creating regulatory notification and third-party trust exposure. Leadership should care because organizations running self-registration or multi-tenant deployments may have untrusted outsiders already holding the accounts needed to exploit it, and no patch has been flagged as available in our feed.

Business Impact: High
Compensating Controls

Apply vendor patch (upgrade to InvoiceShelf 2.4.0); if upgrade is not immediately possible, disable self-registration and untrusted multi-tenant onboarding, restrict and review low-privilege accounts, and enforce allow-list validation of the orderByField parameter at the WAF or reverse proxy.

Threat Intelligence Overview

EPSS Score
0.4%
Top 72% exploitable
Prevalence
Low
niche open-source self-hosted invoicing app, limited enterprise footprint
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.4%
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
High
Technical Impact
Partial

Priority Score

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

Attack Technique

SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.

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