本文へ移動
English version →
重大 9.3 急ぎ度: 早めに

Readestに認証不要のSSRF脆弱性、0.11.10で修正

電子書籍リーダーReadestのサーバー側に、認証なしで任意のURLを代理取得させられる脆弱性があり、自前で公開している組織が影響を受けます。0.11.10に更新し、更新前の/api/opds/proxyへのアクセスも確認してください。

CVE-2026-57566 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v3は9.3で認証も利用者の操作も要りませんが、影響を受けるのはReadestのサーバー側を自前で公開している環境に限られ、0.11.10という修正版がすでにあります。

関係があるか

Readestのサーバー側を、Node、Docker、Cloudflare Workersなどで自前運用し、インターネットから届く状態にしている組織や個人が対象です。社内ネットワークやクラウドのメタデータに届く環境ほど、影響が大きくなります。

製品影響を受ける版修正版
Readest(Node、Docker、その他のセルフホスト構成) 0.11.10より前 0.11.10
Readest(Cloudflare Workers構成) 0.11.10より前。リンクローカルやプライベート宛ての通信は制限されるため内部への影響は小さいものの、公開された代理取得の挙動は残る 0.11.10

確かめ方

  1. 1自組織でReadestのサーバー側を動かしているかを、情シスや開発担当に確認します。利用者として公式のアプリやサービスを使うだけなら、この確認は要りません。
  2. 2動かしている場合は、デプロイしているReadestの版が0.11.10より前かどうかを調べます。
  3. 3インターネット側から/api/opds/proxyに到達できるかを、リバースプロキシやファイアウォールの設定とアクセスログで確認します。

何が起きたか

Readestのサーバー側に、誰でも使える中継口がありました。外部から指定されたURLをサーバーが代わりに取得し、その結果をそのまま返してしまいます。

問題の経路は/api/opds/proxyです。0.11.10より前では、認証が要らず、取得先のスキームに制限がなく、プライベート、ループバック、リンクローカル、メタデータ用のアドレスも止めていませんでした。リダイレクトを自動で追う際にも、移動先を検め直していません。

さらにこの経路は、呼び出し側が指定した送信ヘッダーとAuthorizationの値を受け付け、取得先のステータスと本文を呼び出し側へ返します。0.11.10で修正されました。

攻撃の流れ

  1. 1

    公開口を見つける

    インターネットから/api/opds/proxyに届くReadestのサーバーを探す。

  2. 2

    取得先を指定する

    認証なしで、取得してほしいURLを指定した要求を送る。

  3. 3

    サーバーが代理取得

    Readestのサーバーが宛先を検証しないまま、指定先に要求を出す。

  4. 4

    応答が送り主へ戻る

    内部サービスやクラウドのメタデータの応答が、そのまま返される。

公開されている情報をもとにした流れの例です。

どう悪用されるか

ネットワーク越しに、認証なしで、利用者の操作も待たずに悪用できます。特別な条件も要らず、CVSSの評価でも攻撃の複雑さは低いとされています。

いちばん困るのは、Readestのサーバーが社内やクラウド内部への踏み台に使われることです。Node、Docker、その他のセルフホスト構成で内部ネットワークに届く場合、クラウドのメタデータや内部サービスの応答が外部の第三者に読まれます。メタデータに認証情報が含まれていれば、被害はReadestの外へ広がります。

また、送信ヘッダーとAuthorizationの値も指定されるため、Readestのサーバーを送信元にした外部への要求にも使われます。踏み台にされた場合、見かけ上の送信元は自組織のサーバーになります。

今すぐやること

  1. 1

    動かしている版を確認する

    ソースから動かしているなら、リポジトリやパッケージの版を調べます。コンテナーなら、実行中のイメージの版を確認します。

    grep '"version"' apps/readest-app/package.json
  2. 2

    0.11.10以降に更新する

    Readestを0.11.10以降にし、Dockerならイメージを作り直して入れ替えます。更新後に/api/opds/proxyへの外部要求が内部宛てに通らないことも確かめます。

  3. 3

    更新前のアクセスを調べる

    リバースプロキシやアプリのログで、/api/opds/proxyへの要求を洗い出します。見覚えのない取得先や、内部アドレス、メタデータ用アドレスが含まれていないかを見ます。

  4. 4

    ベンダーの告知を読む

    GitHub上のReadestのセキュリティアドバイザリで、影響する構成と修正内容の詳細を確認します。自組織の構成が当てはまるかの最終判断にも使えます。

すぐ更新できないとき

すぐに更新できないときは、リバースプロキシやWAFで/api/opds/proxyへの外部からのアクセスを遮断します。あわせて、Readestを動かすホストから内部ネットワークやメタデータ用アドレスへの通信を、出口側で制限します。経路を遮断すると、OPDSカタログを取得する機能は使えなくなる可能性があります。

背景

Readestは、複数のOSで同じ読書体験を提供する電子書籍リーダーです。問題の/api/opds/proxyは、外部のOPDSカタログ(電子書籍の配信先一覧)をサーバーが代わりに取得して返す経路で、本来は書籍カタログの閲覧を助けるための機能です。

サーバーが外部のURLを取りに行く機能は、取得先を絞らないと内部への入口になります。クラウド上のサーバーでは、同じ環境の内側からしか見えないメタデータサービスや社内サービスが、公開サーバーを経由して読まれかねません。今回はスキームの制限も、内部アドレスの遮断も、リダイレクト先の再検証も欠けていたため、CVSSの機密性への影響が高く評価されています。

よくある質問

Q.デスクトップ版やスマートフォン版のアプリも影響を受けますか。
A.公表されている問題は、サーバー側で動くapps/readest-app内のAPI経路です。アプリ版が同じ経路を使うかどうかは、ベンダーのセキュリティアドバイザリで確認してください。
Q.ログに不審な要求があった場合、何をすればよいですか。
A.クラウドのメタデータから取得できる認証情報や、内部サービスのトークンが読まれた可能性があります。該当するキーやトークンを失効させて入れ替え、そのサーバーに付与していた権限の利用履歴を調べてください。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

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.

出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく