CVE-2025-29788

6.5 MEDIUM

📋 TL;DR

The Sylius PayPal Plugin vulnerability allows users to manipulate payment amounts by changing cart quantities after initiating PayPal checkout. PayPal captures the original lower amount while Sylius incorrectly marks the order as fully paid at the higher amount. This affects all Sylius e-commerce sites using vulnerable PayPal Plugin versions.

💻 Affected Systems

Products:
  • Sylius PayPal Plugin
Versions: All versions prior to 1.6.1, 1.7.1, and 2.0.1
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects Sylius installations with PayPal Plugin enabled and using PayPal Express Checkout.

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers systematically underpay for high-value orders, causing significant financial losses to merchants through payment fraud.

🟠

Likely Case

Customers accidentally or intentionally pay less than actual order totals, resulting in revenue loss and order fulfillment issues.

🟢

If Mitigated

With proper controls, transactions are validated before completion, preventing payment discrepancies.

🌐 Internet-Facing: HIGH - Exploitable by any customer during checkout process without authentication.
🏢 Internal Only: LOW - Requires external customer interaction through public checkout flow.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Simple manipulation of cart quantities during checkout flow. No special tools required.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.6.1, 1.7.1, or 2.0.1 depending on your major version

Vendor Advisory: https://github.com/Sylius/PayPalPlugin/releases

Restart Required: No

Instructions:

1. Identify your current PayPal Plugin version. 2. Update to the patched version matching your major release: 1.x.x → 1.6.1/1.7.1, 2.x.x → 2.0.1. 3. Run composer update sylius/paypal-plugin. 4. Clear cache and test checkout flow.

🔧 Temporary Workarounds

Override vulnerable actions

all

Manually override ProcessPayPalOrderAction, CompletePayPalOrderFromPaymentPageAction, and CaptureAction with validation logic

Override classes in your application with validation that compares PayPal capture amount with Sylius order total

🧯 If You Can't Patch

  • Disable PayPal Express Checkout and use alternative payment methods
  • Implement post-payment validation to compare PayPal transaction amounts with order totals before order fulfillment

🔍 How to Verify

Check if Vulnerable:

Check composer.json for sylius/paypal-plugin version. If version is <1.6.1 for 1.x, <1.7.1 for 1.7.x, or <2.0.1 for 2.x, you are vulnerable.

Check Version:

composer show sylius/paypal-plugin | grep versions

Verify Fix Applied:

After update, test checkout flow: modify cart quantity during PayPal process and verify final captured amount matches actual order total.

📡 Detection & Monitoring

Log Indicators:

  • Discrepancies between PayPal capture amounts and Sylius order totals
  • Order status changes to 'paid' with payment amounts lower than order value

Network Indicators:

  • PayPal webhook calls with amount mismatches
  • Multiple cart modification requests during single checkout

SIEM Query:

Search for: (payment_amount < order_total) AND (status='paid') in order/payment logs

🔗 References

📤 Share & Export