Craft Commerce: Partial Payment Amount Without Lower Bound Validation
Moderate severity
GitHub Reviewed
Published
Jun 16, 2026
in
craftcms/commerce
•
Updated Jun 19, 2026
Package
Affected versions
>= 5.0.0, <= 5.6.4
>= 4.0.0, <= 4.11.1
Patched versions
5.6.5
4.11.2
Description
Published to the GitHub Advisory Database
Jun 19, 2026
Reviewed
Jun 19, 2026
Last updated
Jun 19, 2026
Summary
The
Order::setPaymentAmount()method accepts any float value without enforcing a minimum positive amount. The PaymentsController casts the user-supplied 'paymentAmount' parameter directly to float with no lower-bound check.Details
When the store has 'Allow Partial Payment on Checkout' enabled, a user can submit a payment amount of $0.00 or even a negative value, potentially marking orders as paid without a valid transaction.
PoC
Complete instructions, including specific configuration details, to reproduce the vulnerability.

Impact
On stores with partial payment enabled, a customer may be able to set an arbitrarily small payment amount. Gateway behavior varies — some will process $0.00 transactions, effectively giving free order fulfillment.
Remediation

### References - https://github.com/craftcms/commerce/security/advisories/GHSA-78vr-q6cf-c7p6 - https://github.com/craftcms/commerce/commit/9a88392b3074aa132a9455d4f4b582411df52c74