{"id":"GHSA-7w52-7jvm-m9vw","summary":"Shopware: Timing-attack on admin panel allowing enumeration of administrator usernames","details":"### Summary\nThere is a Proof of Concept which is able to enumerate the usernames of administrator users. This was possible by performing a timing attack.\n\n### Details\nThe faulty code exists in [`src/Core/Framework/Api/OAuth/UserRepository.php`](https://github.com/shopware/shopware/blob/trunk/src/Core/Framework/Api/OAuth/UserRepository.php):\n```\npublic function getUserEntityByUserCredentials(\n        string $username,\n        #[\\SensitiveParameter]\n        string $password,\n        string $grantType,\n        ClientEntityInterface $clientEntity\n    ): ?UserEntityInterface {\n        if ($this-\u003eloginConfigService-\u003egetConfig()?-\u003euseDefault === false) {\n            // never allow login via password if the default login is disabled (e.g. using SSO only)\n            return null;\n        }\n\n        $builder = $this-\u003econnection-\u003ecreateQueryBuilder();\n        $user = $builder-\u003eselect('user.id', 'user.password')\n            -\u003efrom('user')\n            -\u003ewhere('username = :username')\n            -\u003esetParameter('username', $username)\n            -\u003efetchAssociative();\n\n        // PATH 1: EARLY RETURN WHEN USERNAME IS NOT FOUND\n        if (!$user) {\n            return null;\n        }\n\n        // PATH 2: VERIFY PASSWORD IF USER IS FOUND\n        if (!password_verify($password, (string) $user['password'])) {\n            return null;\n        }\n\n        return new User(Uuid::fromBytesToHex($user['id']));\n    }\n```\n\nSubroutine `getUserEntityByUserCredentials()` is called when an auth request is send to `api/oauth/token`. If the given username is not found an early return is done (PATH 1). Only if the user is found we verify the password using `password_verify`.\n\nPHP method `password_verify` by default uses hashing algorithm Argon2id which by design is intentionally 'slow' by introducing a timing cost to an attempt to bruteforce hashes more costly.\n\nSince `password_verify` has a notable executable time, PATH 2 where an user is found and verified will be slower on average then PATH 1 where we do an early return for non-existing users.\n\n### Proposed fix\nBefore doing the early return, `password_verify` a dummy hash.\n\n### Impact\n1. More targeted dictionary/bruteforce attacks.\n2. Spear phishing / eases social engineering.\n3. Credential stuffing from other data leaks.\n\n### Authors\nNiel Duysters (@NielDuysters) and Thomas Brankaer (@tbrankaer)","aliases":["CVE-2026-48011"],"modified":"2026-09-10T03:50:48.818846957Z","published":"2026-06-04T19:31:17Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-06-04T19:31:17Z","nvd_published_at":"2026-06-10T22:17:00Z","cwe_ids":["CWE-208"],"severity":"LOW"},"references":[{"type":"WEB","url":"https://github.com/shopware/shopware/security/advisories/GHSA-7w52-7jvm-m9vw"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-48011"},{"type":"PACKAGE","url":"https://github.com/shopware/shopware"},{"type":"WEB","url":"https://github.com/shopware/shopware/releases/tag/v6.6.10.18"},{"type":"WEB","url":"https://github.com/shopware/shopware/releases/tag/v6.7.10.1"}],"affected":[{"package":{"name":"shopware/platform","ecosystem":"Packagist","purl":"pkg:composer/shopware/platform"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.7.0.0"},{"fixed":"6.7.10.1"}]}],"versions":["v6.7.0.0","v6.7.0.1","v6.7.1.0","v6.7.1.1","v6.7.1.2","v6.7.10.0","v6.7.2.0","v6.7.2.1","v6.7.2.2","v6.7.3.0","v6.7.3.1","v6.7.4.0","v6.7.4.1","v6.7.4.2","v6.7.5.0","v6.7.5.1","v6.7.6.0","v6.7.6.1","v6.7.6.2","v6.7.7.0","v6.7.7.1","v6.7.8.0","v6.7.8.1","v6.7.8.2","v6.7.9.0","v6.7.9.1"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-7w52-7jvm-m9vw/GHSA-7w52-7jvm-m9vw.json"}},{"package":{"name":"shopware/platform","ecosystem":"Packagist","purl":"pkg:composer/shopware/platform"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.6.10.18"}]}],"versions":["6.3.0.0","6.3.0.1","6.3.0.2","6.3.1.0","6.3.1.1","6.3.2.0","6.3.2.1","6.3.3.0","6.3.3.1","6.3.4.0","6.3.4.1","6.3.5.0","6.3.5.1","6.3.5.2","6.3.5.3","6.3.5.4","6.4.0.0","6.4.0.0-RC1","6.4.1.0","6.4.1.1","6.4.1.2","6.4.10.0","6.4.10.1","6.4.11.0","6.4.11.1","6.4.12.0","6.4.13.0","6.4.14.0","6.4.15.0","6.4.15.1","6.4.15.2","6.4.16.0","6.4.16.1","6.4.17.0","6.4.17.1","6.4.17.2","6.4.18.0","6.4.18.1","6.4.19.0","6.4.2.0","6.4.2.1","6.4.20.0","6.4.20.1","6.4.20.2","6.4.3.0","6.4.3.1","6.4.4.0","6.4.4.1","6.4.5.0","6.4.5.1","6.4.6.0","6.4.6.1","6.4.7.0","6.4.8.0","6.4.8.1","6.4.8.2","6.4.9.0","6.5.0.0","6.5.0.0-rc1","6.5.0.0-rc2","6.5.0.0-rc3","6.5.0.0-rc4","v6.0.0+ea2","v6.1.0","v6.1.0-rc1","v6.1.0-rc2","v6.1.0-rc3","v6.1.0-rc4","v6.1.1","v6.1.2","v6.1.3","v6.1.4","v6.1.5","v6.1.6","v6.2.0","v6.2.0-RC1","v6.2.1","v6.2.2","v6.2.3","v6.5.1.0","v6.5.1.1","v6.5.2.0","v6.5.2.1","v6.5.3.0","v6.5.3.1","v6.5.3.2","v6.5.3.3","v6.5.4.0","v6.5.4.1","v6.5.5.0","v6.5.5.1","v6.5.5.2","v6.5.6.0","v6.5.6.1","v6.5.7.0","v6.5.7.1","v6.5.7.2","v6.5.7.3","v6.5.7.4","v6.5.8.0","v6.5.8.1","v6.5.8.10","v6.5.8.11","v6.5.8.12","v6.5.8.13","v6.5.8.14","v6.5.8.15","v6.5.8.16","v6.5.8.17","v6.5.8.18","v6.5.8.19","v6.5.8.2","v6.5.8.3","v6.5.8.4","v6.5.8.5","v6.5.8.6","v6.5.8.7","v6.5.8.8","v6.5.8.9","v6.6.0.0","v6.6.0.0-rc1","v6.6.0.0-rc2","v6.6.0.0-rc3","v6.6.0.0-rc4","v6.6.0.0-rc5","v6.6.0.0-rc6","v6.6.0.0-rc7","v6.6.0.1","v6.6.0.2","v6.6.0.3","v6.6.1.0","v6.6.1.1","v6.6.1.2","v6.6.10.0","v6.6.10.1","v6.6.10.10","v6.6.10.11","v6.6.10.12","v6.6.10.13","v6.6.10.14","v6.6.10.15","v6.6.10.16","v6.6.10.17","v6.6.10.2","v6.6.10.3","v6.6.10.4","v6.6.10.5","v6.6.10.6","v6.6.10.7","v6.6.10.8","v6.6.10.9","v6.6.2.0","v6.6.3.0","v6.6.3.1","v6.6.4.0","v6.6.4.1","v6.6.5.0","v6.6.5.1","v6.6.6.0","v6.6.6.1","v6.6.7.0","v6.6.7.1","v6.6.8.0","v6.6.8.1","v6.6.8.2","v6.6.9.0"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-7w52-7jvm-m9vw/GHSA-7w52-7jvm-m9vw.json"}},{"package":{"name":"shopware/core","ecosystem":"Packagist","purl":"pkg:composer/shopware/core"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.7.0.0"},{"fixed":"6.7.10.1"}]}],"versions":["v6.7.0.0","v6.7.0.1","v6.7.1.0","v6.7.1.1","v6.7.1.2","v6.7.10.0","v6.7.2.0","v6.7.2.1","v6.7.2.2","v6.7.3.0","v6.7.3.1","v6.7.4.0","v6.7.4.1","v6.7.4.2","v6.7.5.0","v6.7.5.1","v6.7.6.0","v6.7.6.1","v6.7.6.2","v6.7.7.0","v6.7.7.1","v6.7.8.0","v6.7.8.1","v6.7.8.2","v6.7.9.0","v6.7.9.1"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-7w52-7jvm-m9vw/GHSA-7w52-7jvm-m9vw.json"}},{"package":{"name":"shopware/core","ecosystem":"Packagist","purl":"pkg:composer/shopware/core"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.6.10.18"}]}],"versions":["6.3.0.0","6.3.0.1","6.3.0.2","6.3.1.0","6.3.1.1","6.3.2.0","6.3.2.1","6.3.3.0","6.3.3.1","6.3.4.0","6.3.4.1","6.3.5.0","6.3.5.1","6.3.5.2","6.3.5.3","6.3.5.4","6.4.0.0","6.4.0.0-RC1","6.4.1.0","6.4.1.1","6.4.1.2","6.4.10.0","6.4.10.1","6.4.11.0","6.4.11.1","6.4.12.0","6.4.13.0","6.4.14.0","6.4.15.0","6.4.15.1","6.4.15.2","6.4.16.0","6.4.16.1","6.4.17.0","6.4.17.1","6.4.17.2","6.4.18.0","6.4.18.1","6.4.19.0","6.4.2.0","6.4.2.1","6.4.20.0","6.4.20.1","6.4.20.2","6.4.3.0","6.4.3.1","6.4.4.0","6.4.4.1","6.4.5.0","6.4.5.1","6.4.6.0","6.4.6.1","6.4.7.0","6.4.8.0","6.4.8.1","6.4.8.2","6.4.9.0","6.5.0.0","6.5.0.0-rc1","6.5.0.0-rc2","6.5.0.0-rc3","6.5.0.0-rc4","v6.0.0+ea2","v6.1.0","v6.1.0-rc1","v6.1.0-rc2","v6.1.0-rc3","v6.1.0-rc4","v6.1.1","v6.1.2","v6.1.3","v6.1.4","v6.1.5","v6.1.6","v6.2.0","v6.2.0-RC1","v6.2.1","v6.2.2","v6.2.3","v6.5.1.0","v6.5.1.1","v6.5.2.0","v6.5.2.1","v6.5.3.0","v6.5.3.1","v6.5.3.2","v6.5.3.3","v6.5.4.0","v6.5.4.1","v6.5.5.0","v6.5.5.1","v6.5.5.2","v6.5.6.0","v6.5.6.1","v6.5.7.0","v6.5.7.1","v6.5.7.2","v6.5.7.3","v6.5.7.4","v6.5.8.0","v6.5.8.1","v6.5.8.10","v6.5.8.11","v6.5.8.12","v6.5.8.13","v6.5.8.14","v6.5.8.15","v6.5.8.16","v6.5.8.17","v6.5.8.18","v6.5.8.19","v6.5.8.2","v6.5.8.3","v6.5.8.4","v6.5.8.5","v6.5.8.6","v6.5.8.7","v6.5.8.8","v6.5.8.9","v6.6.0.0","v6.6.0.0-rc1","v6.6.0.0-rc2","v6.6.0.0-rc3","v6.6.0.0-rc4","v6.6.0.0-rc5","v6.6.0.0-rc6","v6.6.0.0-rc7","v6.6.0.1","v6.6.0.2","v6.6.0.3","v6.6.1.0","v6.6.1.1","v6.6.1.2","v6.6.10.0","v6.6.10.1","v6.6.10.10","v6.6.10.11","v6.6.10.12","v6.6.10.13","v6.6.10.14","v6.6.10.15","v6.6.10.16","v6.6.10.17","v6.6.10.2","v6.6.10.3","v6.6.10.4","v6.6.10.5","v6.6.10.6","v6.6.10.7","v6.6.10.8","v6.6.10.9","v6.6.2.0","v6.6.3.0","v6.6.3.1","v6.6.4.0","v6.6.4.1","v6.6.5.0","v6.6.5.1","v6.6.6.0","v6.6.6.1","v6.6.7.0","v6.6.7.1","v6.6.8.0","v6.6.8.1","v6.6.8.2","v6.6.9.0"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-7w52-7jvm-m9vw/GHSA-7w52-7jvm-m9vw.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N"}]}