OpenHumanで外部DMから承認なしにコード実行、修正版あり
OpenHumanの0.57.13未満では、Yuanbao経由の外部DMをきっかけに、承認なしでJavaScriptやOSコマンドが実行されるおそれがあります。まず版を確認し、0.57.13以上へ更新してください。
同じ発表の脆弱性 2 件
- CVE-2026-54141 重大 9.0
- CVE-2026-54143 重大 9.8
急ぎ度: 早めに
CVSS v3は9.0で重大度はcriticalです。認証なしで外部から届くDMが入口になりますが、成立には複数の設定条件が重なる必要があり、修正版0.57.13が公開済みです。
関係があるか
Yuanbaoチャネルを設定してOpenHumanを常時起動している組織や個人が対象です。Supervised、Node有効、DM受け付けがopenという既定の設定のままだと、条件がそろいます。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| OpenHuman(デスクトップアプリ、Rustライブラリ) | 0.57.13より前。勧告では0.54.15で動作を確認し、0.57.2でも同じコード構造が残っていると確認しています。 | 0.57.13 |
確かめ方
- 1OpenHumanの版が0.57.13より前かどうかを確認します。Rustライブラリとして組み込んでいる場合は、ロックファイルの版を見ます。
- 2Yuanbaoチャネルにapp_keyとapp_secret、またはtokenが設定され、受信中になっていないかを確認します。
- 3Yuanbaoのdm_accessが既定のopenのままか、許可リストに不特定のUIDが入っていないかを確認します。
- 4自律度が既定のSupervisedで、Nodeが有効(enabled = true)になっているかを確認します。
何が起きたか
OpenHumanには、Yuanbaoチャネルに届いた外部からのDMをきっかけに、人の承認が必要なはずのnode_execが承認なしで実行されてしまうことがある脆弱性があります。実行されると、OpenHumanを動かしているユーザーの権限でJavaScriptとOSコマンドが動きます。
既定のSupervisedでは、Nodeが有効ならnode_execは書き込み操作として扱われ、承認を求める決まりです。ところがYuanbaoのDMは、対話的な承認の文脈(APPROVAL_CHAT_CONTEXT)を持たない汎用のチャネル要求に変換されます。ApprovalGateはこの文脈の欠落を非対話のターンと見なし、承認待ちを作らずに許可します。
勧告は、モデルがどれだけ賢いかの問題ではなく、最後の認可の境界が欠けていたことが原因だと説明しています。CWE-94とCWE-862に分類されています。
攻撃の流れ
-
1
外部DMの送信
接続されたYuanbaoボットにDMを送れる外部の人が、メッセージを送ります。
-
2
汎用要求へ変換
DMが、承認の文脈を持たない汎用のチャネル要求としてエージェントに渡ります。
-
3
承認を素通り
ApprovalGateが非対話のターンと見なし、承認待ちを作らずに許可します。
-
4
コード実行
モデルがnode_execを選ぶと、OpenHumanユーザーの権限でJavaScriptとOSコマンドが動きます。
どう悪用されるか
OpenHumanのアカウントは要りません。接続されたYuanbaoボットにDMを送れる外部の人なら、ネットワーク越しに入口へ届きます。OpenHumanの利用者が承認ボタンを押す操作も要りません。
ただし成立には条件が重なります。Yuanbaoチャネルが設定されて受信中であること、DMの受け付けが既定のopenのまま(または攻撃者のUIDが許可されている)であること、既定のSupervisedであること、Nodeが有効であること、モデルがnode_execを選ぶことです。最後の条件には、受け取った文面でモデルが誘導される場合も含まれます。勧告はこの不確かさをCVSSのAC:Hに反映したと書き、ツール呼び出しが出たあとの経路は安定して再現できるとも説明しています。
被害の評価は、機密性・完全性・可用性のすべてが高で、スコープの変更を伴います。OpenHumanが動く端末で、そのユーザーが触れるファイルや認証情報、ネットワークが影響範囲になります。
今すぐやること
-
1
OpenHumanの版を確認する
デスクトップアプリは版の表示を見ます。Rustライブラリとして組み込んでいる場合は、ロックファイルの記載で確認します。0.57.13より前なら対象です。
grep -A1 'name = "openhuman"' Cargo.lock -
2
0.57.13以上へ更新する
デスクトップアプリはGitHubのリリースv0.57.13以降に入れ替えます。ライブラリの場合は依存の版を上げてビルドし直し、配布済みの環境にも反映します。Yuanbaoを使っていない環境も、版をそろえておくと後の確認が楽です。
-
3
更新前の期間に不審な実行がないか調べる
Yuanbaoチャネルを開いていた期間について、OpenHumanのプロセスから起動されたNodeやOSコマンドの履歴、見覚えのない送信者からのDMを確認します。疑わしい実行が見つかれば、その端末でOpenHumanが使えた認証情報(app_key、app_secret、各種APIキーなど)を再発行します。
-
4
更新後もDMの受け付けを絞る
Yuanbaoを使い続けるなら、dm_accessをopenのままにせず、許可リストで相手を限る設定を検討します。受け付ける相手が減るほど、外から届く入口も減ります。
すぐ更新できないとき
すぐに更新できないときは、次のいずれかで成立条件を崩します。
- Yuanbaoチャネルを無効にして、受信を止める
- dm_accessをopenから、許可リスト制または受け付けない設定に変える
- 業務でNodeを使わないなら、Nodeを無効にする
どれも更新までのつなぎです。許可リストに入れた相手からのメッセージでは条件が成り立ちうるので、更新は予定どおり進めてください。
背景
OpenHumanは、デスクトップアプリとRustライブラリで提供されるオープンソースのエージェント基盤です。LLMにツールを持たせ、チャットで受けた依頼からコマンドの実行までを任せられます。こうした基盤では、危険なツールの前に人の承認を挟むのが最後の守りです。受け取った文章でモデルの出力を誘導するプロンプトインジェクションは広く知られており、モデルの判断だけでは止められないという前提で、承認の仕組みが置かれます。
今回は、その承認の判定が「文脈がなければ自動化として許可する」という作りだったことが原因です。来訪者確認のある受付はあっても、受付係のいない通用口は素通りできた、という状況に近いものです。DMという外部の入口が、社内の自動処理と同じ扱いになっていました。
よくある質問
Q.Rustライブラリとして組み込んでいる場合も対象ですか。
Q.0.57.13にすると、DM経由のnode_execはどう扱われますか。
まだ分かっていないこと
- 修正の説明は、Yuanbao以外のチャネルや定期実行も同じ「文脈がなければ許可」の扱いだったと述べていますが、CVEの対象として明記されているのはYuanbaoのみです。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
OpenHuman is an open-source agent harness available as a desktop application and Rust library. Before 0.57.13, a remote direct message received through a configured Yuanbao channel is converted into a generic channel AgentTurnRequest that uses the default tool policy without establishing an interactive approval context. Under the default Supervised autonomy policy with Node enabled, node_exec is classified as a write operation that should prompt for approval, but ApprovalGate treats missing APPROVAL_CHAT_CONTEXT as a non-interactive turn and allows execution. Because Yuanbao direct messages are open by default, an external sender who can message the connected bot can influence the agent to execute JavaScript and operating-system commands as the OpenHuman user without an approval prompt. The issue requires a configured Yuanbao channel, the default approval-requiring policy state, Node availability, and successful model selection of node_exec. This issue is fixed in version 0.57.13.
出典: CVE.org (CVE Program・cvelistV5) NVD