Executive brief
Vendure, a popular headless e-commerce platform, failed to validate which currencies customers could use during checkout. Attackers could select any currency code—not just those supported by the merchant—and complete payment transactions at incorrect amounts, resulting in customers paying vastly different amounts than expected or merchants receiving payments in unsupported currencies.
Technical details
The vulnerability stems from insufficient validation of the currencyCode query parameter passed to Vendure API calls. The application accepted and propagated arbitrary currency codes through RequestContext.currencyCode without verifying they matched the channel's availableCurrencyCodes. An unauthenticated network attacker could specify any currency code during the checkout flow, and Vendure would pass it to payment gateways (Mollie, Stripe) without transformation or validation, allowing payment in unintended currencies. The fix (v2.1.3) adds validation to ensure currencyCode matches the active channel's supported currencies and re-calculates prices if the currency changes during the AddingItems stage.
Affected products
- Vendure core < 2.1.3
Timeline
- 2023-11-17: disclosed
- 2023-11-17: patched: v2.1.3 released