PinePodsに重大なSSRF脆弱性、0.9.0で修正
セルフホスト型のポッドキャスト管理システムPinePodsに、ログインできる利用者がサーバー経由で内部ネットワークへ通信させられる脆弱性が見つかりました。0.9.0未満を使っているなら0.9.0へ更新し、新規登録の開放状況も見直してください。
急ぎ度: 早めに
CVSS v3は9.1で修正版0.9.0は公開済みですが、既定の設定で新規登録を開放していると、低権限のアカウントから内部サービスの情報に届くおそれがあるためです。
関係があるか
PinePodsを自前のサーバーやコンテナで動かしている組織や個人が対象です。とくに、インターネットから届く場所で新規登録を開放している環境や、クラウド上の仮想マシンで動かしている環境は影響が大きくなります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| PinePods | 0.9.0より前のすべての版 | 0.9.0 |
確かめ方
- 1PinePodsの稼働版を確認します。コンテナで動かしているなら、イメージのタグが0.9.0未満かどうかを見ます。
- 2新規登録(セルフサービスのサインアップ)が有効かどうか、サーバー側のエピソードダウンロードが有効のままかどうかを設定で確認します。ダウンロードは既定で有効です。
- 3PinePodsのサーバーから、社内のほかのサーバーや管理用サービス、クラウドのメタデータサービスへ通信できるかをネットワーク構成で確認します。通信できるなら、影響範囲が広がります。
何が起きたか
PinePodsに、ログイン済みの利用者がサーバーに任意のURLへアクセスさせ、返ってきた内容を取り出せる脆弱性(SSRF)があります。サーバー自身が届く内部のサービスやクラウドのメタデータの情報が、外から読まれるおそれがあります。
PinePodsは、購読したRSSフィードに書かれた音声ファイルのURL(enclosure URL)を、宛先のホストやIPアドレスを検査せずにそのまま保存します。エピソードのダウンロード時には、サーバーがそのURLへGETを送り、応答を保存して利用者が後から取得できるようにします。フィードの追加や更新のときには、再生時間を見積もるために同様のHEADも送ります。
さらに、リダイレクトを既定で追いかけます。そのため、最初は外部のURLに見えても、内部の宛先へ転送される形で検査をすり抜けます。
0.9.0では、この問題が修正されました。
攻撃の流れ
-
1
低権限で参加
新規登録または既存アカウントで、PinePodsにログインします。
-
2
不正なフィード登録
音声ファイルのURLに内部宛の転送先を仕込んだRSSフィードを、購読として登録します。
-
3
ダウンロード実行
そのエピソードのダウンロードを、サーバーに指示します。
-
4
内部へ通信
PinePodsのサーバーが、ループバックや社内ネットワーク、メタデータサービスへ通信します。
-
5
応答を回収
保存された応答を、ダウンロード済みのファイルとして取り出します。
どう悪用されるか
悪用にはPinePodsへのログインが必要ですが、権限は低いもので足ります。ネットワーク経由で実行でき、管理者など他の利用者の操作は要りません。サーバー側のダウンロードが有効(既定)であることも条件で、新規登録を開放していれば、アカウントを作れる第三者が条件を満たします。
悪用されると、PinePodsのサーバーから届く範囲の内部サービスを探られ、機密データを読まれるおそれがあります。クラウド上で動かしている場合は、メタデータサービスから認証情報が盗まれる可能性もあります。内部の宛先へ別の影響が及ぶため、CVSSでは範囲が変わる(スコープ変更)と評価されています。完全性と可用性への影響は低いとされています。
今すぐやること
-
1
稼働している版を確認する
PinePodsが0.9.0未満かどうかを確かめます。コンテナなら、使っているイメージのタグが分かります。
docker ps --format '{{.Names}} {{.Image}}' -
2
0.9.0へ更新する
修正版の0.9.0に更新します。更新の手順や注意点は、ベンダーのセキュリティ告知とリリースページで確認してください。
-
3
未更新だった期間の痕跡を調べる
PinePodsのサーバーから内部アドレスやメタデータのアドレスへ出た通信がないか、ネットワークやプロキシのログを見ます。ダウンロード済みのエピソードに、音声以外の内容が混じっていないかも確かめてください。
-
4
クラウド上なら認証情報を見直す
メタデータサービスに届く環境で未更新の期間があったなら、そこから得られる認証情報が使われていないかをクラウド側の監査ログで調べます。疑わしければ、認証情報を失効させて再発行します。
すぐ更新できないとき
すぐに更新できないときは、新規登録を止めて、信頼できないアカウントを削除または停止します。サーバー側のエピソードダウンロードを無効にすると、応答を取り出す経路は閉じます。ただし、フィード追加時のHEADは残るため、完全な対策にはなりません。あわせて、PinePodsのサーバーから内部ネットワークやメタデータのアドレスへの通信を、ファイアウォールやコンテナのネットワーク設定で遮断します。インターネットへの公開が不要なら、VPNなどの内側に下げます。
背景
PinePodsは、Rustで書かれたセルフホスト型のポッドキャスト管理システムです。購読の管理、エピソードのダウンロード、再生をブラウザーから行えるため、家庭や小さなチームが自前のサーバーに置き、複数の利用者で使うことがあります。
ポッドキャスト管理は、利用者が指定したフィードのURLや音声ファイルのURLをサーバーが取りに行くことが前提の機能です。取得先の検査が抜けると、サーバーが内部への踏み台になります。PinePodsは、取得したファイルを利用者が後から受け取る仕組みも備えているため、内部の応答がそのまま読まれる形になりました。
よくある質問
Q.社内ネットワークの中だけで使っていれば、気にしなくてよいですか。
Q.WAFなどの入口の防御で止められますか。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
PinePods is a complete, self-hosted podcast management system written in Rust. Prior to 0.9.0, an authenticated user can subscribe to an attacker-controlled RSS feed through POST /api/data/add_podcast in rust-api/src/handlers/podcasts.rs. get_podcast_values and add_episodes in rust-api/src/database.rs parse the feed with feed-rs and store the `` verbatim in Episodes.episodeurl without destination host/IP validation. POST /api/data/download_podcast invokes spawn_download_podcast_episode and download_episode_and_wait() in rust-api/src/services/tasks.rs, which sends a reqwest GET to the stored URL and saves and records the response in DownloadedEpisodes for later retrieval. The estimate_duration_from_audio_url_async() path in rust-api/src/database.rs also sends an unvalidated HEAD during feed add/refresh. Default redirect following permits an initially external enclosure URL to redirect to an internal target. A low-privilege user can make server-side GET/HEAD requests to reachable loopback, private-network and cloud metadata services and read downloaded internal responses, enabling internal-service enumeration, confidential-data disclosure and possible metadata credential theft. Episode downloading requires server downloads to be enabled, which is the default; self-service signup is supported. This issue is fixed in version 0.9.0.
出典: CVE.org (CVE Program・cvelistV5) NVD