Part-DB、添付ファイル経由でコード実行の恐れ 2.12.1で修正
電子部品の在庫管理システム Part-DB で、ログインできる一般利用者が部品の添付ファイルを使い、サーバー上で任意のPHPコードを実行できる弱点が見つかりました。2.12.1 より前の版が対象で、Docker イメージも初期状態で該当します。社内や研究室で運用している場合は、2.12.1 以降への更新と、アップロード済みファイルの確認を進めてください。
急ぎ度: 早めに
CVSS 9.6の致命的な評価で、既定の一般利用者権限だけで悪用できますが、ログインが必要で、実際の攻撃での悪用は公表されていません。
関係があるか
Part-DBを自社や自組織のサーバー、Docker環境で運用していて、複数の利用者にアカウントを配っている組織が対象です。ApacheとPHP-FPMの同梱設定で動かしている場合は特に該当します。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Part-DB-server | 2.12.1より前の版(影響を受ける最も古い版は公表されていません) | 2.12.1 |
| Part-DB の Docker イメージ | 2.12.1より前の版は初期状態で該当 | 2.12.1を含むイメージ |
確かめ方
- 1Part-DBの導入方法(Docker、手動導入など)と、現在動いている版を確認します。Dockerの場合は、使用しているイメージのタグを確認します。
- 2版が2.12.1より前であれば、該当するものとして扱ってください。
- 3Webサーバーの設定で、
.pharファイルがPHP-FPMに渡されるようになっているかを確認します。同梱のApache設定を使っている場合は、この状態です。 - 4ログインできるアカウントの数と持ち主を洗い出します。既定のusersグループのアカウントがあれば、攻撃の入口になり得ます。
何が起きたか
Part-DBは、電子部品の在庫を管理するオープンソースのシステムです。部品ごとにデータシートなどのファイルを添付できます。この添付機能に弱点があり、特定の種類のファイルを添付すると、サーバー側でプログラムとして実行されてしまいます。ログインしている一般利用者でも実行でき、管理者権限は必要ありません。
Part-DBには、危険な拡張子のファイルを安全な .txt に書き換える仕組みがあります。ところが、その一覧に phar が入っていませんでした。.phar はPHPの実行形式として扱えるファイルです。
公開設定の添付ファイル(既定)は、Webから直接見られる public/media/ に保存されます。同梱のApache設定は .phar をPHP-FPMに渡すため、そのファイルにアクセスするとPHPコードとして動きます。添付ファイルの種類ごとに設けられた拡張子の制限は、既定では空です。一般利用者でも制限のない添付ファイルの種類を作れるため、この制限は防御になりません。
実行されるのはWebサーバーの実行ユーザー(www-data)の権限です。公表では、Webサーバーの設定によって悪用できるかが変わるとされています。一方、Dockerイメージは初期状態で脆弱でした。2.12.1で修正されています。
攻撃の流れ
-
1
ログイン
既定のusersグループの一般利用者としてPart-DBにログインします。
-
2
添付の準備
制限のない添付ファイルの種類を作り、部品に添付できる状態にします。
-
3
不正ファイル保存
拡張子の書き換え対象から漏れたファイルが、公開ディレクトリにそのまま保存されます。
-
4
Webから呼び出し
保存されたファイルにアクセスすると、PHP-FPMがPHPコードとして実行します。
-
5
サーバー操作
Webサーバーの実行ユーザーの権限で、任意の処理が動きます。
どう悪用されるか
悪用にはログインが必要です。ただし、既定のusersグループの権限で足り、管理者権限や、別の利用者の操作は必要ありません。ネットワーク経由で攻撃でき、攻撃の難易度は低いと評価されています。Part-DBを社外から見える状態で公開していたり、アカウント登録を広く認めていたりすると、攻撃を受けやすくなります。
CVSSは9.6で、機密性と完全性への影響が高く、影響範囲が他に及ぶ(スコープの変更あり)と評価されています。被害としては、Part-DBのデータベース接続情報や設定ファイルの読み取り、登録データの改ざん、同じサーバーや同じネットワーク上の他のシステムへの足がかりにされることが考えられます。可用性への影響は評価に含まれていません。
実際の攻撃で悪用されたことが確認されたという公表は、現時点でありません。悪用される見込み(EPSS)の値も示されていません。
今すぐやること
-
1
2.12.1以降へ更新する
根本的な対策は、修正版の2.12.1以降に更新することです。Dockerで運用している場合は、2.12.1以降を含むイメージに入れ替えます。更新前にデータとファイルのバックアップを取ってください。
-
2
アップロード済みの `.phar` を確認する
公開ディレクトリに不審な
.pharファイルがないかを調べます。見つかった場合は、すぐに削除せず、調査のために退避して保存します。Dockerの場合は、コンテナ内または保存先のボリュームで実行してください。find public/media -iname '*.phar' -
3
不審な動きがなかったか調べる
Webサーバーのアクセスログで、
/media/以下の.pharへのアクセスがないか確認します。覚えのない添付ファイルの種類や、不審なアカウントが追加されていないかも見ます。痕跡があれば、DBの接続パスワードなど、サーバーに置いた秘密情報の変更を検討してください。 -
4
アカウントとアクセス元を見直す
使っていないアカウントを無効にし、Part-DBへのアクセスを社内ネットワークやVPNに限ります。更新までの間の被害を小さくできます。
すぐ更新できないとき
すぐに更新できない場合は、Webサーバーの設定で .phar をPHP-FPMに渡さないようにし、public/media/ 以下ではファイルをプログラムとして実行させない設定にします。あわせて、Part-DBへのアクセスを信頼できるネットワークに限り、アカウントを必要最小限にしてください。これらは暫定策です。設定の違いによって効果が変わるため、2.12.1以降への更新を優先してください。
背景
Part-DBは、電子部品の型番、在庫数、保管場所、データシートなどをまとめて管理するWebアプリケーションです。ものづくりの現場や研究室、開発部門で、複数人が共有して使われます。利用者がファイルを添付する機能が中心にあるため、社内のシステムであっても、アップロードの扱いが安全かどうかが問われます。
ファイルのアップロード機能の弱点は、Webアプリケーションで長く繰り返し問題になってきた種類のものです。危険な拡張子を「一覧に載せて禁止する」方式は、一覧に漏れが一つあるだけで防御が崩れます。対策としては、許可する種類だけを通す方式にすること、アップロード先でプログラムが実行されないようにすることが、一般に勧められています。
よくある質問
Q.管理者でなくても悪用できますか。
Q.社内ネットワークだけで使っていれば安全ですか。
Q.Dockerで使っている場合はどうすればよいですか。
.phar ファイルがないかも確認してください。まだ分かっていないこと
- 影響を受ける最も古い版は公表されていません。2.12.1より前としか示されていません。
- 実際の攻撃で悪用されたかどうか、悪用される見込み(EPSS)の値は公表されていません。最新の状況は、開発元のセキュリティ告知(GitHubのGHSA-w5m7-3xf7-6g7g)で確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| Part-DB | Part-DB-server | — | — |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Part-DB is an open source inventory management system for electronic components. Prior to version 2.12.1, the part attachment upload handler stores uploaded files under the web-served media directory using the client-supplied file extension, and its extension blocklist does not include phar. AttachmentSubmitHandler::renameBlacklistedExtensions() rewrites dangerous extensions (php, phtml, sh, cgi, py, js, html, htaccess, ...) to .txt, but phar is absent from the list, so a .phar file keeps its extension. Public attachments (the default) are written into public/media/, which is the Apache document root. The shipped Apache configuration routes .phar to PHP-FPM, so the stored file is executed as PHP on request. The per-attachment-type extension filter is empty by default and is not consulted by the upload handler in a way that blocks this, and a non-admin user in the default users group can create an attachment type with no filter and attach files to parts. Any authenticated user in the default users group uploads a .phar attachment to a part and fetches it under /media/, executing arbitrary PHP as the www-data web user. Ability to exploit depends on the webserver config, docker image contained the vulnerability by default. This issue has been patched in version 2.12.1.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- web github.com