Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-73249

CVE-2026-73249: calibre Auth Bypass Vulnerability

CVE-2026-73249 is an authentication bypass flaw in calibre e-book manager that allows unauthorized users to modify book annotations. This article covers the technical details, affected versions, impact, and mitigation.

Published:

CVE-2026-73249 Overview

Calibre is an open-source e-book management application that includes a Content Server for remote library access. CVE-2026-73249 is a missing authorization vulnerability [CWE-862] in the Content Server endpoint POST /book-update-annotations/{library_id}/{book_id}/{fmt}. The handler in src/calibre/srv/books.py omits the needs_db_write=True flag, so Router.dispatch() skips ctx.check_for_write_access() before invoking update_annotations(). A readonly user, or any anonymous user on an unauthenticated deployment, can persist unauthorized book annotation changes. The issue is fixed in Calibre version 9.12.0.

Critical Impact

Unauthenticated or read-only network attackers can overwrite persisted book annotations, tampering with library integrity without any user interaction.

Affected Products

  • Calibre Content Server versions prior to 9.12.0
  • Deployments exposing /book-update-annotations/ over the network
  • Anonymous (unauthenticated) Calibre Content Server deployments

Discovery Timeline

  • 2026-08-11 - CVE-2026-73249 published to NVD
  • 2026-08-12 - Last updated in NVD database

Technical Details for CVE-2026-73249

Vulnerability Analysis

The Calibre Content Server uses a decorator-based routing model. Each endpoint declares its capability requirements, and Router.dispatch() enforces them before invoking the handler. Write endpoints must declare needs_db_write=True so the router calls ctx.check_for_write_access() and validates the caller's permissions.

The update_annotations endpoint accepts a POST request with attacker-controlled JSON and forwards it to db.merge_annotations_for_book(). Because the endpoint decorator lacked needs_db_write=True, the write-access check was never invoked. Any request reaching the route, whether authenticated as a read-only user or unauthenticated on an open deployment, was permitted to mutate annotation state.

Root Cause

The root cause is a missing authorization declaration on a state-changing HTTP handler. The endpoint mutates persisted annotation data but was registered as if it were a read-only operation, so the router's authorization gate never fired for this route.

Attack Vector

Exploitation requires only network reachability to the Calibre Content Server. An attacker sends a crafted POST request to /book-update-annotations/{library_id}/{book_id}/{fmt} with a JSON body containing arbitrary annotation content. The server merges the attacker-supplied annotations into the database via merge_annotations_for_book(), persisting them without checking the caller's write privileges.

python
     return ans
 
 
-@endpoint('/book-update-annotations/{library_id}/{book_id}/{+fmt}', types={'book_id': int}, methods=('POST',))
+@endpoint('/book-update-annotations/{library_id}/{book_id}/{+fmt}', types={'book_id': int}, methods=('POST',), needs_db_write=True)
 def update_annotations(ctx, rd, library_id, book_id, fmt):
     db = get_db(ctx, rd, library_id)
     user = rd.username or '*'

Source: GitHub Commit 71295e8b. The patch adds needs_db_write=True so the router enforces check_for_write_access() before dispatch.

Detection Methods for CVE-2026-73249

Indicators of Compromise

  • HTTP POST requests to /book-update-annotations/ paths originating from unauthenticated sessions or read-only user accounts.
  • Unexpected modifications to book annotations in the Calibre library database, particularly on entries not previously annotated.
  • Requests to the annotations endpoint from IP addresses outside the expected administrator population.

Detection Strategies

  • Review Calibre Content Server access logs for POST /book-update-annotations/ entries and correlate against the authenticated user's assigned role.
  • Alert on any successful POST to the annotations endpoint where the session token maps to a read-only account.
  • On unauthenticated deployments, treat every request to /book-update-annotations/ as suspicious until the server is upgraded to 9.12.0 or later.

Monitoring Recommendations

  • Forward Calibre Content Server HTTP logs to a centralized log platform and retain them long enough to reconstruct annotation tampering incidents.
  • Baseline normal annotation-write volume per user and alert on statistical deviations.
  • Monitor the Calibre process for outbound connections and configuration file changes that would indicate broader post-exploitation activity.

How to Mitigate CVE-2026-73249

Immediate Actions Required

  • Upgrade Calibre to version 9.12.0 or later, which enforces needs_db_write=True on the annotations endpoint.
  • Restrict network exposure of the Content Server to trusted networks or place it behind an authenticating reverse proxy.
  • Audit user accounts and disable anonymous access unless explicitly required by the deployment.

Patch Information

The fix is included in Calibre release v9.12.0. Technical details are documented in the GitHub Security Advisory GHSA-5x64-w63v-x2g6, and the code change is available in commit 71295e8b.

Workarounds

  • Block the /book-update-annotations/ path at an upstream reverse proxy or web application firewall until the upgrade is deployed.
  • Require authentication on the Content Server and remove any read-only accounts that do not need annotation access.
  • Deploy the Content Server on a private network segment reachable only via VPN or authenticated tunnel.
bash
# Example nginx rule to block the vulnerable endpoint until patched
location ~ ^/book-update-annotations/ {
    return 403;
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.