Langchain-Chatchatに認証なしのコマンド実行、修正版は未確認
Langchain-Chatchat 0.3.1.3 以前では、認証なしで呼び出せる POST /tools/call から、サーバー上で任意のOSコマンドを実行されるおそれがあります。ネットワークから到達できるサーバーが対象で、同梱のDockerイメージではroot権限で実行されます。まず自社内の稼働状況を洗い出し、外部や広い社内ネットワークから届かないよう制限してください。修正版の有無は現時点で確認できていないため、開発元の告知を確認してください。
急ぎ度: 至急
認証なしで1回のリクエストからroot権限のコマンド実行に至る可能性があり、修正版の情報も確認できていないため、到達制限を先に行う必要があります。
関係があるか
Langchain-Chatchat を自社サーバーやコンテナで動かし、APIにネットワーク経由で到達できる組織が対象です。特にインターネットや広い社内ネットワークへ公開している環境は優先度が高くなります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Langchain-Chatchat | 0.3.1.3 以前 | 公表されていません。開発元のGitHubリポジトリの告知で確認してください |
| Langchain-Chatchat 同梱のDockerイメージ | 0.3.1.3 以前に基づくもの(サーバーがroot権限で動作) | 公表されていません |
確かめ方
- 1社内で Langchain-Chatchat を試用・運用している部門や担当者がいないか、まず聞き取ります。検証用や個人利用のサーバーも対象に含めます。
- 2稼働中のコンテナやプロセスを確認し、Langchain-Chatchat のイメージや環境が動いていないか調べます。
- 3導入されている版が 0.3.1.3 以前かを確認します。
- 4APIのポートが、インターネットや利用者以外のネットワークから到達可能になっていないか、ファイアウォールやリバースプロキシの設定で確かめます。
何が起きたか
社内の文書を使って質問に答えるAIチャットを自前で動かせるオープンソースの Langchain-Chatchat に、認証のない入口が見つかりました。この入口に特定の形式で要求を送るだけで、サーバーに命令を実行させられます。ログインも利用者の操作も必要ありません。
具体的には、0.3.1.3 以前のAPIサーバーが POST /tools/call というエンドポイントを持っています。これは登録済みのツールを名前で呼び出す機能ですが、呼び出し元の認証を確認していません。常に登録されている shell ツールもそのまま呼び出せるため、遠隔の第三者がサーバーを実行ユーザーの権限で操作できます。分類は CWE-306(重要な機能に対する認証の欠如)で、同梱のDockerイメージではroot権限です。
CVSS v3 のスコアは 9.8(クリティカル)です。実際の攻撃で悪用された事例は、現時点で公表されていません。ただし、問題のコード位置は公開された情報に示されており、仕組みは単純です。公開されているサーバーは、早く対処すべき状態にあります。
攻撃の流れ
-
1
到達できる
攻撃者が Langchain-Chatchat のAPIサーバーにネットワーク経由で接続できる状態です。
-
2
認証なしで要求
`/tools/call` に、呼び出すツールの名前を指定した要求を送ります。認証は求められません。
-
3
shellツール実行
常に登録されている `shell` ツールが呼び出され、OSコマンドが実行されます。
-
4
サーバーを掌握
実行ユーザー(同梱イメージではroot)の権限で、情報の窃取、改ざん、他の機器への踏み台化が可能になります。
どう悪用されるか
悪用の前提は、APIサーバーにネットワークから到達できることだけです。認証は要らず、利用者の操作も不要で、攻撃の難易度は低いとされています(CVSS の AC:L、PR:N、UI:N)。要求は1回で足りるとされています。
成功した場合、サーバー上で任意のコマンドが実行されます。そのため、保存されている文書や会話内容の読み取り、設定ファイルに置かれたAPIキーなどの認証情報の窃取、データの改ざん、不正プログラムの設置、同じネットワーク内の他の機器への侵入などに発展しえます。同梱のDockerイメージはroot権限で動くため、コンテナ内での影響は最大になります。コンテナの設定次第では、ホスト側へ影響が及ぶ可能性もあります。
今すぐやること
-
1
稼働中の Langchain-Chatchat を洗い出す
部門の検証環境や個人のサーバーも含め、動いているインスタンスと導入されている版を一覧にします。Dockerで動かしている場合は、イメージ名で絞り込めます。
docker ps --format '{{.Names}} {{.Image}}' -
2
ネットワークからの到達を制限する
インターネットや利用者以外のネットワークから、APIのポートに届かないようにします。ファイアウォールやセキュリティグループで、必要な接続元だけに絞ってください。修正版が確認できるまでの暫定策として、最も効果があります。
-
3
ログに不審な呼び出しがないか調べる
リバースプロキシやアプリケーションのアクセスログで、
/tools/callへの POST を確認します。外部の接続元や心当たりのない記録があれば、侵害された可能性を前提に調査します。ログのパスは環境に合わせて読み替えてください。grep 'POST /tools/call' /var/log/nginx/access.log -
4
開発元の告知を確認し、修正版があれば適用する
修正版の有無や緩和策は、現時点で明らかになっていません。開発元のGitHubリポジトリの更新や告知を定期的に確認し、公開され次第、検証したうえで適用します。
-
5
侵害の疑いがあれば認証情報を入れ替える
到達可能な状態で運用していた場合は、サーバーに置いていたAPIキーやパスワードなどの認証情報を、安全な環境から再発行して入れ替えます。サーバーは再構築も含めて検討します。
すぐ更新できないとき
修正版を当てられない間は、APIのポートを必要な利用者のネットワークだけに限定してください。あわせて、リバースプロキシなどで /tools/call へのリクエストを遮断する方法があります。ただしこれらは公式の緩和策ではなく、他の機能への影響を事前に確認する必要があります。また、コンテナを root 以外のユーザーで動かすと、被害の範囲を狭められる場合があります。
背景
Langchain-Chatchat は、LangChain をもとにした、社内文書などを使って質問に答えるAIチャットのオープンソースです。自社環境に置けるため、社外にデータを出したくない組織の検証や運用で使われます。社内の文書を扱うので、サーバーが乗っ取られると情報漏えいにつながります。
AIエージェントの機能には、モデルがツールを呼び出してOSコマンドやファイル操作を行うものがあります。こうした機能を認証なしで外部に公開すると、サーバーを直接操作される結果になりやすい点は、広く指摘されてきました。今回の問題も、重要な機能に認証がない典型的なパターンです。
よくある質問
Q.社内ネットワークだけで使っていますが、対応は必要ですか。
Q.すでに悪用されていますか。
Q.更新すれば直りますか。
まだ分かっていないこと
- 修正版の版番号と公開時期は、公表されていません。
- 実際の攻撃での悪用や、被害の報告があるかどうかは、現時点で明らかになっていません。
-
shellツールを設定で無効にできるかどうかは、公表されていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Langchain-Chatchat through 0.3.1.3 exposes a POST /tools/call API endpoint that invokes any registered tool by name without authentication, leaving the always-registered shell tool callable. Remote attackers can send a single request naming the shell tool to execute arbitrary OS commands as the server user (root in the shipped Docker image).
出典: NIST National Vulnerability Database NVD GitHub Advisory
参照URL
- web github.com
- web lasso.security
- web vulncheck.com
- web nvd.nist.gov
- web github.com