/

CVE-2026-68500

Severity:

HIGH RISK

(7.5)

Broken Authorization (CWE-639) in Sylius Mollie Plugin

CVE-2026-68500

Deferred

Vulnerability type

Category:

Broken Access Control / Insecure Direct Object Reference

CWE:

CWE-639

Impact:

Unauthorized Order Payment Status Manipulation

Severity:

HIGH RISK

(7.5)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Sylius Mollie Plugin's payment update webhook fails to verify that a Mollie payment actually belongs to the Sylius order it updates.

As a result, an unauthenticated attacker with any valid paid Mollie payment ID can fraudulently mark another customer's order as paid, without real funds transfer for that order.

Sylius Mollie Plugin's payment update webhook fails to verify that a Mollie payment actually belongs to the Sylius order it updates.

As a result, an unauthenticated attacker with any valid paid Mollie payment ID can fraudulently mark another customer's order as paid, without real funds transfer for that order.

Affected context

This vulnerability appears in Sylius-based e-commerce deployments that integrate the Sylius Mollie Plugin for payment processing.

It specifically affects the POST /{_locale}/update-payment webhook endpoint when it:

  • Accepts attacker-controlled id (Mollie payment identifier) and orderId parameters
  • Updates the payment status for the specified Sylius order
  • Does not enforce a strict association check between the Mollie payment and the referenced Sylius order

The risk is higher in environments where webhook endpoints are reachable without strong authentication or origin validation.

This vulnerability appears in Sylius-based e-commerce deployments that integrate the Sylius Mollie Plugin for payment processing.

It specifically affects the POST /{_locale}/update-payment webhook endpoint when it:

  • Accepts attacker-controlled id (Mollie payment identifier) and orderId parameters
  • Updates the payment status for the specified Sylius order
  • Does not enforce a strict association check between the Mollie payment and the referenced Sylius order

The risk is higher in environments where webhook endpoints are reachable without strong authentication or origin validation.

Exploit preconditions

  • Attack surface: Publicly exposed POST /{_locale}/update-payment webhook in Sylius Mollie Plugin–backed applications.
  • Required access: Ability to send HTTP POST requests to the payment update endpoint; possession of any valid paid Mollie payment ID from the same Mollie account or environment.
  • Trigger point: Submission of a crafted request where the id parameter references a paid Mollie transaction and the orderId parameter references a victim's Sylius order.
  • Why exploitation is possible: The application trusts the supplied id and orderId pair without verifying that the Mollie payment is actually linked to the specified Sylius order, resulting in broken authorization (CWE-639) on the payment resource.
  • Attack surface: Publicly exposed POST /{_locale}/update-payment webhook in Sylius Mollie Plugin–backed applications.
  • Required access: Ability to send HTTP POST requests to the payment update endpoint; possession of any valid paid Mollie payment ID from the same Mollie account or environment.
  • Trigger point: Submission of a crafted request where the id parameter references a paid Mollie transaction and the orderId parameter references a victim's Sylius order.
  • Why exploitation is possible: The application trusts the supplied id and orderId pair without verifying that the Mollie payment is actually linked to the specified Sylius order, resulting in broken authorization (CWE-639) on the payment resource.

Why this happens

The underlying bug class is broken access control over domain objects, specifically an insecure direct object reference to payment resources.

The plugin treats user-supplied identifiers (id and orderId) as authoritative, updating internal order payment status based solely on the existence and success of the Mollie payment ID.

It does not enforce a binding between the payment record and the Sylius order, so any valid paid payment ID can be misapplied to any order.

This maps to CWE-639, where authorization checks are missing or insufficient for actions on objects referenced by user-controlled identifiers.

The underlying bug class is broken access control over domain objects, specifically an insecure direct object reference to payment resources.

The plugin treats user-supplied identifiers (id and orderId) as authoritative, updating internal order payment status based solely on the existence and success of the Mollie payment ID.

It does not enforce a binding between the payment record and the Sylius order, so any valid paid payment ID can be misapplied to any order.

This maps to CWE-639, where authorization checks are missing or insufficient for actions on objects referenced by user-controlled identifiers.

Potential impact

  • Attackers may fraudulently mark pending or unpaid orders as paid without actually paying for those specific orders.
  • Merchants could experience direct financial loss due to goods or services being delivered without proper payment.
  • Order reconciliation and accounting records may become inaccurate or misleading.
  • Trust in the payment process and auditability of transactions can be undermined.
  • Subsequent business logic relying on the "paid" status (e.g., order fulfillment, shipping, digital delivery) may be triggered incorrectly.
  • Attackers may fraudulently mark pending or unpaid orders as paid without actually paying for those specific orders.
  • Merchants could experience direct financial loss due to goods or services being delivered without proper payment.
  • Order reconciliation and accounting records may become inaccurate or misleading.
  • Trust in the payment process and auditability of transactions can be undermined.
  • Subsequent business logic relying on the "paid" status (e.g., order fulfillment, shipping, digital delivery) may be triggered incorrectly.

General mitigation guidance

Effective mitigation focuses on enforcing strong authorization and consistent object relationships in payment flows.

Common secure patterns include:

  • Validating that the payment ID received in the webhook is explicitly associated with the Sylius order referenced by orderId (e.g., by looking up and matching stored payment metadata).
  • Treating payment and order identifiers as separate domain objects with access checks on both, not just the payment's success state.
  • Designing webhook handlers to operate on server-side state, using internally stored mappings between orders and payments rather than accepting arbitrary identifiers from requests.
  • Applying defense-in-depth by restricting webhook endpoints to trusted origins or signed payloads, and avoiding unauthenticated state changes where possible.
  • Ensuring business logic cannot mark an order as paid unless all required consistency checks between order, customer, and payment are satisfied.

Effective mitigation focuses on enforcing strong authorization and consistent object relationships in payment flows.

Common secure patterns include:

  • Validating that the payment ID received in the webhook is explicitly associated with the Sylius order referenced by orderId (e.g., by looking up and matching stored payment metadata).
  • Treating payment and order identifiers as separate domain objects with access checks on both, not just the payment's success state.
  • Designing webhook handlers to operate on server-side state, using internally stored mappings between orders and payments rather than accepting arbitrary identifiers from requests.
  • Applying defense-in-depth by restricting webhook endpoints to trusted origins or signed payloads, and avoiding unauthenticated state changes where possible.
  • Ensuring business logic cannot mark an order as paid unless all required consistency checks between order, customer, and payment are satisfied.

How teams detect issues like this

Detection often involves reviewing code and configurations for insecure object references and missing authorization checks around payment updates.

Potential strategies include:

  • Static analysis rules that flag handlers using user-supplied IDs (orderId, paymentId, etc.) to directly load or update domain entities without verifying associations.
  • Targeted code review of payment integration modules and webhook controllers to confirm that each payment update operation validates order–payment linkage and ownership.
  • Logging and monitoring of payment status changes, looking for patterns where multiple distinct orders are marked as paid using the same external payment ID.
  • Policy-based checks in CI/CD pipelines to ensure all sensitive endpoints performing state changes require both authentication and proper authorization logic.
  • Optional use of automated security testing tools that simulate tampering with object identifiers in payment-related requests.

Detection often involves reviewing code and configurations for insecure object references and missing authorization checks around payment updates.

Potential strategies include:

  • Static analysis rules that flag handlers using user-supplied IDs (orderId, paymentId, etc.) to directly load or update domain entities without verifying associations.
  • Targeted code review of payment integration modules and webhook controllers to confirm that each payment update operation validates order–payment linkage and ownership.
  • Logging and monitoring of payment status changes, looking for patterns where multiple distinct orders are marked as paid using the same external payment ID.
  • Policy-based checks in CI/CD pipelines to ensure all sensitive endpoints performing state changes require both authentication and proper authorization logic.
  • Optional use of automated security testing tools that simulate tampering with object identifiers in payment-related requests.

Sources

SourceLink
github.comgithub.com/Sylius/MolliePlugin/commit/01316b3ad3cf82e3c5ad160115d0a2cf89174e49
github.comgithub.com/Sylius/MolliePlugin/commit/153c754486b1bc597b67a90ac07ef71cd7958267
github.comgithub.com/Sylius/MolliePlugin/commit/d1f7753e92106e8bf3bedcfc61b02ea7b8e1c38a
github.comgithub.com/Sylius/MolliePlugin/pull/351
github.comgithub.com/Sylius/MolliePlugin/pull/352
github.comgithub.com/Sylius/MolliePlugin/pull/354
github.comgithub.com/Sylius/MolliePlugin/releases/tag/v2.2.8
github.comgithub.com/Sylius/MolliePlugin/releases/tag/v3.2.4
github.comgithub.com/Sylius/MolliePlugin/releases/tag/v3.3.1
github.comgithub.com/Sylius/MolliePlugin/security/advisories/GHSA-rc52-c4hv-w89p

Frequently asked

questions

Yes, if the payment update webhook is exposed publicly and not restricted to trusted payment provider origins, an attacker can send crafted requests from the internet.

No, the issue is described as exploitable by an unauthenticated attacker, provided they have access to a valid paid Mollie payment ID.

The safest approach is to enforce strict authorization checks on every state-changing operation and to ensure that payment identifiers received from external systems are validated against the expected order–payment mapping stored server-side.

When integrating payment providers, always treat external callbacks as untrusted inputs: keep authoritative mappings between orders and payments on the server, validate those mappings on each update, require authentication or signed webhooks where possible, and include comprehensive tests for mismatched identifiers and authorization edge cases.

Yes, if the payment update webhook is exposed publicly and not restricted to trusted payment provider origins, an attacker can send crafted requests from the internet.

No, the issue is described as exploitable by an unauthenticated attacker, provided they have access to a valid paid Mollie payment ID.

The safest approach is to enforce strict authorization checks on every state-changing operation and to ensure that payment identifiers received from external systems are validated against the expected order–payment mapping stored server-side.

When integrating payment providers, always treat external callbacks as untrusted inputs: keep authoritative mappings between orders and payments on the server, validate those mappings on each update, require authentication or signed webhooks where possible, and include comprehensive tests for mismatched identifiers and authorization edge cases.

Find out what's already
exploitable in your codebase.