Executive brief
calibre is a popular e-book management and distribution tool. Its Content Server component allows users to browse and read books remotely. A flaw in version prior to 9.12.0 allows unauthenticated or read-only users to modify book annotations (notes and highlights) through a missing access control check, potentially corrupting or altering shared libraries without authorization.
Technical details
The vulnerability is an authorization bypass in the Content Server's POST /book-update-annotations endpoint (src/calibre/srv/books.py). The endpoint handler function omits the needs_db_write=True parameter in its decorator, causing the Router.dispatch() function to skip the ctx.check_for_write_access() authorization check. As a result, attacker-controlled JSON from the request body is passed directly to db.merge_annotations_for_book() without validating the caller's permissions. An unauthenticated user on a publicly exposed deployment, or a read-only user on any deployment, can exploit this to persist unauthorized annotation modifications to any book in the library. The fix, applied in version 9.12.0 commit 71295e8, adds needs_db_write=True to the endpoint decorator to restore the access control check.
Affected products
- calibre calibre before 9.12.0
Timeline
- 2026-08-11: disclosed
- 2026-07-31: patched: Version 9.12.0 released with fix