{"id":"GHSA-gv8p-48fr-4fxg","summary":"Shopware: Privilege Escalation via Sync API Integration Admin Flag Bypass","details":"## Summary\n\nA non-admin API user with `integration:create` ACL privilege can escalate to full administrator by creating an integration with `admin: true` through the Sync API (`POST /api/_action/sync`). The regular integration endpoint (`POST /api/integration`) correctly blocks this, but the Sync API bypasses the controller-level check by writing directly through the DAL EntityWriter. The `integration` entity definition lacks `WriteProtection`, and the `admin` field has no field-level restriction flag.\n\n**OWASP:** A01:2021 — Broken Access Control\n\n## Root Cause\n\n`IntegrationController::upsertIntegration()` checks `$source-\u003eisAdmin()` before allowing the `admin` field to be set. However, `SyncController::sync()` routes writes through `SyncService → EntityWriter`, which only applies:\n\n1. `AclWriteValidator` — checks entity-level ACL (`integration:create` is sufficient)\n2. `EntityProtectionValidator` — checks `WriteProtection` on entity definitions, but `IntegrationDefinition` has none\n\nThe `admin` field in `IntegrationDefinition` is a plain `BoolField` with no `WriteProtection` or special flag. The Sync API writes it without restriction.\n\n**Vulnerable code path:**\n- `src/Core/Framework/Api/Controller/SyncController.php` → `SyncService` → `EntityWriter::upsert()`\n- **Missing protection:** `src/Core/Framework/Integration/IntegrationDefinition.php` — `admin` field has no `WriteProtection(Context::SYSTEM_SCOPE)`\n\n**Working protection (bypassed):**\n- `src/Core/Framework/Integration/IntegrationController.php:46-56` — `isAdmin()` check only applies to the dedicated controller endpoint\n\n## Impact\n\n- **Complete admin API access** — the escalated integration has full read/write on every entity: users, customers, orders, system configuration, integrations, plugins\n- **PII exfiltration** — read all customer records (names, emails, addresses, order history)\n- **Persistent backdoor** — the admin integration survives password changes and user deactivation\n\n## Remediation\n\nAdd `WriteProtection(Context::SYSTEM_SCOPE)` to `IntegrationDefinition`, matching how `UserDefinition` and `AclRoleDefinition` are already protected:\n\n```php\n// src/Core/Framework/Integration/IntegrationDefinition.php\n(new BoolField('admin', 'admin'))\n    -\u003eaddFlags(new WriteProtection(Context::SYSTEM_SCOPE)),\n```","aliases":["CVE-2026-48008"],"modified":"2026-09-10T03:51:08.823581002Z","published":"2026-06-04T19:23:33Z","database_specific":{"severity":"MODERATE","github_reviewed":true,"github_reviewed_at":"2026-06-04T19:23:33Z","nvd_published_at":null,"cwe_ids":["CWE-862"]},"references":[{"type":"WEB","url":"https://github.com/shopware/shopware/security/advisories/GHSA-gv8p-48fr-4fxg"},{"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-gv8p-48fr-4fxg/GHSA-gv8p-48fr-4fxg.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-gv8p-48fr-4fxg/GHSA-gv8p-48fr-4fxg.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-gv8p-48fr-4fxg/GHSA-gv8p-48fr-4fxg.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-gv8p-48fr-4fxg/GHSA-gv8p-48fr-4fxg.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N"}]}