CVE-2026-77999
moderateUnauthenticated PayPal IPN forgery in J2Store enables order confirmation fraud
J2Store, a shopping-cart extension for Joomla, mishandles PayPal IPN callbacks: its `_validateIPN()` check treats any response other than a literal `INVALID` (including `UNVERIFIED`) as success, disables TLS peer verification (`CURLOPT_SSL_VERIFYPEER` off) on the verification call, and stores the verdict in a field that nothing downstream ever reads, so order processing proceeds regardless of the outcome. An unauthenticated attacker can send a forged callback POST using the sequential, enumerable order ID taken from the `custom` field and omitting `mc_gross` (which skips the paid-amount comparison entirely, since `floatval(null) == 0`), thereby marking any pending order as CONFIRMED with no payment or forcing another customer's pending order to FAILED; the `paypalv2.php` endpoint performs no amount check under any circumstances. The attacker gains fraudulent order confirmations that can lead merchants to ship goods for never-paid orders and can enumerate and tamper with other pending orders, with no confidentiality or availability impact (CVSS 4.0 8.7, integrity-only). Any Joomla site running J2Store 1.0.0-3.3.21, 4.0.0-4.0.21, or 4.1.0-4.1.6 is affected, with sites actively processing PayPal payments through the extension directly exploitable. No public proof-of-concept is known, the flaw is not in CISA's KEV, and EPSS is 0.3% (17th percentile), so no confirmed exploitation is currently known.
What to do: Upgrade J2Store to a release beyond the listed ranges (later than 4.1.6); until patched, disable the PayPal/IPN payment method in J2Store or manually reconcile every new CONFIRMED order against actual PayPal transactions before fulfillment. Audit recent orders for pending-to-CONFIRMED transitions lacking matching PayPal payments and for unexpected FAILED flips, since the sequential order IDs allow bulk forged callbacks.
| j2commerce.com J2Store (Joomla extension) | 1.0.0-3.3.21 |
| j2commerce.com J2Store (Joomla extension) | 4.0.0-4.0.21 |
| j2commerce.com J2Store (Joomla extension) | 4.1.0-4.1.6 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Joomla Extension - j2commerce.com - Unauthenticated PayPal callback forgery leading to order confirmation fraud in J2Store 1.0.0-3.3.21, 4.0.0-4.0.21, 4.1.0-4.1.6 - The PayPal IPN listener's signature check (`_validateIPN()`) accepted `UNVERIFIED` and any non-`INVALID` response as valid, made its verification request with `CURLOPT_SSL_VERIFYPEER` disabled, and stored its verdict in a field nothing downstream ever checked — so processing continued regardless of the outcome. Separately, the paid-amount comparison only ran when `mc_gross` was a positive number; omitting the field from the POST body (`floatval(null) == 0`) skipped the check entirely. Combined with a merchant-configured `receiver_email` and a sequential, enumerable order id read from the `custom` field, an anonymous POST was enough to move a pending order straight to `CONFIRMED` with no payment, or force another customer's pending order to `FAILED`. `paypalv2.php` performed no amount check under any circumstances.
- Ecosystems
- Joomla
- Weakness
- CWE-472, CWE-602
- Vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.