HIGH 8.1

CVE-2026-46489: SolidInvoice Stored XSS via Unvalidated Logo Upload

SolidInvoice versions before 2.3.17 contain a stored cross-site scripting (XSS) vulnerability in the company logo upload feature. An authenticated administrator can upload an SVG file with embedded JavaScript that executes in the browsers of all authenticated users whenever they view any page in the application. The malicious script persists in the application's database and runs every time an affected page loads, giving an attacker the ability to steal session tokens, modify application data, or perform actions on behalf of legitimate users.

Source data · NVD / CISA · public domain

CVSS
3.1 · 8.1 HIGH · CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
Weaknesses (CWE)
CWE-434, CWE-79
Affected products
0 configuration(s)
Published / Modified
2026-06-11 / 2026-06-17

NVD description (verbatim)

SolidInvoice is an open-source invoicing platform. Prior to version 2.3.17, the company logo upload feature accepts any file type without validation. An authenticated administrator can upload an SVG file containing embedded JavaScript. This script is base64-encoded and injected unescaped into every page of the application, causing stored cross-site scripting (XSS) that executes in every authenticated user's browser. This issue has been patched in version 2.3.17.

4 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability stems from insufficient file validation in SolidInvoice's logo upload endpoint. The application fails to validate the MIME type or file extension of uploaded files, allowing an administrator to upload an SVG image containing embedded JavaScript. Upon rendering, the SVG's JavaScript payload is base64-encoded and injected unescaped into the HTML of every application page. Because the injection occurs server-side and the payload is stored in the database, the XSS is stored (persistent) rather than reflected. The attack requires administrator privileges to upload the malicious file but affects all authenticated users without requiring additional user interaction beyond normal application usage. This maps to CWE-434 (unrestricted upload of file with dangerous type) and CWE-79 (improper neutralization of input during web page generation).

Business impact

A malicious or compromised administrator account can conduct persistent XSS attacks against all users of a SolidInvoice instance. Attack surface includes theft of session cookies, API tokens, and CSRF tokens; modification of invoices, customer records, and payment information; credential harvesting through fake login forms injected into legitimate pages; and lateral movement to connected systems if users reuse credentials. For organizations using SolidInvoice to manage financial records, this creates a path to financial fraud, data theft, and compliance violations (PCI DSS, SOC 2, GDPR depending on use case). The persistence of the payload means the attack continues until the malicious logo is removed and all browser caches are cleared.

Affected systems

SolidInvoice versions prior to 2.3.17 are affected. The vulnerability requires administrator access to trigger, so organizations with SolidInvoice instances must assess whether their administrator accounts are sufficiently protected (strong authentication, limited access, monitoring) and whether non-administrative users could be promoted to admin roles through other vulnerabilities or misconfigurations. Open-source deployments and self-hosted instances are the primary exposure vector.

Exploitability

Exploitation requires an authenticated administrator account with upload privileges, which significantly limits the attack surface compared to unauthenticated exploits. However, administrator credentials are a high-value target for attackers, and compromised admins are not uncommon in breach scenarios. Once uploaded, the payload executes automatically in all user sessions without requiring victim interaction, making it highly effective within that trust boundary. The barrier to exploitation is moderate (requires admin access) but the impact is severe (all users affected).

Remediation

Upgrade SolidInvoice to version 2.3.17 or later, which implements proper file type validation for uploaded logos. After patching, verify that no malicious SVG files remain in the application's uploads directory or database by auditing recent logo uploads, clearing browser caches across all user sessions, and reviewing administrator access logs for unauthorized changes. Organizations should also review who has been granted administrator privileges and enforce stronger authentication controls (MFA, IP whitelisting, audit logging) on admin accounts.

Patch guidance

Apply the upgrade to SolidInvoice 2.3.17 as soon as possible, prioritizing instances that manage sensitive financial or customer data. Test the patch in a non-production environment first to ensure compatibility with any custom extensions or integrations. After deployment, force a logout of all active sessions to clear any cached payloads and require users to re-authenticate. Verify the patch by attempting to upload an SVG file with embedded script tags; the application should reject it or sanitize it. Document the patch application date and confirm completion across all SolidInvoice deployments in your environment.

Detection guidance

Search application logs and file upload records for SVG files uploaded to the logo feature, particularly those with suspicious timestamps or unusual names. Examine the company logo file in the application's uploads directory and verify it is a valid, non-malicious SVG. Review administrator access logs for unauthorized login attempts or privilege escalations around the time the malicious logo was uploaded. Monitor browser console errors and network requests during user sessions for signs of injected JavaScript execution. Use a web application firewall (WAF) to block uploads with SVG MIME types to the logo endpoint if immediate patching is delayed. Forensically recover any deleted uploads to determine if malicious files were present and when they were removed.

Why prioritize this

This vulnerability scores HIGH (CVSS 8.1) because it enables persistent XSS affecting all users once deployed by an admin, with confidentiality and integrity impact. It is not on the KEV list, indicating it has not yet been exploited in the wild at scale, but the attack is straightforward once admin access is obtained. Organizations should patch urgently if their SolidInvoice instance is internet-facing or accessible to untrusted networks. The risk is proportional to the sensitivity of financial data managed and the number of users affected.

Risk score, explained

The CVSS 3.1 score of 8.1 reflects: network-based attack vector (AV:N), low attack complexity (AC:L), high privilege requirement limiting initial reach (PR:H), required user interaction (UI:R) in the form of normal page navigation, changed scope to other systems (S:C), and high impact on confidentiality and integrity (C:H, I:H) with no availability impact (A:N). The score appropriately penalizes the privilege requirement but recognizes that once a malicious logo is uploaded, the payload executes automatically across the entire user base, making containment difficult without patch and cache clearing.

Frequently asked questions

Can non-administrators be affected by this vulnerability?

Yes. While only administrators can upload the malicious logo, all authenticated users are affected when they access any page in the application. Non-admin users cannot prevent their browsers from executing the injected script.

Do I need to upgrade if my SolidInvoice instance is air-gapped or internal-only?

Yes, you should still upgrade, but your risk is lower. The vulnerability requires an authenticated admin account, so if your instance is internal and admins are trusted, risk is mitigated by access controls. However, patch as part of regular maintenance to protect against insider threats or compromised credentials.

Will clearing my browser cache remove the malicious script?

Clearing cache will remove cached copies of pages containing the injected script, but the script will be re-injected when you reload pages unless the malicious logo is removed from the server. You must patch the application and delete the malicious logo file to fully remediate.

What if I don't know if a malicious logo was ever uploaded to my instance?

Review your SolidInvoice upload directory (typically in /public/uploads or similar) for SVG files and audit administrator access logs for suspicious activity. If your instance was compromised, logs may reveal when the upload occurred. If you cannot verify the instance's integrity, consider it potentially compromised and apply the patch immediately, then rotate sensitive credentials used by users of that instance.

This analysis is based on publicly available CVE data and vendor information current as of June 2026. Organizations must verify patch availability and compatibility with their specific SolidInvoice version and configuration before deployment. The attack scenarios described are plausible but depend on actual administrator compromise or malicious insider action; individual risk will vary based on access controls, user trust, and data sensitivity. SEC.co provides this intelligence for educational and risk assessment purposes and does not warrant the accuracy or completeness of remediation steps for all deployment scenarios. Always test patches in non-production environments and consult SolidInvoice documentation or support for deployment-specific guidance. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).