blueprintUEのDBがパスワードなしで開く脆弱性、修正版あり
blueprintUE Self-Hosted EditionのDocker Composeサンプルどおりに構築すると、MariaDBのrootがパスワードなしでネットワークから使える状態になります。該当する環境では4.3.7へ更新し、ポート3306の公開範囲とrootのパスワードを確認してください。
急ぎ度: 早めに
CVSS v3は9.8で認証も不要ですが、影響はComposeサンプルの設定で構築した環境に限られ、修正版4.3.7も出ているため、ポート3306に外から届く環境を先に洗い出して早めに対応する段階です。
関係があるか
blueprintUE Self-Hosted Editionを、リポジトリのdocker-examples配下にあるDocker Composeのサンプル設定をもとに自社サーバーや検証機で動かしている組織が対象です。サンプルをそのまま本番や社内共有環境に流用していると、当てはまる可能性が高くなります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| blueprintUE Self-Hosted Edition | 1.0.0以上4.3.7未満(4.3.6以前) | 4.3.7 |
確かめ方
- 1稼働中のblueprintUEが、docker-examples配下のcompose設定(docker-compose-smtp.ymlなど)とdatabase.envから作られたものか、構築した担当者に確認します。
- 2database.envにMYSQL_ALLOW_EMPTY_PASSWORD=yesの行が残っていないか調べます。
- 3composeファイルのMariaDBサービスに3306:3306のポート公開があるか、docker psでホスト側に3306が出ているかを確認します。
- 4Dockerホストのポート3306に、社内の別セグメントやインターネット側から届くかを、ネットワーク担当と一緒に確認します。
何が起きたか
blueprintUE Self-Hosted EditionのDocker Composeサンプルには、MariaDBのrootアカウントをパスワードなしで作り、そのデータベースをホストのネットワークに公開する設定が入っています。サンプルのまま構築すると、ポート3306に届く相手が誰でもrootとしてデータベースに入れます。
原因は2か所の設定です。database.envにMYSQL_ALLOW_EMPTY_PASSWORD=yesがあり、composeファイルのMariaDBサービスが3306:3306でポートを公開しています。さらに、MariaDBの公式Dockerイメージはrootの接続元をどのホストにも許す%で作るため、リモートからの接続が通ります。CWEの分類はCWE-258(設定ファイル内の空パスワード)です。
勧告によると、報告者は別の端末から実際にパスワードなしで接続でき、全データベースへの全権限と権限付与の権限を持つrootとして認証されることを確認しています。修正版は4.3.7です。
攻撃の流れ
-
1
3306が到達可能
サンプルのcomposeがMariaDBのポートをホストに公開しているため、ホストに届く相手から3306が見えます。
-
2
パスワードなし接続
rootのパスワードが空で、接続元の制限もないため、認証を通過します。
-
3
全DBの操作
ユーザーアカウントやブループリントを含む全データベースを読み、書き換え、削除できます。
-
4
権限の追加
データベースのアカウントを作ったり、権限を付与したりして、足場を残せます。
どう悪用されるか
認証は要りません。Dockerホストのポート3306にネットワーク経由で届けば足り、利用者の操作も不要です。攻撃の難しさは低く、サンプルの設定が残っていれば条件はそろいます。
悪用されると、rootの権限でデータベース全体を操作されます。ユーザーアカウントやブループリントなどの保存データを読み取られ、改変や削除をされるほか、データベースのアカウントを作られたり、ほかのアカウントに管理権限を与えられたりします。勧告は、MariaDBのインスタンスとその中のデータが完全に侵害されうると説明しています。
今すぐやること
-
1
ポート3306の公開状況を確認する
まず、稼働中のコンテナがホストのどのアドレスで3306を待ち受けているかを見ます。0.0.0.0など外向きのアドレスで公開されていれば、更新を待たずに、下の回避策で公開を止めることを優先してください。
docker ps --format "table {{.Names}}\t{{.Ports}}" -
2
database.envの設定を確認する
空パスワードを許す行が残っていないかを調べます。ファイルはcomposeファイルと同じ場所にあります。
grep -n "MYSQL_ALLOW_EMPTY_PASSWORD" database.env -
3
4.3.7へ更新し、サンプル設定を見直す
blueprintUE Self-Hosted Editionを修正版の4.3.7に更新し、composeファイルとdatabase.envも新しい版の内容に合わせて作り直します。自社で手を加えた設定がある場合は、空パスワードの許可とポート公開が残っていないかを差分で確かめます。
-
4
rootのパスワードを実際に設定する
MariaDBの公式イメージは、環境変数を最初の初期化のときに使います。すでに空のパスワードで初期化したデータベースは、設定ファイルを直しただけでは空のまま残る可能性があります。更新後は、rootに強いパスワードが設定されているか、rootの接続元がローカルに限られているかをデータベース側で確認してください。
-
5
公開されていた期間は侵害の跡を調べる
3306が外から届く状態だった期間があれば、データベースに身に覚えのないアカウントや権限がないか、データの改変や削除がないかを調べます。疑わしい点があれば、アプリ側で保存している資格情報の入れ替えも検討します。
すぐ更新できないとき
更新がすぐにできないときは、composeファイルのMariaDBサービスからports: の3306:3306を削除するか、127.0.0.1にだけ割り当てて、コンテナを作り直します。アプリのコンテナが同じComposeのネットワーク内からデータベースに接続しているなら、これで動作を保ったまま外部からの到達を止められます。あわせて、ホストのファイアウォールで3306への接続元を必要な相手に絞り、rootに強いパスワードを設定してください。
背景
blueprintUE Self-Hosted Editionは、ユーザーアカウントやブループリントを保存するWebアプリで、MariaDBをデータベースとして使います。リポジトリのdocker-examples配下にあるcomposeファイルは、アプリとデータベースを1台のホストでまとめて立ち上げるための手本です。手本の設定が検証用のつもりで書かれていても、そのまま社内の共有サーバーに置かれると、データベースのポートまで一緒に公開されます。
Dockerでポートを公開すると、Dockerが自前でネットワーク規則を追加するため、ホストのファイアウォール設定をすり抜けて外から届くことがあります。ufwなどで3306を塞いだつもりの環境でも、実際に届くかどうかは外側から確認する必要があります。サンプルの設定ファイルに空パスワードが残っていた今回の事例は、運用担当者が手を入れる前の初期状態が、そのまま攻撃面になるという構図です。
よくある質問
Q.社内ネットワークだけで使っている場合も更新が必要ですか。
Q.アプリの利用者にパスワード変更を案内する必要はありますか。
まだ分かっていないこと
- この脆弱性を狙った実際の攻撃が確認されているかは、勧告に書かれていません。
- 4.3.7への更新だけで、すでに空のパスワードで初期化された既存データベースのrootが保護されるかは、勧告に書かれていません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| blueprintueblueprintue-self-hosted-edition |
1.0.0 以上 4.3.7 未満→ 4.3.7 |
4.3.7 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
blueprintUE Self-Hosted Edition before 4.3.7 contains an insecure default configuration in its Docker Compose examples that sets MYSQL_ALLOW_EMPTY_PASSWORD=yes in database.env and publishes MariaDB on port 3306. Unauthenticated attackers reaching the Docker host on port 3306 can log in as root without a password to read, modify, or delete user accounts, blueprints, and all databases.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web github.com
- web github.com
- web github.com
- web github.com
- web github.com
- web github.com
- web vulncheck.com
- web nvd.nist.gov
- web github.com