ZeroHour

CVE-2026-77999

moderate

Unauthenticated PayPal IPN forgery in J2Store enables order confirmation fraud

CVSS 4.0
8.7 high
EPSS
<1%p17
Published
()
Modified
AI analysis

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.

Affected
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
Estimated exposure
moderateorder of 10,000-100,000 Joomla sites with J2Store installed (tens of thousands); the exploitable subset is sites using the extension's PayPal gateway — Estimated from J2Store's standing as a long-established, mid-popularity Joomla e-commerce extension whose Joomla Extensions Directory active-install counts have historically been in the tens of thousands, with only sites that process…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

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 news

No ingested article mentions this CVE yet.