Security Vulnerability Report
中文
CVE-2026-33628 CVSS 5.4 MEDIUM

CVE-2026-33628

Published: 2026-03-26 21:17:07
Last Modified: 2026-03-30 17:24:09

Description

Invoice Ninja is a source-available invoice, quote, project and time-tracking app built with Laravel. Invoice line item descriptions in Invoice Ninja v5.13.0 bypass the XSS denylist filter, allowing stored XSS payloads to execute when invoices are rendered in the PDF preview or client portal. The line item description field was not passed through `purify::clean()` before rendering. This is fixed in v5.13.4 by the vendor by adding `purify::clean()` to sanitize line item descriptions.

CVSS Details

CVSS Score
5.4
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:invoiceninja:invoice_ninja:*:*:*:*:*:*:*:* - VULNERABLE
Invoice Ninja v5.13.0
Invoice Ninja < v5.13.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// PoC for CVE-2026-33628 // Target: Invoice Ninja v5.13.0 // Location: Invoice Line Item Description field // Usage: // 1. Log in to Invoice Ninja. // 2. Navigate to Create Invoice. // 3. In the 'Item Description' field, enter the following payload: const payload = '<img src=x onerror=alert(document.cookie)>'; // 4. Save the invoice. // 5. Open the invoice in the Client Portal or generate a PDF. // 6. The JavaScript alert will trigger, demonstrating the XSS vulnerability.

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33628", "sourceIdentifier": "[email protected]", "published": "2026-03-26T21:17:07.113", "lastModified": "2026-03-30T17:24:09.000", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Invoice Ninja is a source-available invoice, quote, project and time-tracking app built with Laravel. Invoice line item descriptions in Invoice Ninja v5.13.0 bypass the XSS denylist filter, allowing stored XSS payloads to execute when invoices are rendered in the PDF preview or client portal. The line item description field was not passed through `purify::clean()` before rendering. This is fixed in v5.13.4 by the vendor by adding `purify::clean()` to sanitize line item descriptions."}, {"lang": "es", "value": "Invoice Ninja es una aplicación de facturación, presupuestos, proyectos y seguimiento del tiempo de código fuente disponible, construida con Laravel. Las descripciones de las líneas de artículos de las facturas en Invoice Ninja v5.13.0 eluden el filtro de denylist de XSS, permitiendo que las cargas útiles de XSS almacenadas se ejecuten cuando las facturas se renderizan en la vista previa de PDF o en el portal del cliente. El campo de descripción de la línea de artículo no se pasó por 'purify::clean()' antes de la renderización. Esto se corrigió en la v5.13.4 por el proveedor al añadir 'purify::clean()' para sanear las descripciones de las líneas de artículos."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N", "baseScore": 5.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}, {"lang": "en", "value": "CWE-116"}, {"lang": "en", "value": "CWE-184"}]}, {"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:invoiceninja:invoice_ninja:*:*:*:*:*:*:*:*", "versionEndExcluding": "5.13.4", "matchCriteriaId": "FC4B6AFE-F1E5-491A-8E54-A20207B38036"}]}]}], "references": [{"url": "https://github.com/invoiceninja/invoiceninja/commit/b81a3fc302573fc4a53d61e8537dd19154ce1091", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/invoiceninja/invoiceninja/releases/tag/v5.13.4", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/invoiceninja/invoiceninja/security/advisories/GHSA-98wm-cxpw-847p", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://github.com/invoiceninja/invoiceninja/security/advisories/GHSA-98wm-cxpw-847p", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Vendor Advisory"]}]}}