Yuxiのサンドボックス分離不備、0.7.1で修正
Yuxiの0.6.0.beta1から0.7.1未満で、利用者のサンドボックスから他テナントの情報や内部サービスに届いてしまう脆弱性が公表されました。複数人で使っている組織は0.7.1に更新し、既定のままの認証情報も入れ替えてください。
急ぎ度: 早めに
CVSS v3は9.9で修正版の0.7.1が出ていますが、悪用が確認されたという記録はなく、更新後も既定の認証情報を別に入れ替える作業が残るためです。
関係があるか
Yuxiを自前でDockerにデプロイし、複数の利用者やチームにコマンド実行付きのサンドボックスを使わせている組織が対象です。利用者が自分だけの環境でも、該当する版であれば共有の内部サービスへ届く経路は残ります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Yuxi(大規模モデルを使った知識ベース・ナレッジグラフ向けのエージェント開発基盤) | 0.6.0.beta1から0.7.1未満 | 0.7.1 |
確かめ方
- 1運用しているYuxiの版を確認し、0.6.0.beta1以上0.7.1未満に当たるかを見ます。
- 2サンドボックス機能(コマンドを実行できる環境)を一般の利用者に開放しているかを確認します。
- 3PostgreSQL・Neo4j・MinIOの認証情報を、配布物や文書に載っている既定値のまま使っていないかを確認します。
- 4PostgreSQLの接続アカウントがスーパーユーザーかどうかも確認します。
何が起きたか
Yuxiで、コマンドを実行できるサンドボックスと、アプリケーション側の信頼された内部サービスとの分離が足りていませんでした。そのため、他のテナントのファイルや秘密情報の閲覧、サンドボックスの操作や削除、共有データの改ざんにつながるおそれがあります。
サンドボックスを管理するプロビジョナーは認証なしで呼び出せる状態でした。管理者・データベース・MinIOの認証情報を知らなくても、他人のサンドボックスの一覧取得、作成、削除ができます。
さらに、サンドボックスから共有の内部サービスにも届きます。配布された既定の認証情報が残っていれば、それが使われます。PostgreSQLの接続アカウントがスーパーユーザーなら、PostgreSQLのコンテナ内でコマンドを実行されます。
いずれの経路も、コンテナからの脱出やカーネルの脆弱性は必要としません。つまり、Dockerの境界が破られなくても、構成上の隙間だけで被害が出ます。
攻撃の流れ
-
1
サンドボックス内で実行
低い権限の認証済み利用者が、自分のサンドボックスでコマンドを実行します。
-
2
内部のAPIへ到達
分離が足りないため、他テナントのサンドボックスAPIや認証のないプロビジョナーに届きます。
-
3
他テナントの情報へ
他のテナントのファイルや秘密情報の閲覧、稼働中のサンドボックスでのコマンド実行が起こりえます。
-
4
共有サービスへ
既定の認証情報が残っていると、PostgreSQL・Neo4j・MinIOなどの共有サービスにも届きます。
-
5
改ざんと削除
テナントをまたぐデータの改ざんや、サンドボックス削除によるサービス停止につながります。
どう悪用されるか
悪用には、Yuxiにログインでき、自分のサンドボックスでコマンドを実行できる低権限のアカウントが要ります。ネットワーク経由で、特別な条件や他の利用者の操作は不要です。CVSSのベクターもこの前提と一致しており、影響が元のコンポーネントの外に及ぶ評価になっています。
被害は三つの方向に出ます。一つ目は他テナントのファイルや秘密情報の漏えいと、稼働中サンドボックスでのコマンド実行です。二つ目は、既定の認証情報が残る共有サービスの不正利用で、PostgreSQLがスーパーユーザー権限で動いていれば、そのコンテナでのコマンド実行まで進みます。三つ目はサンドボックスの削除による、サービス妨害です。
社内の限られた人だけが使う環境でも、利用者が増えるほど前提を満たすアカウントが増えます。外部の顧客やパートナーにアカウントを配っている場合は、とくに条件が揃いやすくなります。
今すぐやること
-
1
Yuxiを0.7.1に更新する
0.6.0.beta1から0.7.1未満を使っている環境は、修正版の0.7.1にそろえます。複数のデプロイがあれば、開発・検証用も洗い出して同じ版にします。
docker compose ps -
2
既定の認証情報を入れ替える
PostgreSQL・Neo4j・MinIOの認証情報が、配布物や文書に載っている既定値だったときは、更新とは別に変更します。Composeファイルを更新しても、すでに保存された認証情報は自動では変わりません。変更したら、それを使うアプリケーション側の設定も合わせます。
-
3
PostgreSQLの権限を見直す
Yuxiが使うPostgreSQLのアカウントがスーパーユーザーなら、必要な権限だけを持つアカウントに分けることを検討します。
-
4
サンドボックスの記録を調べる
身に覚えのないサンドボックスの作成や削除、他の利用者の領域へのアクセス、共有サービスへの不審な接続がないかを、ログとテナントごとのデータで確認します。見つかったときは、そのテナントに関わる秘密情報も入れ替えます。
-
5
ベンダーの告知を確認する
GitHubで公開されているYuxiのセキュリティアドバイザリで、影響する構成と更新時の注意を確かめます。
すぐ更新できないとき
更新までのつなぎとして、一般の利用者にサンドボックスのコマンド実行を開放している範囲を絞ります。あわせて既定の認証情報を先に入れ替え、可能であればサンドボックスから内部サービスへの通信をネットワーク側で制限してください。これらは被害の可能性を下げるだけで、脆弱性そのものは修正版に更新するまで残ります。
背景
Yuxiは、大規模言語モデルを使った知識ベースとナレッジグラフを扱うエージェントの開発基盤です。エージェントがコードやコマンドを動かせるよう、利用者ごとのDockerサンドボックスを用意します。その背後で、PostgreSQL・Neo4j・MinIOといった共有サービスが動く構成です。利用者が自由にコマンドを実行できる環境を、社内の信頼されたサービスと同じネットワークに置くので、サンドボックスをどこまで閉じ込められるかが安全性を左右します。
今回の脆弱性は、特定のコードの不具合というより、この閉じ込めの設計が足りなかった点にあります。コンテナの脱出が要らない代わりに、既定の認証情報が残っていることが被害を広げます。更新だけで済まず、認証情報の入れ替えが別の作業として必要になるのも、この構成に固有の事情です。
よくある質問
Q.利用者が自分しかいない環境でも、更新は必要ですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Yuxi is a large-model-based intelligent knowledge base and knowledge graph agent development platform. From 0.6.0.beta1 until 0.7.1, there is insufficient isolation between execution-capable Docker sandboxes and trusted application services. A low-privileged authenticated user who can execute commands in their own sandbox can reach other tenants' sandbox APIs, access their files and secrets, execute commands in active sandboxes, and enumerate, create, or delete sandboxes through the unauthenticated provisioner without knowing administrator, database, or MinIO credentials. Sandboxes can also reach shared internal services; if shipped default service credentials remain unchanged, an attacker can use them, and if the exposed PostgreSQL account is a superuser, obtain command execution in the PostgreSQL container. These paths can disclose or modify cross-tenant data and sandbox state or cause denial of service through sandbox deletion without a container escape or kernel vulnerability. This vulnerability is fixed in 0.7.1. Existing deployments must separately rotate persisted PostgreSQL, Neo4j, or MinIO credentials that were previously set to documented or shipped defaults because upgrading the Compose files does not automatically rotate them.
出典: CVE.org (CVE Program・cvelistV5) NVD