{"id":"CVE-2026-125870","kind":"vulnerability","aliases":["CVE-2026-125870"],"related":[],"title":"BookStack: deleted-page image permission check lets users reach restricted images","description":"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.","summary":"BookStack skips the page-view permission check for images whose page is in the recycle bin. An authenticated non-admin user can read metadata of those images and, with image-update-all or image-delete-all rights, rename, replace or delete them.","severity":"medium","cvss":4.2,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["bookstack","package","self-hosted"],"not_affected_if":["bookstack-26.09.3-or-later","single-user-instance"],"how_to_check":"- Check the installed BookStack version against the fixed release in the release notes linked from the sources.\n- Look for BookStack installs where non-admin users hold image-update-all or image-delete-all permissions.","fix":"- BookStack: upgrade to `26.09.3` or later.","status":"open","published_at":"2026-11-12T13:17:15+00:00","first_seen_at":"2026-11-12T13:38:24+00:00","triaged_at":"2026-11-12T13:38:54+00:00","updated_at":"2026-11-12T13:38:54+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-12T13:38:54Z","model":"claude-haiku-5-5","output":{"fix":"- BookStack: upgrade to `26.09.3` or later.","reach":"internet","title":"BookStack: deleted-page image permission check lets users reach restricted images","impact":"medium","summary":"BookStack skips the page-view permission check for images whose page is in the recycle bin. An authenticated non-admin user can read metadata of those images and, with image-update-all or image-delete-all rights, rename, replace or delete them.","audience":"businesses","category":"package","nicknames":[],"who_cares":["bookstack","self-hosted"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Non-admin users read and alter images of restricted pages.","analyst_note":"","how_to_check":"- Check the installed BookStack version against the fixed release in the release notes linked from the sources.\n- Look for BookStack installs where non-admin users hold image-update-all or image-delete-all permissions.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["bookstack-26.09.3-or-later","single-user-instance"],"who_is_affected":"Self-hosted BookStack instances with multiple authenticated users who have restricted page access. Exposure requires a page to be moved to the recycle bin, and the image edit and delete risk requires the image-update-all or image-delete-all privileges. Single-user or fully trusted instances are less exposed.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000726,"input_tokens":4710,"output_tokens":510,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-125870':15A,18A '-2026':14A,17A '/image-delete-all':151C '/images/edit':136C '26.09.3':71C 'admin':45B,85C 'allow':81C 'attack':128C 'authent':42B,82C 'author':75C 'belong':160C 'bin':40B,105C 'bookstack':1A,19B,24B,69C 'bypass':88C 'cannot':164C 'check':7A,31B,109C,127C 'checkimagepermiss':79C 'contain':72C 'content':92C,162C 'cve':13A,16A 'damag':168C 'delet':3A,62B,68B,120C,158C 'deleted-pag':2A 'disclos':139C 'enumer':130C 'even':169C 'get':135C 'getpag':113C 'host':23B 'id':133C,137C 'imag':5A,12A,33B,52B,56B,61B,95C,132C,143C,148C,159C 'image-delete-al':60B 'image-update-al':55B,147C 'imagecontrol':78C 'let':8A 'level':91C 'metadata':49B,140C 'miss':74C 'move':101C 'non':44B,84C 'non-admin':43B,83C 'null':116C 'own':97C 'packag':20B 'page':4A,28B,35B,90C,98C,112C,121C,172C 'page-level':89C 'page-view':27B 'pageview':126C 'perman':157C 'permiss':6A,30B,108C 'persist':166C 'privileg':152C 'reach':10A 'read':48B 'recycl':39B,104C 'reli':110C 'renam':65B,154C 'replac':66B,155C 'restor':174C 'restrict':11A,93C,142C 'return':115C 'right':64B 'self':22B 'self-host':21B 'sequenti':131C 'silent':123C 'skip':25B,124C 'soft':119C 'soft-delet':118C 'updat':57B,149C 'user':9A,46B,86C,145C 'via':134C 'view':29B,165C 'vulner':76C 'whose':34B,96C","nicknames":[],"mitigations":[],"who_affected":"Self-hosted BookStack instances with multiple authenticated users who have restricted page access. Exposure requires a page to be moved to the recycle bin, and the image edit and delete risk requires the image-update-all or image-delete-all privileges. Single-user or fully trusted instances are less exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["bookstack","medium","package","selfhosted"],"campaign_type":null,"search_a":"'-125870':15A,18A '-2026':14A,17A 'bookstack':1A 'check':7A 'cve':13A,16A 'delet':3A 'deleted-pag':2A 'imag':5A,12A 'let':8A 'page':4A 'permiss':6A 'reach':10A 'restrict':11A 'user':9A","search_b":"'admin':45B 'authent':42B 'bin':40B 'bookstack':19B,24B 'check':31B 'delet':62B,68B 'host':23B 'imag':33B,52B,56B,61B 'image-delete-al':60B 'image-update-al':55B 'metadata':49B 'non':44B 'non-admin':43B 'packag':20B 'page':28B,35B 'page-view':27B 'permiss':30B 'read':48B 'recycl':39B 'renam':65B 'replac':66B 'right':64B 'self':22B 'self-host':21B 'skip':25B 'updat':57B 'user':46B 'view':29B 'whose':34B","search_c":"'/image-delete-all':151C '/images/edit':136C '26.09.3':71C 'admin':85C 'allow':81C 'attack':128C 'authent':82C 'author':75C 'belong':160C 'bin':105C 'bookstack':69C 'bypass':88C 'cannot':164C 'check':109C,127C 'checkimagepermiss':79C 'contain':72C 'content':92C,162C 'damag':168C 'delet':120C,158C 'disclos':139C 'enumer':130C 'even':169C 'get':135C 'getpag':113C 'id':133C,137C 'imag':95C,132C,143C,148C,159C 'image-update-al':147C 'imagecontrol':78C 'level':91C 'metadata':140C 'miss':74C 'move':101C 'non':84C 'non-admin':83C 'null':116C 'own':97C 'page':90C,98C,112C,121C,172C 'page-level':89C 'pageview':126C 'perman':157C 'permiss':108C 'persist':166C 'privileg':152C 'recycl':104C 'reli':110C 'renam':154C 'replac':155C 'restor':174C 'restrict':93C,142C 'return':115C 'sequenti':131C 'silent':123C 'skip':124C 'soft':119C 'soft-delet':118C 'updat':149C 'user':86C,145C 'via':134C 'view':165C 'vulner':76C 'whose':96C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T13:17:15+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-125870","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-125870","severity":null,"published_at":"2026-11-12T13:17:15+00:00","modified_at":"2026-11-12T13:17:15+00:00","first_seen_at":"2026-11-12T13:38:24+00:00","fetched_at":"2026-11-12T13:38:24+00:00","note":null}],"documents":[{"id":128990,"url":"https://github.com/BookStackApp/BookStack/releases/tag/v26.09.3","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":135102,"url":"https://www.vulncheck.com/advisories/bookstack-before-broken-access-control-via-imagecontroller","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}