VYPR
High severityNVD Advisory· Published Dec 10, 2025· Updated Dec 11, 2025

Shopware's inproper input validation can lead to Reflected XSS through Storefront Login Page

CVE-2025-67648

Description

Shopware is an open commerce platform. Versions 6.4.6.0 through 6.6.10.9 and 6.7.0.0 through 6.7.5.0 have a Reflected XSS vulnerability in AuthController.php. A request parameter from the login page URL is directly rendered within the Twig template of the Storefront login page without further processing or input validation. This allows direct code injection into the template via the URL parameter, waitTime, which lacks proper input validation. This issue is fixed in versions 6.6.10.10 and 6.7.5.1.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
shopware/shopwarePackagist
>= 6.4.6.0, < 6.6.10.106.6.10.10
shopware/storefrontPackagist
>= 6.4.6.0, < 6.6.10.106.6.10.10
shopware/shopwarePackagist
>= 6.7.0.0, < 6.7.5.16.7.5.1
shopware/storefrontPackagist
>= 6.7.0.0, < 6.7.5.16.7.5.1

Affected products

1

Patches

1
c9242c02c845

Merge pull request #115 from shopware/security/account-login-page

https://github.com/shopware/shopwareMarcel KrämlDec 4, 2025via ghsa
3 files changed · +16 5
  • src/Storefront/Controller/AuthController.php+3 3 modified
    @@ -90,9 +90,9 @@ public function loginPage(Request $request, RequestDataBag $data, SalesChannelCo
                 'redirectParameters' => $request->get('redirectParameters', json_encode([])),
                 'errorRoute' => $request->attributes->get('_route'),
                 'page' => $page,
    -            'loginError' => (bool) $request->get('loginError'),
    -            'waitTime' => $request->get('waitTime'),
    -            'errorSnippet' => $request->get('errorSnippet'),
    +            'loginError' => $request->attributes->getBoolean('loginError'),
    +            'waitTime' => $request->attributes->get('waitTime'),
    +            'errorSnippet' => $request->attributes->get('errorSnippet'),
                 'data' => $data,
             ]);
         }
    
  • src/Storefront/Resources/views/storefront/component/account/login.html.twig+2 2 modified
    @@ -35,12 +35,12 @@
                                 {% if errorSnippet != null %}
                                     {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                                         type: 'danger',
    -                                    content: errorSnippet|trans|sw_sanitize
    +                                    content: errorSnippet|trans|sw_sanitize({}, true)
                                     } %}
                                 {% elseif waitTime != null %}
                                     {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                                         type: 'info',
    -                                    content: 'account.loginThrottled'|trans({'%seconds%': waitTime})|sw_sanitize
    +                                    content: 'account.loginThrottled'|trans({'%seconds%': waitTime|number_format})|sw_sanitize
                                     } %}
                                 {% else %}
                                     {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
    
  • tests/integration/Storefront/Controller/AuthControllerTest.php+11 0 modified
    @@ -601,6 +601,17 @@ public function testAccountGuestLoginPageWithoutRedirectRedirects(): void
             static::assertSame('/account/login', $response->headers->get('location'));
         }
     
    +    public function testLoginWithUnwantedQueryParameter(): void
    +    {
    +        $responseContent = $this->request(
    +            'GET',
    +            '/account/login?loginError=1&waitTime=<a%20href%3D"https%3A%2F%2Fde.wikipedia.org%2Fwiki%2FPhishing">Here<%2Fa>',
    +            []
    +        )->getContent();
    +        static::assertIsString($responseContent);
    +        static::assertStringNotContainsString('https://de.wikipedia.org/wiki/Phishing', $responseContent);
    +    }
    +
         private function createProductOnDatabase(string $productId, string $productNumber, Context $context): void
         {
             $taxId = Uuid::randomHex();
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.