{"id":"CVE-2026-57566","kind":"vulnerability","aliases":["CVE-2026-57566"],"related":[],"title":"Readest: unauthenticated OPDS proxy lets anyone fetch internal URLs","description":"Readest is a modern, feature-rich ebook reader designed for seamless cross-platform access and an intuitive reading experience. Prior to 0.11.10, the unauthenticated /api/opds/proxy route in apps/readest-app/src/app/api/opds/proxy/route.ts accepted an attacker-controlled URL and fetched it server-side without restricting the scheme, blocking private, loopback, link-local, or metadata hosts, or revalidating destinations during automatic redirect following. The route also accepted caller-controlled outbound headers and Authorization values and reflected the upstream status and response body. A remote attacker could use the service as an open request proxy and, on Node, Docker, or other self-hosted deployments with internal-network access, retrieve cloud metadata or internal-service responses. Cloudflare Workers deployments restrict access to link-local and private destinations, which reduces the internal-network impact there, but the unauthenticated public fetch-and-reflect behavior remains. This issue is fixed in version 0.11.10.","summary":"Readest, an ebook reader, exposes an unauthenticated /api/opds/proxy route that fetches attacker-supplied URLs on the server without scheme or destination checks. An attacker can use it as an open proxy to read cloud metadata or internal-service responses on self-hosted deployments.","severity":"critical","cvss":9.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cloudflare-workers","docker","node","package","readest","self-hosted"],"not_affected_if":["managed-hosting","version-0.11.10-or-later"],"how_to_check":"- Check the Readest version in the deployed app's package.json or release tag, e.g. `apps/readest-app/package.json`, and compare with `0.11.10`.\n- Confirm whether the deployment is self-hosted on Node or Docker rather than Cloudflare Workers, since the description says Workers restrict link-local and private destinations.\n- Check whether the route `/api/opds/proxy` is reachable from the internet.","fix":"- Readest: upgrade to `0.11.10`","status":"open","published_at":"2026-11-04T22:18:06+00:00","first_seen_at":"2026-11-04T23:08:49+00:00","triaged_at":"2026-11-04T23:09:39+00:00","updated_at":"2026-11-04T23:09:39+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-04T23:09:39Z","model":"claude-haiku-5-5","output":{"fix":"- Readest: upgrade to `0.11.10`","reach":"internet","title":"Readest: unauthenticated OPDS proxy lets anyone fetch internal URLs","impact":"high","summary":"Readest, an ebook reader, exposes an unauthenticated /api/opds/proxy route that fetches attacker-supplied URLs on the server without scheme or destination checks. An attacker can use it as an open proxy to read cloud metadata or internal-service responses on self-hosted deployments.","audience":"businesses","category":"package","nicknames":[],"who_cares":["readest","self-hosted","docker","node","cloudflare-workers"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"Internal services and cloud metadata are readable via the server","analyst_note":"","how_to_check":"- Check the Readest version in the deployed app's package.json or release tag, e.g. `apps/readest-app/package.json`, and compare with `0.11.10`.\n- Confirm whether the deployment is self-hosted on Node or Docker rather than Cloudflare Workers, since the description says Workers restrict link-local and private destinations.\n- Check whether the route `/api/opds/proxy` is reachable from the internet.","plain_action":"","needs_analyst":false,"not_affected_if":["managed-hosting","version-0.11.10-or-later"],"who_is_affected":"Self-hosted Readest deployments on Node, Docker or other servers with internal-network access are the main risk, since the proxy can reach internal hosts and cloud metadata endpoints. Cloudflare Workers deployments have link-local and private destinations restricted, which reduces internal impact, but the unauthenticated public fetch-and-reflect behavior still applies. Readest versions before 0.11.10 are affected.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.00078,"input_tokens":4509,"output_tokens":658,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-2026':11A,14A '-57566':12A,15A '/api/opds/proxy':33B,98C '0.11.10':95C,225C 'accept':102C,137C 'access':87C,180C,193C 'also':136C 'anyon':6A 'apps/readest-app/src/app/api/opds/proxy/route.ts':101C 'attack':38B,50B,105C,156C 'attacker-control':104C 'attacker-suppli':37B 'author':144C 'automat':131C 'behavior':217C 'block':118C 'bodi':153C 'caller':139C 'caller-control':138C 'check':48B 'cloud':60B,182C 'cloudflar':17B,189C 'cloudflare-work':16B 'control':106C,140C 'could':157C 'cross':85C 'cross-platform':84C 'cve':10A,13A 'deploy':71B,175C,191C 'design':81C 'destin':47B,129C,200C 'docker':19B,169C 'ebook':28B,79C 'experi':92C 'expos':30B 'featur':77C 'feature-rich':76C 'fetch':7A,36B,109C,214C 'fetch-and-reflect':213C 'fix':222C 'follow':133C 'header':142C 'host':25B,70B,126C,174C 'impact':207C 'intern':8A,64B,178C,186C,205C 'internal-network':177C,204C 'internal-servic':63B,185C 'intuit':90C 'issu':220C 'let':5A 'link':122C,196C 'link-loc':121C,195C 'local':123C,197C 'loopback':120C 'metadata':61B,125C,183C 'modern':75C 'network':179C,206C 'node':20B,168C 'opd':3A 'open':56B,163C 'outbound':141C 'packag':21B 'platform':86C 'prior':93C 'privat':119C,199C 'proxi':4A,57B,165C 'public':212C 'read':59B,91C 'reader':29B,80C 'readest':1A,22B,26B,72C 'redirect':132C 'reduc':202C 'reflect':147C,216C 'remain':218C 'remot':155C 'request':164C 'respons':66B,152C,188C 'restrict':115C,192C 'retriev':181C 'revalid':128C 'rich':78C 'rout':34B,99C,135C 'scheme':45B,117C 'seamless':83C 'self':24B,69B,173C 'self-host':23B,68B,172C 'server':43B,112C 'server-sid':111C 'servic':65B,160C,187C 'side':113C 'status':150C 'suppli':39B 'unauthent':2A,32B,97C,211C 'upstream':149C 'url':9A,40B,107C 'use':52B,158C 'valu':145C 'version':224C 'without':44B,114C 'worker':18B,190C","nicknames":[],"mitigations":[],"who_affected":"Self-hosted Readest deployments on Node, Docker or other servers with internal-network access are the main risk, since the proxy can reach internal hosts and cloud metadata endpoints. Cloudflare Workers deployments have link-local and private destinations restricted, which reduces internal impact, but the unauthenticated public fetch-and-reflect behavior still applies. Readest versions before 0.11.10 are affected.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["cloudflareworkers","critical","docker","node","package","readest","selfhosted"],"campaign_type":null,"first_public_at":"2026-10-15T04:56:28+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-57566","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-57566","severity":null,"published_at":"2026-11-04T22:18:06+00:00","modified_at":"2026-11-04T22:18:06+00:00","first_seen_at":"2026-11-04T23:08:49+00:00","fetched_at":"2026-11-04T23:08:49+00:00","note":null}],"documents":[{"id":71165,"url":"https://github.com/readest/readest/commit/495783d04516d05b2eb10f8f8bad297d436b36de","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":71166,"url":"https://github.com/readest/readest/releases/tag/v0.11.10","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":71174,"url":"https://github.com/readest/readest/security/advisories/GHSA-c7mm-g2j2-98cx","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-10-15T04:56:28+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"}],"exploit_sources":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}