Severity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
PR:L for required invoice-creator credentials, UI:R for mandatory client interaction, S:C for cross-context session impact; no availability impact applies.
Primary rating from Vendor (309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c).
CVSS VectorVendor: 309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c
Lifecycle Timeline
2DescriptionCVE.org
InvoiceNinja v5-stable renders an invoice or quote's "terms" field in the client portal using Laravel Blade's raw output directive {!! $entity->terms !!} (resources/views/portal/ninja2020/invoices/includes/terms.blade.php) with no HTML sanitization. StoreInvoiceRequest.php only strips newlines from the field and does not purify HTML. An authenticated user with invoice creation access can set the terms field via the REST API (PUT /api/v1/invoices/{id}) to an HTML/JavaScript payload that executes in the client's browser when they view the invoice, enabling session cookie theft and client account takeover. This is a distinct code path from the previously published invoice line-item description field XSS (GHSA-98wm-cxpw-847p / CVE-2026-33628).
AnalysisAI
Stored XSS in InvoiceNinja v5-stable allows an authenticated user with invoice creation access to inject arbitrary JavaScript into the invoice terms field, which executes in a business client's browser when they view the invoice in the client portal. The attack leverages Laravel Blade's raw unescaped output directive in resources/views/portal/ninja2020/invoices/includes/terms.blade.php, with no HTML sanitization performed in StoreInvoiceRequest.php, enabling session cookie theft and full client account takeover. This is a distinct code path from the previously published CVE-2026-33628 (line-item description XSS), and no public exploit has been identified at time of analysis.
Technical ContextAI
InvoiceNinja is a PHP invoicing platform built on the Laravel framework. The root cause (CWE-79, Stored XSS) lies in the use of Laravel Blade's raw unescaped output directive {!! $entity->terms !!} in resources/views/portal/ninja2020/invoices/includes/terms.blade.php. The safe equivalent - {{ $entity->terms }} - auto-escapes HTML entities; the raw directive does not. Compounding this, StoreInvoiceRequest.php performs only newline stripping on the terms field before persistence, providing no HTML purification or allowlist-based sanitization. This means attacker-controlled markup stored in the database is written directly into the portal HTML response, satisfying the classic stored XSS pattern. The REST API endpoint PUT /api/v1/invoices/{id} is the write path. No CPE string was provided in the input data.
RemediationAI
The primary fix is to replace the raw Blade directive {!! $entity->terms !!} in resources/views/portal/ninja2020/invoices/includes/terms.blade.php with the auto-escaping {{ $entity->terms }}, or alternatively apply an HTML purification library (such as HTMLPurifier) in StoreInvoiceRequest.php before the terms value is persisted - the latter would also protect any other rendering contexts. Check https://github.com/invoiceninja/invoiceninja for a released patched version; no specific fix version was confirmed in the available data, so patch availability must be independently verified. As a compensating control, restrict invoice creation and editing permissions exclusively to fully trusted internal users, which reduces the attacker surface but does not eliminate the vulnerability. Deploying a strict Content-Security-Policy header on the client portal that disallows unsafe-inline scripts would substantially reduce XSS impact, though compatibility testing with portal JavaScript functionality is required. Note that this vulnerability is a distinct code path from CVE-2026-33628; patching one does not remediate the other.
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
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53306
GHSA-84j5-x242-f7h8