Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
Exploitation presupposes attacker-controlled database read access (modeled as PR:H), after which token reuse over the network is trivial (AV:N/AC:L) with full read/write API impact and no availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
SolidInvoice is an open-source invoicing platform. Prior to version 2.3.17, API tokens used to authenticate all REST API requests are stored as plaintext strings in the api_tokens database table. Any attacker who obtains read access to the database - through SQL injection, a leaked backup, a misconfigured replica, or insider access - immediately obtains all API credentials for every user with no further effort. This issue has been patched in version 2.3.17.
AnalysisAI
Plaintext credential exposure in SolidInvoice open-source invoicing platform prior to 2.3.17 allows any actor with read access to the application database to harvest every user's REST API token directly from the api_tokens table. Because tokens are stored unhashed, secondary exposures such as SQL injection, stolen backups, replicated databases, or insider access become full account-takeover paths against the API. No public exploit is identified at time of analysis and the issue is not listed in CISA KEV, but the patch in 2.3.17 (commit 8645391) introduces HMAC-SHA256 token hashing keyed by SOLIDINVOICE_APP_SECRET.
Technical ContextAI
SolidInvoice is a Symfony/PHP-based invoicing application (CPE cpe:2.3:a:solidinvoice:solidinvoice). The flaw is a classic CWE-312 (Cleartext Storage of Sensitive Information): the ApiToken Doctrine entity persisted the raw token string returned by ApiTokenManager::generateToken() directly into the api_tokens table, and ApiTokenAuthenticator looked tokens up by exact-match on that plaintext column. The 2.3.17 fix introduces a dedicated ApiTokenHasher service that HMAC-SHA256-hashes tokens before persistence, a GeneratedApiToken DTO that surfaces the plaintext exactly once at creation, an ApiTokenRepository::findOneByPlaintext() method that hashes on lookup, and a Version20317 Doctrine migration that re-hashes existing rows so previously issued tokens keep working.
RemediationAI
Vendor-released patch: upgrade SolidInvoice to 2.3.17 or later (https://github.com/SolidInvoice/SolidInvoice/releases/tag/2.3.17), which ships the Version20317 migration that re-hashes existing rows in place so issued tokens keep working. After upgrading, operators should rotate SOLIDINVOICE_APP_SECRET to invalidate all existing API tokens and require users to regenerate them - note the side effect that this forces every API client to re-enroll. If immediate upgrade is not possible, compensating controls include restricting database connectivity so that only the application host can reach it (blocks leaked-credential reuse but does not help against SQLi), enforcing encrypted-at-rest backups with strict ACLs, auditing for unauthorized replicas, and proactively revoking and reissuing all API tokens via the management UI while monitoring api_tokens for unexpected reads. See advisory GHSA-qjfc-h39r-cgwq for full guidance.
More in Solidinvoice
View allSolidInvoice version 2.3.7 is vulnerable to a stored cross-site scripting (XSS) issue in the Clients module. Rated mediu
Stored cross-site scripting in SolidInvoice prior to 2.3.17 allows an authenticated administrator to upload a malicious
PHP object deserialization in SolidInvoice's DataGrid LiveComponent prior to version 3.0.1 allows authenticated low-priv
Invitation links in SolidInvoice prior to version 3.0.1 never expire because UserInvitation entities carry no expiry tim
Cross-user API history disclosure in SolidInvoice prior to version 3.0.1 allows any authenticated company member to read
A security flaw has been discovered in SolidInvoice up to 2.4.0. Rated medium severity (CVSS 5.1), this vulnerability is
A vulnerability was identified in SolidInvoice up to 2.4.0. Rated medium severity (CVSS 5.1), this vulnerability is remo
A vulnerability was determined in SolidInvoice up to 2.4.0. Rated medium severity (CVSS 5.1), this vulnerability is remo
A vulnerability was found in SolidInvoice up to 2.4.0. Rated medium severity (CVSS 5.1), this vulnerability is remotely
A vulnerability has been found in SolidInvoice up to 2.4.0. Rated medium severity (CVSS 5.1), this vulnerability is remo
SolidInvoice's REST API authenticator, in all versions prior to 3.0.1, silently accepts long-lived bearer tokens via a `
SolidInvoice version 2.3.7 is vulnerable to a Stored Cross-Site Scripting (XSS) issue in the Tax Rates functionality. Ra
Same weakness CWE-312 – Cleartext Storage of Sensitive Information
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-36301