Postizで任意ファイルが読まれる弱点、2.25.3で修正
投稿管理ツール Postiz(postiz-app)の 2.23.0 以上 2.25.3 未満に、一般の登録ユーザーがサーバー上の任意のファイルを外部に送らせられる弱点が見つかりました。初期設定では誰でも自己登録できるため、インターネットに公開している環境は特に影響を受けやすくなります。2.25.3 への更新を行い、更新までの間は公開範囲と登録設定を見直してください。
急ぎ度: 至急
実際の攻撃で悪用された情報は現時点で明らかになっていませんが、CVSS 9.6で、初期設定では未登録の人でもアカウントを作って攻撃に進めるためです。
関係があるか
Postizを自社で運用(セルフホスト)している組織が対象です。自己登録が有効なまま外部から到達できる環境では、外部の第三者が攻撃者になりえます。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| postiz-app(GitroomHQ) | 2.23.0以上、2.25.3未満 | 2.25.3 |
確かめ方
- 1Postizを運用している担当者に、現在動いているバージョンを確認します。管理画面の表示、デプロイ時に指定したイメージのタグ、ソースの取得元のタグやコミットのどれかで分かります。
- 2バージョンが2.23.0以上2.25.3未満であれば該当します。2.23.0より前の版が影響を受けるかどうかは、公表されている範囲では示されていません。
- 3インターネットからPostizに到達できるか、新規ユーザーの自己登録が有効かを確認します。両方に当てはまる場合は、優先して対応してください。
- 4ユーザー一覧に、心当たりのないアカウントが最近作られていないかを確認します。
何が起きたか
Postizは、SNSへの投稿を予約して自動で公開する管理ツールです。投稿に添付する画像や動画の場所(メディアパス)がウェブアドレスでない場合、Postizはそれをサーバー内のファイルとみなして読み込みます。このとき、そのファイルが決められたアップロード用フォルダの中にあるかどうかを確認していませんでした。そのため、登録ユーザーが細工したメディアパスを投稿に保存すると、公開処理を担う部分がサーバー上の任意のファイルを読み、攻撃者が管理するDiscordサーバーへ添付ファイルとして送ってしまいます。
同じ「フォルダの外も読めてしまう」問題は、ほかに2つの経路からも到達できます。1つはファイルが存在するかどうかを呼び出し側に教えてしまい、さらにバックエンドのメモリを使い果たさせることもできる経路です。もう1つは、主な経路と同じ形でファイルを届ける経路です。
弱点の種類は、パス・トラバーサル(CWE-22)と、入力が後続の処理にそのまま渡ってしまう問題(CWE-74)に分類されています。CVSS v3.1のベクターは AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N で、ネットワーク越しに、低い権限と簡単な条件で成立し、利用者の操作は不要です。Postizは初期設定で自己登録が開いているため、既存のアカウントを持たない人でも攻撃に必要な権限を得られます。
攻撃の流れ
-
1
アカウント作成
自己登録が開いている環境で、攻撃者が自分のアカウントを作ります。
-
2
細工した投稿
サーバー内のファイルを指すようなメディアパスを、投稿とともに保存します。
-
3
公開処理で読込
投稿の公開時に、Postizの処理がアップロード用フォルダの外にあるファイルまで読み込みます。
-
4
Discordへ送信
読み込まれたファイルが、攻撃者の管理するDiscordサーバーに添付として送られます。
どう悪用されるか
悪用に必要なのは、Postizにログインできるアカウントです。ただし自己登録が初期設定で有効なため、事実上は外部からPostizに到達できる人なら誰でも条件を満たします。管理者や他の利用者に何かを操作させる必要はありません。
成功すると、Postizを動かしているサーバー上で、アプリの権限で読めるファイルが外部に送られます。どのファイルが読まれるかは環境次第ですが、設定ファイルや認証情報が置かれている場合は、そこからさらに被害が広がるおそれがあります。また、ファイルの有無の確認とメモリ枯渇を起こせる経路があるため、サービスの停止につながる可能性もあります。
実際の攻撃で悪用されたという情報や、悪用される見込みを示す指標は、現時点で明らかになっていません。ただし、攻撃に必要な条件が少ない種類の弱点なので、未確認であることを安全の根拠にはできません。
今すぐやること
-
1
2.25.3へ更新する
修正版は2.25.3です。リリースページで内容を確認し、検証環境で動作を見たうえで本番に反映してください。コンテナで運用している場合は、イメージのタグが更新後の版になっているかも確認します。
-
2
公開範囲と自己登録を見直す
更新が済むまでは、PostizへのアクセスをVPNや許可したIPアドレスに限定します。自己登録を無効にする設定は、公式の文書で確認してください。登録が必要な運用の場合も、承認制などにして、見知らぬ人が入れない状態にします。
-
3
不審なアカウントと投稿を調べる
更新前の期間に作られた心当たりのないユーザーや、見慣れない形式のメディアパスを持つ投稿がないかを確認します。Postizに連携しているDiscordの設定や、外向きの通信ログも見直してください。
-
4
認証情報の入れ替えを検討する
更新前に外部へ公開していた環境で、不審な形跡が見つかった場合や確認しきれない場合は、サーバー上に置かれていたシークレットを失効・再発行することを検討してください。対象は、データベースの接続情報、各SNSの連携キー、アプリの署名用の鍵などです。
-
5
実行権限を絞る
Postizのプロセスやコンテナが読めるファイルを、必要最小限に絞ります。不要なシークレットや他のサービスのデータを同じ環境に置かないようにすると、今回のような弱点が出たときの被害を小さくできます。
すぐ更新できないとき
更新がすぐにできない場合は、PostizへのアクセスをVPNや社内ネットワーク、許可したIPアドレスに限定し、新規ユーザーの自己登録を無効にしてください。既存のユーザーも、信頼できる人だけに絞って棚卸しします。これらは被害を減らす措置であり、弱点そのものは残るため、2.25.3への更新までの暫定対応として扱ってください。
背景
Postizは、複数のSNSへの投稿を予約して一括で管理するオープンソースのツールで、自社のサーバーで運用する使い方ができます。広報やマーケティング部門が使うことが多く、各SNSのアカウント連携情報を保持するため、情報システム部門の管理が及びにくい一方で、重要な認証情報が集まりやすい性質があります。
ユーザーが指定したファイルの場所を検証せずにそのまま読み込んでしまう弱点は、パス・トラバーサルと呼ばれ、ウェブアプリケーションで以前から繰り返し問題になってきた種類のものです。対策の基本は、読み込む前に、最終的な場所が許可されたフォルダの中かどうかを確認することです。今回の問題では、それが投稿の公開処理を含む複数の経路で抜けていました。
よくある質問
Q.PostizをクラウドのSaaS版で使っています。対応は必要ですか。
Q.自己登録を閉じれば、更新しなくても安全ですか。
Q.すでに悪用されたかどうかは、どう調べればよいですか。
まだ分かっていないこと
- 実際の攻撃で悪用された事例があるかどうかは、現時点で明らかになっていません。
- 2.23.0より前の版が影響を受けるかどうかは、公表されている範囲では示されていません。確認が必要な場合は、ベンダーのリリース情報や公式のアドバイザリを参照してください。
- SaaS版の影響の有無は公表されていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| GitroomHQ | postiz-app |
2.23.0 以上 2.25.3 未満 |
2.25.3 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
When a post is published, Postiz treats a media path that is not a web address as a file on the server's disk, but it does not check that the file lies inside the upload directory. A registered user can store a crafted media path with a post, get it past the checks that normally restrict it, and have the publishing worker read an arbitrary file and send it as an attachment to a Discord server the user controls.
The same unconfined reads can be reached through two further routes. One tells the caller whether a file exists and can exhaust the backend's memory, the other delivers the file the same way as the main route. Self-registration is open by default, so the attacker needs no existing account.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory nvd.nist.gov
- advisory github.com
- web github.com
- web github.com
- web github.com
- web gadvisory.org
- web github.com