Every CVE Search/ Get API key

CVE-2026-68501

Sylius Mollie Plugin: Unauthenticated IDOR leaks order token and customer PII

6.5 MediumFix available

Sylius Mollie Plugin provides Mollie payment integration for Sylius applications. Prior to 2.2.8, 3.2.4, and 3.3.1, Sylius Mollie Plugin's GET /{_locale}/thank-you PageRedirectController::thankYouAction and GET /{_locale}/get-code QrCodeAction::fetchQrCodeFromOrder endpoints look up sequential orderId values without ownership or session checks, exposing order tokenValue values that can be used with GET /{_locale}/register-after-checkout/{tokenValue} to view customer first name, last name, and email. This issue is fixed in 2.2.8, 3.2.4, and 3.3.1.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
Low

Exploit likelihood

0.87%Up 0.5 points since Jul 31, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.5

Sylius Mollie Plugin: Unauthenticated IDOR leaks order token and customer PII

Sylius Mollie Plugin provides Mollie payment integration for Sylius applications. Prior to 2.2.8, 3.2.4, and 3.3.1, Sylius Mollie Plugin's GET /{_locale}/thank-you PageRedirectController::thankYouAction and GET /{_locale}/get-code QrCodeAction::fetchQrCodeFromOrder endpoints look up sequential orderId values without ownership or session checks, exposing order tokenValue values that can be used with GET /{_locale}/register-after-checkout/{tokenValue} to view customer first name, last name, and email. This issue is fixed in 2.2.8, 3.2.4, and 3.3.1.

Record
CVE-2026-68501
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Weakness
CWE-639
Updated
2026-11-02
EUVDEUVD-2026-51301 6.5

Sylius Mollie Plugin provides Mollie payment integration for Sylius applications. Prior to 2.2.8, 3.2.4, and 3.3.1, Sylius Mollie Plugin's GET /{_locale}/thank-you PageRedirectController::thankYouAction and GET /{_locale}/get-code QrCodeAction::fetchQrCodeFromOrder endpoints look up sequential orderId values without ownership or session checks, exposing order tokenValue values that can be used with GET /{_locale}/register-after-checkout/{tokenValue} to view customer first name, last name, and email. This issue is fixed in 2.2.8, 3.2.4, and 3.3.1.

Record
EUVD-2026-51301
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Updated
2026-11-02
GitHub AdvisoriesGHSA-x83g-979r-f5fh 6.5

Sylius Mollie Plugin has unauthenticated IDOR that leaks order token and customer PII

Impact

Two unauthenticated Mollie shop endpoints look up orders by a sequential integer orderId with no ownership or session check. Chained, they expose customer PII.

GET /{_locale}/thank-you (PageRedirectController::thankYouAction, route sylius_mollie_shop_thank_you_page_redirect) loads the order with findOneBy(['id' => $orderId]) and returns a 302 whose Location header carries that order's tokenValue. Any orderId thus yields that order's token. A non-existent id dereferences null and returns a 500. The handler also writes the raw orderId into the session.

GET /{_locale}/get-code (QrCodeAction::fetchQrCodeFromOrder, route sylius_mollie_shop_get_qr_code) runs the same lookup and returns the order's QR code and id as JSON, ignoring the session cart; this is where the front-end got the integer id. A bad id 500s here too.

That tokenValue is the order's only access control. Passed to the Sylius core page GET /{_locale}/register-after-checkout/{tokenValue} it returns a form pre-filled with the customer's first name, last name and email. The full attack: enumerate orderId, read the token from the redirect, read the PII, at roughly a 1-in-71 hit rate for guest orders. register-after-checkout is Sylius core, not the plugin, and trusts the token by design, so the leak is what must be fixed.

None of the plugin endpoints require a login, session or CSRF token.

Patches

Fixed in 2.2.8, 3.2.4 and 3.3.1.

Workarounds

If you cannot upgrade immediately, patch both endpoints at the project level by decorating the plugin controllers. The decorators enforce ownership before delegating to the original controller, so no plugin behaviour is lost. They keep the original orderId request contract, so no front-end or asset changes are required. Works on both 2.2 and 3.x.

Step 1. Decorate the QR code controller

Create src/Controller/Mollie/SecureQrCodeAction.php in your Sylius project:

<?php

declare(strict_types=1);

namespace App\Controller\Mollie;

use Sylius\Component\Order\Context\CartContextInterface;
use Sylius\Component\Order\Context\CartNotFoundException;
use Sylius\MolliePlugin\Controller\Shop\QrCodeAction;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

final class SecureQrCodeAction
{
    private const OWNED_ORDER_IDS_SESSION_KEY = 'sylius_mollie.owned_order_ids';

    public function __construct(
        private readonly QrCodeAction $inner,
        private readonly CartContextInterface $cartContext,
    ) {
    }

    public function fetchQrCodeFromOrder(Request $request): JsonResponse
    {
        $orderId = $request->get('orderId');

        try {
            $cart = $this->cartContext->getCart();
        } catch (CartNotFoundException) {
            $cart = null;
        }

        if (null !== $orderId && (null === $cart || (string) $cart->getId() !== (string) $orderId)) {
            return new JsonResponse([], Response::HTTP_FORBIDDEN);
        }

        if (null !== $cart && null !== $cart->getId() && $request->hasSession()) {
            $session = $request->getSession();
            $ownedIds = $session->get(self::OWNED_ORDER_IDS_SESSION_KEY, []);
            $ownedIds[(string) $cart->getId()] = true;
            $session->set(self::OWNED_ORDER_IDS_SESSION_KEY, $ownedIds);
        }

        return $this->inner->fetchQrCodeFromOrder($request);
    }

    public function createPayment(Request $request): Response
    {
        return $this->inner->createPayment($request);
    }

    public function removeQrCodeFromOrder(Request $request): JsonResponse
    {
        return $this->inner->removeQrCodeFromOrder($request);
    }
}

Step 2. Decorate the thank-you controller

Create src/Controller/Mollie/SecurePageRedirectController.php:

<?php

declare(strict_types=1);

namespace App\Controller\Mollie;

use…
Record
GHSA-x83g-979r-f5fh
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Weakness
CWE-639
Updated
2026-11-02
NVD 6.5

Sylius Mollie Plugin provides Mollie payment integration for Sylius applications. Prior to 2.2.8, 3.2.4, and 3.3.1, Sylius Mollie Plugin's GET /{_locale}/thank-you PageRedirectController::thankYouAction and GET /{_locale}/get-code QrCodeAction::fetchQrCodeFromOrder endpoints look up sequential orderId values without ownership or session checks, exposing order tokenValue values that can be used with GET /{_locale}/register-after-checkout/{tokenValue} to view customer first name, last name, and email. This issue is fixed in 2.2.8, 3.2.4, and 3.3.1.

Record
CVE-2026-68501
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Weakness
CWE-639
Updated
2026-11-02
OSV 6.5

Sylius Mollie Plugin: Unauthenticated IDOR leaks order token and customer PII

Sylius Mollie Plugin provides Mollie payment integration for Sylius applications. Prior to 2.2.8, 3.2.4, and 3.3.1, Sylius Mollie Plugin's GET /{_locale}/thank-you PageRedirectController::thankYouAction and GET /{_locale}/get-code QrCodeAction::fetchQrCodeFromOrder endpoints look up sequential orderId values without ownership or session checks, exposing order tokenValue values that can be used with GET /{_locale}/register-after-checkout/{tokenValue} to view customer first name, last name, and email. This issue is fixed in 2.2.8, 3.2.4, and 3.3.1.

Record
CVE-2026-68501
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Weakness
CWE-639
Updated
2026-11-02
OSVGHSA-x83g-979r-f5fh 6.5

Sylius Mollie Plugin has unauthenticated IDOR that leaks order token and customer PII

Impact

Two unauthenticated Mollie shop endpoints look up orders by a sequential integer orderId with no ownership or session check. Chained, they expose customer PII.

GET /{_locale}/thank-you (PageRedirectController::thankYouAction, route sylius_mollie_shop_thank_you_page_redirect) loads the order with findOneBy(['id' => $orderId]) and returns a 302 whose Location header carries that order's tokenValue. Any orderId thus yields that order's token. A non-existent id dereferences null and returns a 500. The handler also writes the raw orderId into the session.

GET /{_locale}/get-code (QrCodeAction::fetchQrCodeFromOrder, route sylius_mollie_shop_get_qr_code) runs the same lookup and returns the order's QR code and id as JSON, ignoring the session cart; this is where the front-end got the integer id. A bad id 500s here too.

That tokenValue is the order's only access control. Passed to the Sylius core page GET /{_locale}/register-after-checkout/{tokenValue} it returns a form pre-filled with the customer's first name, last name and email. The full attack: enumerate orderId, read the token from the redirect, read the PII, at roughly a 1-in-71 hit rate for guest orders. register-after-checkout is Sylius core, not the plugin, and trusts the token by design, so the leak is what must be fixed.

None of the plugin endpoints require a login, session or CSRF token.

Patches

Fixed in 2.2.8, 3.2.4 and 3.3.1.

Workarounds

If you cannot upgrade immediately, patch both endpoints at the project level by decorating the plugin controllers. The decorators enforce ownership before delegating to the original controller, so no plugin behaviour is lost. They keep the original orderId request contract, so no front-end or asset changes are required. Works on both 2.2 and 3.x.

Step 1. Decorate the QR code controller

Create src/Controller/Mollie/SecureQrCodeAction.php in your Sylius project:

<?php

declare(strict_types=1);

namespace App\Controller\Mollie;

use Sylius\Component\Order\Context\CartContextInterface;
use Sylius\Component\Order\Context\CartNotFoundException;
use Sylius\MolliePlugin\Controller\Shop\QrCodeAction;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

final class SecureQrCodeAction
{
    private const OWNED_ORDER_IDS_SESSION_KEY = 'sylius_mollie.owned_order_ids';

    public function __construct(
        private readonly QrCodeAction $inner,
        private readonly CartContextInterface $cartContext,
    ) {
    }

    public function fetchQrCodeFromOrder(Request $request): JsonResponse
    {
        $orderId = $request->get('orderId');

        try {
            $cart = $this->cartContext->getCart();
        } catch (CartNotFoundException) {
            $cart = null;
        }

        if (null !== $orderId && (null === $cart || (string) $cart->getId() !== (string) $orderId)) {
            return new JsonResponse([], Response::HTTP_FORBIDDEN);
        }

        if (null !== $cart && null !== $cart->getId() && $request->hasSession()) {
            $session = $request->getSession();
            $ownedIds = $session->get(self::OWNED_ORDER_IDS_SESSION_KEY, []);
            $ownedIds[(string) $cart->getId()] = true;
            $session->set(self::OWNED_ORDER_IDS_SESSION_KEY, $ownedIds);
        }

        return $this->inner->fetchQrCodeFromOrder($request);
    }

    public function createPayment(Request $request): Response
    {
        return $this->inner->createPayment($request);
    }

    public function removeQrCodeFromOrder(Request $request): JsonResponse
    {
        return $this->inner->removeQrCodeFromOrder($request);
    }
}

Step 2. Decorate the thank-you controller

Create src/Controller/Mollie/SecurePageRedirectController.php:

<?php

declare(strict_types=1);

namespace App\Controller\Mollie;

use…
Record
GHSA-x83g-979r-f5fh
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
Weakness
CWE-639
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
sylius/mollie-plugin
Packagist
before 2.2.8
2.2.8
sylius/mollie-plugin
Packagist
3.0.0 up to 3.2.4
3.2.4
sylius/mollie-plugin
Packagist
3.3.0 up to 3.3.1
3.3.1
sylius/mollie-plugin
Packagist
before 2.2.8, plus listed versions
v0.1.0v1.0.0v1.0.1v1.0.2v2.0.0
Show 12 moreShow less
v2.0.1v2.0.2v2.1.0v2.1.1v2.2.0v2.2.1v2.2.2v2.2.3v2.2.4v2.2.5v2.2.6v2.2.7
2.2.8
sylius/mollie-plugin
Packagist
3.0.0 up to 3.2.4, plus listed versions
v3.0.0v3.0.1v3.0.2v3.0.3v3.1.0
Show 6 moreShow less
v3.1.1v3.1.2v3.2.0v3.2.1v3.2.2v3.2.3
3.2.4
sylius/mollie-plugin
Packagist
3.3.0 up to 3.3.1, plus listed versions
v3.3.0
3.3.1

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-68501 is a medium vulnerability (CVSS 6.5) in Sylius Mollieplugin, published July 30, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.87%, the 59th percentile. Fixed in sylius/mollie-plugin 2.2.8.

References

Show 8 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open