DB-GPTの既定設定でMySQLが無防備に、修正版は未公表
DB-GPT 0.8.2 までの既定の docker-compose.yml は、MySQL の root パスワードを固定値にしたまま、3306 番ポートをすべてのネットワークインターフェースに公開します。到達できる相手は認証なしの手間だけで root として入れるため、既定の構成で動かしている組織は影響を受けます。まず 3306 番が外部から届かない状態かを確かめ、パスワードの変更と接続元の制限を行ってください。
急ぎ度: 至急
認証も利用者の操作も不要でネットワークから root 権限を得られ(CVSS 9.8)、固定パスワードが公開リポジトリの設定ファイルに書かれているため、3306 番に届く環境では待つ理由がありません。
関係があるか
DB-GPT 0.8.2 までの既定の docker-compose.yml を使って Docker 上に構築した環境が対象です。特に、3306 番ポートが社外やインターネット、または広い社内ネットワークから届く状態の環境が危険です。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| DB-GPT(既定の docker-compose.yml による構成) | 0.8.2 までの版 | 修正版の有無や版番号は公表されていません。ベンダーの告知で確認してください。 |
確かめ方
- 1DB-GPT を
docker-compose.ymlでそのまま起動していないか、構築担当者に確認します。起動していれば対象の可能性があります。 - 2使っている
docker-compose.ymlにMYSQL_ROOT_PASSWORDの固定値と、3306 番ポートの公開設定(3306:3306など)が残っていないか調べます。 - 3稼働中のコンテナで、3306 番がホストに公開されているか確認します。
0.0.0.0:3306と表示されれば、すべてのインターフェースで待ち受けています。 - 4ファイアウォールやクラウドのセキュリティグループで、3306 番に届く範囲を確認します。社外や無関係な社内セグメントから届くなら、すぐ遮断の対象です。
何が起きたか
DB-GPT の公式が配布する既定の docker-compose.yml に、MySQL の管理者(root)パスワードが固定値で書かれていることが分かりました。しかも、MySQL の待ち受けポートである 3306 番が、サーバーのすべてのネットワークインターフェースに公開される設定です。設定ファイルは公開リポジトリで誰でも読めるため、パスワードは事実上、誰でも知り得ます。この組み合わせにより、3306 番に届く相手は誰でも、管理者としてデータベースに入れてしまいます。
これは製品のプログラムの欠陥というより、既定の構成に起因する弱点です。分類は CWE-1392(既定の認証情報の使用)で、CVSS v3.1 は 9.8(重大)です。攻撃に必要な条件は、ネットワークから届くことだけです。
入れる相手は root@%、つまり任意の接続元からの root としてログインできます。この権限には FILE と SUPER が含まれます。FILE はデータベースサーバー上のファイル読み書きに関わる権限で、SUPER は管理用の強い操作に関わる権限です。データの閲覧や改ざんにとどまらず、サーバー自体への影響も考える必要があります。また、同じ dbgptnet ネットワークに参加する他のコンテナからも、同じ手段で入れる点に注意してください。
攻撃の流れ
-
1
既定構成で起動
既定の docker-compose.yml のまま DB-GPT を起動し、MySQL の 3306 番がすべてのインターフェースに公開されます。
-
2
ポートに到達
外部や社内の別端末、同じ dbgptnet 上のコンテナが 3306 番に届きます。
-
3
固定パスワード
公開されている固定の root パスワードで、認証を通過します。
-
4
管理者権限を取得
FILE や SUPER を含む root 権限で、データベースを完全に操作できる状態になります。
どう悪用されるか
悪用に必要な条件は、3306 番ポートまたは dbgptnet ネットワークに届くことだけです。事前のログインも、利用者に何かを操作させる必要もありません。攻撃の難易度は低く、固定パスワードが公開されているので、特別な技術がなくても成立する性質の弱点です。
成功した場合、DB-GPT が扱うデータベース内の情報の閲覧、改ざん、削除が可能になります。FILE と SUPER 権限があるため、データベースサーバー上のファイルや管理操作にも影響が及ぶ恐れがあります。DB-GPT に接続している他のデータ源の情報が MySQL 内に保存されている場合、その二次的な漏えいも考える必要があります。なお、実際の攻撃で悪用された事例があるかどうかは、現時点で明らかになっていません。
今すぐやること
-
1
3306 番を外部に公開しない
ファイアウォールやセキュリティグループで、3306 番への接続を必要な端末だけに絞ります。インターネットから届く状態なら、最優先で遮断してください。Docker の設定では、公開先を
127.0.0.1:3306:3306のようにホスト内に限定するか、不要なら公開自体をやめます。docker ps --format "table {{.Names}}\t{{.Ports}}" -
2
設定ファイルの該当箇所を確認する
使っている
docker-compose.ymlに、固定の root パスワードとポート公開の記述が残っていないか調べます。grep -n -E "MYSQL_ROOT_PASSWORD|3306" docker-compose.yml -
3
root パスワードを強いものに変更する
推測されにくい長いパスワードに変えます。値は設定ファイルに直書きせず、環境変数ファイルやシークレット管理の仕組みから渡してください。既にデータが保存されている環境では、設定ファイルを書き換えて再起動するだけではパスワードが変わらない場合があります。MySQL 側でも変更が必要です。
-
4
不審なアクセスの痕跡を調べる
3306 番が公開されていた期間があるなら、MySQL の接続ログやアカウント一覧、不審なデータ変更がないかを確認します。不審な形跡があれば、パスワード変更に加えて、データの漏えいを前提とした対応を検討します。
-
5
ベンダーの告知で修正状況を確認する
修正版や公式の対処方針が出ていないか、DB-GPT のリポジトリと、記載の参考情報を定期的に確認してください。
すぐ更新できないとき
修正版の情報がないため、設定による対処が中心になります。次のとおり対応してください。
- 3306 番の公開をやめるか、127.0.0.1 のみに限定する
- ファイアウォールで 3306 番への接続元を最小限に絞る
- root パスワードを推測されにくい値に変更し、既存データがある場合は MySQL 側でも変更する
- 同じ dbgptnet ネットワークに、関係のないコンテナを参加させない
背景
DB-GPT は、大規模言語モデルを使ってデータベースとやり取りするためのオープンソースのプロジェクトです。社内ではデータ分析や問い合わせの自動化に使われることがあり、その裏側では MySQL などのデータベースが、設定や会話の情報、場合によっては業務データを保持します。そのため、データベースが無防備だと、アプリケーションの手前の防御をすべて迂回されてしまいます。
配布物の設定例やサンプル構成に初期パスワードが書かれ、それが本番にそのまま使われてしまう問題は、データベースやコンテナ製品でこれまでも繰り返されてきました。データベースのポートがインターネットに公開された状態は、攻撃者が日常的に探している典型的な隙でもあります。試験用に作った環境が、そのまま公開されたまま残る例も珍しくありません。
よくある質問
Q.DB-GPT を使っていますが、自社の環境は対象ですか。
docker-compose.yml を使って構築していれば、対象の可能性があります。パスワードを変更し、3306 番を公開していなければ、影響は小さくなります。設定ファイルと稼働中のコンテナのポート公開状況を確認してください。Q.社内ネットワークだけで使っているので安全ですか。
dbgptnet 上の他のコンテナからも入れてしまいます。接続元を必要な範囲に絞ってください。Q.バージョンを上げれば解決しますか。
まだ分かっていないこと
- この弱点を解消した修正版があるかどうか、あればどの版かは公表されていません。
- 実際の攻撃で悪用された事例があるかどうかは、現時点で明らかになっていません。
- 0.8.2 より前のどの版から影響があるかは公表されていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
DB-GPT through 0.8.2 contains a hardcoded credentials vulnerability in its default docker-compose.yml that sets a static MYSQL_ROOT_PASSWORD and publishes port 3306 on all interfaces. Attackers reaching port 3306 or the shared dbgptnet network can authenticate as root@% to gain full database access including FILE and SUPER privileges.
出典: NIST National Vulnerability Database NVD GitHub Advisory
参照URL
- web github.com
- web lasso.security
- web vulncheck.com
- web nvd.nist.gov
- web github.com