200以上のセルフホストAIツールをテナント分離の観点でソースレビューしたところ、78個でデータ漏洩が見つかった
200以上のマルチテナントAI/SaaS製品のソースコードレビューにより、78製品でテナント間データ漏洩の脆弱性が確認された。脆弱性のパターンは、書き込み操作には権限チェックがあるが、隣接する読み取り操作にはないというもの。修正済み製品のリストと自己確認の方法も提供している。
200以上のセルフホストAIおよびマルチテナントSaaS製品のソースコードレビューを実施したセキュリティ研究者が、78の製品でクロステナントデータ漏洩の脆弱性を確認しました。この脆弱性のパターンは「未改修の読み取り兄弟」と呼ばれ、書き込みエンドポイントには認可チェックが存在する一方、隣接する読み取りエンドポイント(一覧表示、取得、検索)にはチェックが欠落しているというものです。これにより、あるテナントが別のテナントのデータを読み取り、場合によっては変更や削除を行うことが可能になります。
研究手法は2段階で構成されています。まず、200以上の製品のソースコードをスキャンし、書き込みに認可チェックがあり読み取りにないパターンを特定しました。次に、実際に脆弱性が疑われる製品について、Dockerを用いた自己ホスト型インスタンスを立ち上げ、2つのテナントを作成し、オープンソースツールSectum AIを使用してクロステナント攻撃を再現。成功した攻撃はRFC-3161タイムスタンプ付きの証拠パッケージとして保存され、90日間の協調開示プロセスを経てメンテナーに報告されました。
84の発見のうち31件がGitHub Security Advisoryとして公開されています。修正済みの製品は以下の通りです:SurfSense(保存されたOAuthトークンを使用したコネクタ再インデックス攻撃)、AnythingLLM(埋め込みウィジェットがデフォルトで匿名オリジンに露出)、Baserow(シーケンシャルIDによるワークスペース間フィールド値漏洩)、aideepin(ユーザー間でのRAGチャンクテキスト、埋め込みベクトル、ドキュメントテキストの読み取り)、Flagsmith(プロジェクト間での多変量フラグ値の読み取り)。残りの79件は修正がリリースされるまで非公開です。
さらに悪質な亜種として、認可チェックが実行されていても、実際のオブジェクトではなく提供されたパスを検証する場合があります。攻撃者は自分のワークスペースIDと被害者のオブジェクトIDを組み合わせて、チェックを通過しながら別のテナントのデータにアクセスできます。これにより、埋め込みベクトルの読み取り(元のテキストを部分的に再構築可能)や、保存されたOAuthトークンを使用したコネクタの再インデックスによるデータ流出が可能になります。
テストに合格した製品:Open WebUI、Langfuse、LibreChat、Outline、PraisonAI、Onyx、LangWatch、Khoj(最新リリース)。Flowise、Mem0、MaxKB、vLLMはオープンソース版ではマルチテナントではなく、クロステナントの漏洩表面はありませんが、自己ホスト時には注意が必要です。
AI開発者へのアドバイス:読み取りエンドポイントも書き込みと同様に認可すること、埋め込みベクトルとキャッシュキーをテナントデータとして扱うこと、自己ホスト環境では想定している隔離が実際に機能するか検証すること。Sectum AIはオープンソースで提供されており、自動的にマルチテナント隔離を検証し、監査可能な証拠パッケージを生成します。完全な開示リストはsectum.ai/researchで更新されています。