OpenClawのClaw ChainはAIエージェント侵害として見るべき脆弱性連鎖
目次
TL;DR
影響 OpenClaw 2026.4.21以前のOpenShell・MCPループバック・Gateway使用環境。CVE 4件のチェーンでデータ窃取・権限昇格・永続化(攻撃の足場を残す仕掛け)まで到達
対応 openclaw@2026.4.22 への更新
暫定 更新後も、OpenClawプロセスから読めた環境変数・ベアラートークン・APIキー・OAuthトークンを順にローテーション
OpenClawのClaw Chainは、単に「OpenShellにバグが4つあった」という話ではない。
AIエージェントが持つファイルアクセス、環境変数、MCPループバック、Gateway設定変更権限を、攻撃者が同じ実行経路でつなげる問題だ。
Cyeraは2026年5月15日、OpenClawで修正された4件の脆弱性をClaw Chainとして公開した。The Hacker Newsも、データ窃取、権限昇格、永続化(攻撃側が再侵入用の仕掛けを残すこと)まで進む攻撃チェーンとして報じている。
対象はOpenClaw 2026.4.21以前。修正は2026.4.22に入っている。
対応優先度
OpenClawを実行している環境では、これは通常のライブラリアップデートではなく、侵害調査を伴うセキュリティ対応になる。
| 項目 | 判断 |
|---|---|
| 対象 | openclaw <= 2026.4.21 |
| 修正 | openclaw >= 2026.4.22 |
| 優先度 | OpenShell、MCPループバック、Gatewayを使っている環境は高 |
| 攻撃開始点 | 悪意のあるプラグイン、prompt injection、汚染された外部入力、外部公開されたOpenClawサーバー |
| 主な影響 | 秘密情報の窃取、owner権限への昇格、Gateway設定変更、cron改ざん、永続化 |
| パッチ後の追加対応 | アクセストークン、APIキー、OAuth認証情報、ベアラートークンの棚卸しとローテーション |
openclaw@2026.4.22 へ上げても、過去に読まれた秘密情報は残る前提で扱う。
OpenClawプロセスから見える環境変数、設定ファイル、MCPベアラートークン、SaaS連携トークンは、更新とは別にローテーションする。
4件の脆弱性
Claw Chainに含まれるCVEは次の4件。
| CVE | GitHub Advisory | 問題 | 攻撃者が得るもの |
|---|---|---|---|
| CVE-2026-44112 | GHSA-wppj-c6mr-83jj | OpenShellの書き込みTOCTOU | mount root外への書き込み、設定改ざん、バックドア設置 |
| CVE-2026-44113 | GHSA-5h3g-6xhh-rg6p | OpenShellの読み取りTOCTOU | mount root外のファイル、認証情報、内部成果物の読み取り |
| CVE-2026-44115 | GHSA-x3h8-jrgh-p8jx | unquoted heredoc内のシェル展開 | 許可リスト済みコマンドに見せたまま環境変数やトークンを露出 |
| CVE-2026-44118 | GHSA-r6xh-pqhr-v4xh | MCPループバックのowner偽装 | 非ownerクライアントからowner専用操作へ昇格 |
CVE-2026-44112はCyeraの整理ではCVSS 9.6のCritical扱い。
GitHub Advisory上では各脆弱性ごとにHighまたはModerateのseverityが付くが、単体スコアだけを見ていると本筋を取り逃がす。今回の本筋は、読み取り、環境変数展開、権限昇格、書き込みが同じエージェントランタイム上で接続されることにある。
入口は外部公開サーバに限らない
CyeraはShodanで約65,000件、Zoomeyeで約180,000件の外部公開OpenClawサーバーが見つかると書いている。
この数字は検索条件に依存するので、そのまま実資産数とは見なせない。それでも、OpenClawが研究用の小さなツールではなく、外から見える形で広く動いていることは分かる。
ただし、この問題を「インターネットにOpenClawを出している人の話」だけと読むと、別の経路を見逃す。Claw Chainの入口は、ネットワーク公開よりも広い。
| 入口 | 例 |
|---|---|
| プラグイン | ClawHubや社内プラグインから入る悪意のあるコード |
| prompt injection | メール、チケット、チャット、Issue、Webページに混じる命令。外部入力でエージェントを誘導する攻撃 |
| 外部入力 | エージェントが読む外部ファイル、リポジトリ、ドキュメント |
| MCP | 開発者が試験的に入れたMCPサーバーやループバッククライアント |
| 社内公開 | Gatewayを社内ネットワークからだけ触れる構成 |
AIエージェントでは、外部入力は「読むだけのデータ」で止まらない。モデルがその内容を解釈し、ツールを呼び、ファイルを読み書きし、内部APIやMCPへ進む。
古典的なWebアプリよりも、プロンプト、プラグイン、リポジトリ、添付ファイル、チャット履歴が実行面に近い。
Claw Chainの流れ
攻撃チェーンを分解すると、こうなる。
flowchart TD
A["入口<br/>悪意のあるplugin / prompt injection / 汚染された外部入力"] --> B["OpenShell sandbox内で<br/>コード実行またはツール実行を誘導"]
B --> C["CVE-2026-44113<br/>mount root外の読み取り"]
B --> D["CVE-2026-44115<br/>heredoc内で環境変数展開"]
C --> E["秘密情報取得<br/>設定ファイル / bearer token / 内部成果物"]
D --> E
E --> F["CVE-2026-44118<br/>MCP loopbackでowner偽装"]
F --> G["owner権限<br/>Gateway設定 / cron / 実行環境管理"]
G --> H["CVE-2026-44112<br/>mount root外への書き込み"]
H --> I["永続化<br/>設定改ざん / バックドア / 次回agent動作の変更"]
style E fill:#7f1d1d,color:#fff
style I fill:#991b1b,color:#fff
入口はひとつでも、途中から複数の経路が並列に効く。
読み取りTOCTOUでファイルを読む。heredoc展開で環境変数を表に出す。得たベアラートークンや内部情報を使ってMCPループバックのowner境界を越える。最後に書き込みTOCTOUでGatewayや実行環境を変える。
各ステップはOpenClawの通常機能に近い。
ファイルを読む、コマンドを実行する、MCPを呼ぶ、cronを触る、設定を書く。どれもAIエージェント運用では珍しくない。攻撃検知でも「ツールを使ったか」より「そのツールが本来の境界を越えたか」のほうが手がかりになる。
OpenShellのTOCTOUは境界チェックの問題
CVE-2026-44112とCVE-2026-44113は、どちらもOpenShellのファイル境界をTOCTOUで崩す。
TOCTOUはTime-of-Check to Time-of-Useの略で、確認した時点と実際に使う時点の間に対象が差し替わる競合状態を指す。
今回のパターンは、ワークスペース内のパスがmount root内に見えるかを確認したあと、実際に読む、または書く瞬間にsymlinkで外側へ向けるものだ。
sequenceDiagram
participant Attacker as 攻撃者
participant Agent as OpenClaw/OpenShell
participant FS as ファイルシステム
Attacker->>FS: mount root内に安全そうなpathを用意
Agent->>FS: pathを検証
Attacker->>FS: 検証後にsymlinkを差し替え
Agent->>FS: 同じpathをread/write
FS-->>Agent: mount root外の対象へ到達
4月に書いたOpenClawのSSHサンドボックス脱出もsymlink境界の問題だった。
あちらはSSH同期時にsymlink検証が抜けていた。今回のClaw Chainでは、OpenShellの読み取り、書き込みの両方で、確認した対象と実際に開く対象がずれる。
OpenClaw 2026.4.22の修正は、パス文字列だけを見る処理から、開いたファイルディスクリプタや正規化後のターゲットをmount rootに対して検証する処理へ寄っている。
セキュリティ境界は「この文字列は安全そうか」ではなく「いま実際に開いた対象が境界内か」で判定する作りに変わった。
heredocは許可リストをすり抜ける実行時評価
CVE-2026-44115は、コマンド許可リストとシェル実行の間にある解釈差を突く。
OpenClawは実行してよいコマンドかを事前に解析する。しかしunquoted heredocのbody部分にシェル展開トークンが残ると、検証時の文字列と実行時の意味が変わる。heredocは、複数行の文字列をコマンドへ渡すシェル構文だ。
問題になるのは、たとえば次のような種類の展開だ。
cat <<EOF
$TOKEN
$(printenv)
EOF
許可リスト側が「catで固定文字列を書いているだけ」と見ても、シェルは実行時に $TOKEN や $(...) を評価する。
結果として、承認済みコマンドに見えるものが、環境変数や認証情報の露出経路になる。
この手の脆弱性は、AIエージェント基盤では特に重い。
エージェントはコマンド文字列を生成する。実行基盤はそれを検査する。シェルはさらに別の評価規則で実行する。3者の間で「何を実行するのか」の解釈が揃っていないと、許可リストが安全境界として機能しなくなる。
修正後は、heredoc bodyを追跡し、unquoted heredoc内の展開トークンや継続行のすり抜けを拒否する。
ここはLLM向けTool-use APIの記事で書いた「ツール境界を曖昧にしない」話と同じで、モデルが出した文字列ではなく、実行系が最終的に評価する内容を境界に置く必要がある。
MCPループバックはlocalhostでも権限境界になる
CVE-2026-44118は、MCPループバックランタイムのowner判定にある。
OpenClawはowner専用ツールの可否を示す senderIsOwner を使っていたが、その値を認証済みセッションから導出せず、クライアント側が指定できるメタデータとして扱っていた。有効なベアラートークンを持つ非ownerループバッククライアントが、自分をownerとして見せられる。
owner権限に上がると、Gateway設定、cronスケジューリング、実行環境の管理へ進める。
これは単なるローカル権限昇格ではない。エージェントランタイムの将来の動作を変えられるため、永続化の前段になる。
2026.4.22では、owner用と非owner用のベアラートークンを分け、senderIsOwner は認証に使われたトークンからだけ導出するように変わった。偽装可能なsender-owner headerは送信も信頼もしない、という修正だ。
MCPループバックの権限境界は、ローカル通信であること自体ではなく「誰の権限として扱うか」を認証結果から決める作りに依存している。
AIエージェントのプロセス内で一度コード実行やツール実行を取られると、ループバッククライアントは攻撃者にとって便利な内部APIになる。CursorのGit hooksサンドボックス脱出でも、ローカル開発環境の普通の仕組みが、エージェントの自律実行と組み合わさって境界を越えた。今回も同じ構造だ。
侵害された場合に取られるもの
Claw Chainでは、OpenClaw本体の設定以外も洗う。
OpenClawが見えるもの、OpenShellが触れるもの、MCPサーバーが代行できるもの、Gateway設定から到達できるものが対象になる。
| 資産 | 例 | 理由 |
|---|---|---|
| 環境変数 | APIキー、クラウドトークン、データベースURL、OAuthシークレット | heredoc展開やファイル読み取りで露出しやすい |
| ベアラートークン | MCPループバックトークン、Gatewayトークン | owner偽装や内部API操作に使われる |
| 設定ファイル | Gateway設定、cron、エージェント設定 | 書き込みTOCTOUで将来の実行を変えられる |
| ワークスペース | ソースコード、設計資料、内部ログ | 読み取りエスケープでmount root外まで広がる |
| SaaS連携 | Slack、GitHub、Google Drive、CRM | エージェント権限でデータ取得や操作が行われる |
| 会話履歴 | プロンプト、出力、添付ファイル | 企業情報や個人情報が混ざりやすい |
特に見落としやすいのは、AIエージェントの会話履歴と中間成果物だ。
セキュリティチームは本番DBやAWSキーには敏感でも、エージェントが作った一時ファイル、計画メモ、レビュー結果、プロンプトには目が届きにくい。Claw Chainでは、そうした作業ログも窃取対象になる。
検知で見るログ
パッチ適用だけで終わらせず、パッチ前期間のログを確認する。
確実なIoCが公開されているタイプではないので、検知は挙動ベースになる。
| 観点 | 見るもの |
|---|---|
| OpenShell file bridge | mount root外を指すシンボリックリンク、短時間に作成と差し替えが繰り返されるパス |
| 読み取り | /etc/、home配下のドットファイル、クレデンシャルストア、CI/CD設定、クラウド設定への不自然なアクセス |
| 書き込み | Gateway設定、cron、エージェント起動スクリプト、プラグインディレクトリ、MCP設定の変更 |
| exec | unquoted heredoc、$TOKEN、$(...)、printenv、env、cat <<EOF を含む実行 |
| MCPループバック | owner専用ツール呼び出し、cronスケジューリング、実行環境変更、sender/owner判定の不整合 |
| 出口通信 | エージェント実行直後の未知ドメイン、ペーストサイト、オブジェクトストレージ、Webhookへの通信 |
ログが十分に残っていない場合は、復旧判断を楽観しない。
OpenClawエージェントが読めたトークンは、読まれていない証明が難しい。これはnode-ipcの開発者シークレット窃取バックドアと同じで、侵入口を塞ぐことと鍵を無効化することは別作業になる。
対応手順
最低限の対応は openclaw@2026.4.22 への更新だが、セキュリティ対応としては次の順で進める。
24時間以内
package.json、ロックファイル、コンテナイメージ、グローバルインストールを確認し、openclaw <= 2026.4.21を残さない。- 外部公開しているOpenClawサーバーを洗い出し、認証、VPN、ファイアウォール、リバースプロキシの背後へ移す。
- OpenShell、MCPループバック、Gateway、プラグインの利用有無を確認する。
- OpenClawプロセスから読める環境変数、ベアラートークン、APIキーをローテーションする。
- Gateway設定、cron、実行環境、MCP設定の差分を確認する。
1週間以内
- エージェントごとに触れるSaaS、リポジトリ、ファイルシステム、シークレットの棚卸しを作る。
- OpenClawエージェントをサービスアカウントとして扱い、最小権限と期限付きトークンへ寄せる。
- プラグイン導入権限を制限し、ClawHubや社内プラグインのレビュー手順を作る。
- OpenShellのワークスペースでシンボリックリンクとmount root外参照を監視する。
- MCPサーバーを棚卸しし、owner操作を監査ログに出す。
- 出口通信制御を入れ、エージェントランタイムから未知の外部宛通信を検出する。
HITL(Human-in-the-loop、人間レビュー)は防御層になるが、heredoc展開やシンボリックリンクTOCTOUのように、見た目のコマンドと実際の効果がずれる場合、人間レビュー単体では境界になりにくい。
AIエージェント特有の問題
古典的なRCEなら、攻撃者がコマンドを実行できるかどうかを見る。
Claw Chainでは、それだけだと取り逃がす。OpenClaw自身が、もともとコマンド実行、ファイル操作、MCP呼び出し、SaaS連携を行うために存在しているからだ。
攻撃者は、OpenClawの外側から無理やり奇妙な挙動をさせるのではなく、OpenClawが普段使う正規の能力を奪う。
Cyeraが指摘している通り、攻撃者はエージェント自身の権限を使って、データアクセス、権限昇格、永続化へ進む。このとき各ステップは「エージェントが仕事をしている」ように見える。
この構造は、AIエージェント基盤をセキュリティ製品やSIEMにどう見せるかという問題にもつながる。
プロセス名がOpenClawで、通信先がlocalhostで、ファイル操作がワークスペース内から始まっていても、それだけでは安全側に倒せない。エージェントID、ツール境界、データ境界、owner操作を紐づけて監査する必要がある。
かなチャット設計への示唆
かなチャット v3では、OpenClaw的な自前サンドボックス路線をトーンダウンして、Claude CodeやCodexの正規CLIをtmuxブリッジで叩く構成に絞り、用途もブログ運用パイプラインに振り切った。独自のOpenShell、独自のファイル同期、独自のMCP owner判定は持っていない。自由度は下がるが、今回のClaw Chainのように、サンドボックス境界の差し替え競合やowner判定で事故る面は最初から減らしてある。
そもそもv3に至るまでに、Claude CodeやCodexが外部からCLIを操作するための公式I/Oを出してきたので、tmuxラッパーを自前で増築する動機自体が薄れている。OpenClaw的に「全権委任で何でもやらせる」方向に伸ばさず、用途を絞って正規CLIに乗ったほうが、こういう境界バグの矢面に立つ機会も少なくて済む、というのが今のところの判断。
逆にOpenClawのようなエージェント基盤を本番で使うなら、便利さより先に次を設計に入れる。
| 境界 | 設計で見ること |
|---|---|
| ファイル | アプリケーション側のパス文字列検証だけに頼らない |
| シェル | シェルへ渡す前の文字列ではなく、シェルが評価する意味を検証する |
| owner権限 | クライアントが申告する値ではなく、認証済みトークンとサーバー側セッションから導出する |
| エージェントID | 人間ユーザーの代理ではなく、独立した特権IDとして扱う |
| 外部入力 | プロンプト、プラグイン、外部入力を実行に近い入力として監査する |
Claw ChainはOpenClaw固有のバグだが、AIエージェント基盤に共通する境界の薄さも同じ形で出る。エージェントにファイル、シェル、MCP、SaaS、スケジューラを触らせるなら、侵害時に何を読み、何を書き、どの権限へ昇格し、どう永続化できるかを、脅威モデルに先に入れておく。