CVE-2026-125870: BookStack before 26.09.3 Broken Access Control via ImageController
BookStack before 26.09.3 contains a missing authorization vulnerability in ImageController::checkImagePermission() that allows authenticated non-admin users to bypass page-level content restrictions for images whose owning page has been moved to the recycle bin, because the permission check relies on Page::getPage() which returns null for soft-deleted pages and silently skips the PageView check. Attackers can enumerate sequential image IDs via GET /images/edit/{id} to disclose metadata of restricted images, and users with image-update-all/image-delete-all privileges can rename, replace, or permanently delete images belonging to content they cannot view, persisting the damage even after the page is restored.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
BookStackto a version that resolves this vulnerability.Fixed in 26.09.3
Event History
Frequently Asked Questions
Who is exposed to this issue?
Authenticated non-admin users are exposed to the metadata disclosure path. Modification or permanent deletion of inaccessible images additionally requires image-update-all or image-delete-all privileges.
What conditions are required for exploitation?
The target image must belong to a page that has been moved to the recycle bin. An attacker must be authenticated and able to enumerate image IDs using the /images/edit/{id} endpoint; higher image-wide privileges are required to alter or delete images.
Are active pages affected?
The described authorization bypass occurs because the owning page is soft-deleted and Page::getPage() returns null. The provided information does not indicate that images on non-deleted pages are affected.
What is the impact if images are modified while the page is in the recycle bin?
Users with image-update-all or image-delete-all privileges can rename, replace, or permanently delete images belonging to content they cannot view. The changes persist even if the owning page is later restored.