Postizに任意ファイル読み取りの欠陥、2.25.2で修正
SNS投稿管理ツールPostiz(postiz-app)の2.23.0以上2.25.2未満に、ログインした一般ユーザーがサーバー内のファイルを読み出したり、バックエンドを停止させたりできる欠陥が見つかりました。初期設定では誰でもアカウントを作れるため、インターネットに公開している環境は特に影響を受けます。2.25.2へ更新し、公開していた期間が長い場合は秘密情報の入れ替えも検討してください。
急ぎ度: 至急
深刻度は最高クラスのCVSS 9.9で、初期設定のままなら外部の人が自分でアカウントを作って試せ、修正版もすでに出ているためです。
関係があるか
自社でPostizを運用し、Webからアクセスできる状態にしている組織が対象です。自己登録が有効なままの環境は、既存アカウントがない外部の人にも突かれる可能性があります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| postiz-app(GitroomHQ) | 2.23.0 以上 2.25.2 未満 | 2.25.2 |
確かめ方
- 1運用中のPostizの版を確認します。管理画面や、コンテナで動かしている場合はイメージのタグから分かります。2.23.0以上2.25.2未満なら対象です。
- 22.23.0より前の版は、この告知では影響範囲に含まれていません。ただし、古い版のまま使い続けてよいという意味ではありません。
- 3インターネットから到達できるか、ユーザー登録画面から誰でもアカウントを作れる状態かを確認します。
- 4利用者の一覧を見て、心当たりのないアカウントや、見覚えのない連携チャンネルがないかを確認します。
何が起きたか
Postizは、ログインしたユーザーが自分の連携チャンネルに対して、バックエンドに特定の処理を実行させられる作りになっています。ところが、どの処理を呼び出してよいかの制限がありませんでした。そのため、Webの画面からは使われないはずの内部用の処理まで、ユーザーが呼び出せました。
その内部処理の一つは、サーバーのディスク上のファイルを読みます。保存されているトークンがファイルのパスになっているチャンネルを登録すると、バックエンドが読める任意のファイルの内容を返してしまいます。環境変数を含むファイルも読めるため、ログインセッションの署名に使う秘密の値、データベースの接続先、連携している外部サービスの認証情報が漏れるおそれがあります。
もう一つの内部処理は、1回のリクエストでバックエンドのプロセスを終了させます。サービス停止につながります。
弱点の種類は、外部から指定された名前で処理を呼び出してしまう問題(CWE-470)と、外部から指定された資源の場所を制限しない問題(CWE-73)です。自己登録が初期設定で開いているため、既存のアカウントや他の利用者の操作は不要です。
攻撃の流れ
-
1
アカウント作成
自己登録が開いている環境では、外部の人が自分でアカウントを作ります。
-
2
細工した連携
保存されたトークンがファイルのパスになっているチャンネルを登録します。
-
3
内部処理の呼出
呼び出せる処理に制限がないため、内部用の処理を指定してバックエンドに実行させます。
-
4
秘密情報の流出
環境変数の内容などが返され、セッション署名用の秘密やDB・外部サービスの認証情報が漏れます。
-
5
停止も可能
別の内部処理を呼ぶと、1回のリクエストでバックエンドが終了します。
どう悪用されるか
悪用にはログイン済みのアカウントが必要ですが、権限は一般ユーザーで足ります。ネットワーク経由で実行でき、複雑な条件や他の利用者の操作は要りません。自己登録が有効なままなら、アカウントを持たない外部の人でも自分で用意できます。
被害は二つあります。一つ目は、サーバー上の読めるファイルの内容が漏れることです。環境変数の内容が読まれると、セッション署名用の秘密を使って他人としてログインされたり、データベースや連携中のSNSなどの外部サービスに不正アクセスされたりするおそれがあります。二つ目は、バックエンドを1回のリクエストで落とされ、サービスが止まることです。
実際の攻撃での悪用が確認されているかどうかは、現時点で公表されていません。悪用の見込みを示す指標も、ここでは示されていません。ただし、攻撃に必要な条件が少なく、修正内容も公開されています。悪用が確認されていないことを、対応を急がない理由にはしないでください。
今すぐやること
-
1
2.25.2へ更新する
2.23.0以上2.25.2未満を使っている場合は、修正版の2.25.2へ更新します。更新後に、実際に動いている版が2.25.2になっているかを確認してください。
docker ps --format '{{.Names}} {{.Image}}' -
2
更新が済むまで公開範囲を絞る
すぐに更新できない場合は、VPNや接続元IPの制限を使って、信頼できる人だけがアクセスできる状態にします。
-
3
利用者と連携チャンネルを点検する
心当たりのないアカウント、最近作られた不審なチャンネル連携、バックエンドの不自然な再起動がないかを確認します。
-
4
漏れた可能性のある秘密を入れ替える
更新前の版を外部に公開していた場合、環境変数にある値は読まれた可能性があるものとして扱います。セッション署名用の秘密、データベースの認証情報、連携している外部サービスのキーやトークンを順に再発行してください。セッション署名用の秘密を変えると、既存のログインは無効になります。
-
5
自己登録の運用を見直す
社内利用だけなら、自己登録を閉じられるか公式の資料で確認し、必要な人だけにアカウントを発行する運用にします。
すぐ更新できないとき
修正版を当てるまでの暫定策として、アクセス元をVPNや社内ネットワーク、IPアドレスで制限し、自己登録を閉じられる場合は閉じます。ただし、すでにあるアカウントの持ち主は同じ操作ができるため、根本的な解決にはなりません。回避策だけで済ませず、2.25.2への更新を進めてください。バックエンドが落とされた場合に備えて、自動で再起動する設定にしておくと停止時間を短くできます。
背景
Postizは、複数のSNSアカウントへの投稿を予約・管理するオープンソースのツールで、自社のサーバーに設置して使えます。各SNSとつなぐための認証トークンを保存し、バックエンドが利用者に代わって投稿するため、社内では広報やマーケティングの担当が使うことが多く、侵害されると企業の公式アカウントに影響が及びます。
呼び出す処理の名前を利用者の入力でそのまま決める作りは、意図しない内部処理まで呼べてしまう弱点として、以前から知られています。また、サーバー上の環境変数やファイルから秘密情報が漏れると、そこから別のシステムへの侵入に発展しやすいことも広く知られています。今回は、この二つが重なっている点が深刻度を押し上げています。
よくある質問
Q.自己登録を閉じれば安全ですか。
Q.更新したら、秘密情報の入れ替えは不要ですか。
Q.すでに攻撃を受けたかどうかは分かりますか。
まだ分かっていないこと
- 実際の攻撃で悪用されたかどうかは、現時点で公表されていません。
- Postizの提供元が運営するクラウド版が影響を受けたかどうかや、その対応状況は明らかになっていません。詳細は提供元の告知で確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| GitroomHQ | postiz-app |
2.23.0 以上 2.25.2 未満 |
2.25.2 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Postiz lets a signed-in user ask the backend to run a function on one of their connected channels. The backend did not restrict which functions can be requested, so a user could call internal helper functions that were never meant to be reachable from the web interface.
One of those helpers reads a file from the server's disk. A user who connects a channel whose stored token is a file path can have the backend return the contents of any file it can read, including its environment, which holds the secret used to sign login sessions, the database address and the credentials of connected services. Another helper makes the backend process exit with a single request. Self-registration is open by default, so no existing account and no action by another user is needed.
出典: CVE.org (CVE Program・cvelistV5) NVD