Paymenter: Race condition in payWithCredit() enables credit double-spend
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- High
- Impact type
- —
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub.
Summary
Paymenter is a free and open-source webshop solution for management of hosting services. In versions prior to 1.5.5, the credit payment implementation in app/Livewire/Invoices/Show.php executes a pessimistic row lock (lockForUpdate()) outside of an active database transaction. Because MySQL/MariaDB requires an enclosing transaction to enforce row-level locks, the guard is ineffective. Concurrent payment requests can exploit this race condition to read the same credit balance simultaneously, allowing users to pay multiple invoices using the same credit balance. In database systems like MySQL, a row lock only works inside a formal transaction; without one, the lock is completely ignored. Because there is no active lock, two payment requests sent at the exact same millisecond can look at the database at the same time. Both requests see the original credit balance, decide it is sufficient, and approve the payment. Because the payment processes successfully through ExtensionHelper::addPayment(), the application provisions the corresponding services or digital goods, resulting in direct financial or resource loss to the platform. This issue has been fixed in version 1.5.5.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Paymenter | Paymenter | before 1.5.5 | 1.5.5 | Patch available | CNA |
| — | paymenter/paymenter (Packagist) | before 1.5.5 | 1.5.5 | Patch available | GHSA-pgcq-8grm-5rx9 |
- Paymenter VendorPaymenter Affected before 1.5.5 Fixed in 1.5.5 Patch available CNA
- paymenter/paymenter (Packagist) Vendor— Affected before 1.5.5 Fixed in 1.5.5 Patch available GHSA-pgcq-8grm-5rx9
Remediation
- Fix · CNA Paymenter (Paymenter) Fixed in 1.5.5
- Fix · GHSA-pgcq-8grm-5rx9 paymenter/paymenter (Packagist) Fixed in 1.5.5 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-55219
- 2026-10-03 Alias added: GHSA-pgcq-8grm-5rx9
References
More Paymenter vulnerabilities
- TI-2025-35891 Paymenter Vulnerable to Remote Code Execution via Public File Uploads CVSS 3.1CRITICAL 10.0
- TI-2026-34786 Paymenter: URL parameter injection bypasses paid plan limits at checkout CVSS 3.1HIGH 8.5
- TI-2026-32495 Paymenter: Blind Unauthenticated SSRF on the Paypal gateway module CVSS 3.1MEDIUM 5.3
- TI-2026-50118 Paymenter: Credit-refund double-spend race condition in service downgrade (doUpgrade) CVSS 3.1MEDIUM 6.5
- TI-2026-32497 Paymenter: Broken object level authorization via service reference manipulation on ticket creation CVSS 3.1MEDIUM 5.4
- TI-2026-32496 Paymenter doesn't reset email verification status after email change CVSS 3.1MEDIUM 4.3
Sources
- CVE-2026-55219 · CVE Program
- CVE-2026-55219 · NVD
- FIRST EPSS
- GHSA-pgcq-8grm-5rx9 · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences