
RufRoot:RufloのMCPブリッジへの認証なしのリクエスト1件で、コマンドが実行され、鍵が窃取され、AIメモリが汚染された
- OrcaNEWOrcaCyber: MiniMax M3.1 Flash Abliterated / Uncensored2026-10-29101 tok/s
- OrcaNEWOrcaCyber: GLM 5.3 Flash Abliterated / Uncensored2026-10-27$0.80 / $1.60 100万トークンあたり · 103 tok/s
- OrcaNEWOrcaCyber: Qwen3.8 Flash Next Abliterated / Uncensored2026-10-26$0.80 / $1.60 100万トークンあたり · 283 tok/s
- OrcaNEWOrcaCyber: MiMo V2.6 Flash Abliterated / Uncensored2026-10-26$0.80 / $1.60 100万トークンあたり · 93 tok/s
- MoonshotNEWMoonshotAI: Kimi K3.1 Pro2026-10-2446知能
- OrcaNEWOrcaCyber: DeepSeek V4.1 Flash Abliterated / Uncensored2026-10-23$0.80 / $1.60 100万トークンあたり · 107 tok/s
- minimaxNEWMiniMax: M3.1 Flash2026-10-1929知能
- OrcaNEWOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 100万トークンあたり · 70 tok/s
- deepseekNEWDeepSeek: DeepSeek V4.1 Flash 10172026-10-1733知能
- DeepSeekNEWDeepSeek: DeepSeek V4.1 Flash2026-10-1740知能
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 100万トークンあたり · 96 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2955知能
- anthropicAnthropic: Claude Sonnet 5.52026-09-2854知能
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 100万トークンあたり · 168 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2228知能
- OpenAIOpenAI: GPT-6 Sol2026-09-2248知能
- AnthropicAnthropic: Claude Opus 5.52026-09-2258知能
- xiaomiXiaomi: MiMo-V2.6-Flash2026-09-2127知能
- xiaomiXiaomi: MiMo-V2.6-Pro2026-09-2130知能
- xAIGrok 4.72026-09-2134知能
2026年6月30日、Noma LabsはRufloのメンテナーに、プロジェクト自体に対する実際に動作するエクスプロイトを渡した。Noma Securityの研究部門は、Ruflo — かつてClaude Flowとしてリリースされたオープンソースのエージェント・オーケストレーション・プラットフォーム — が、デフォルトのDocker ComposeデプロイでModel Context Protocolブリッジを3001番ポートにすべてのネットワークインターフェース上でバインドし、認証を一切要求していなかったことを発見していた。/mcpエンドポイントへの1回のHTTPリクエストだけで、コンテナ内でnodeユーザーとしてシェルコマンドを実行でき、そのシェルから攻撃者は、環境内のすべてのLLMプロバイダーAPIキーを読み取り、保存されているすべての会話をダンプし、被害者のキーに課金されるエージェント群を起動し、そしてAgentDB学習ストアに、そのインスタンスのすべてのユーザーに対してAIの回答を操り続ける命令を書き込むことができた。この欠陥はCVE-2026-59726で、RufRootと名付けられ、CVSS 10.0と評価され、3.16.3で24時間以内に修正された。我々が読んだどの情報源も、それが実際に悪用されたとは報告していない。この欠陥に関するアーカイブ自体の記録は、その情報源リストと信頼度評価とともに、AIインシデントアーカイブにあり、その周辺に記録された他のMCPおよびインフラストラクチャの項目の隣に位置している。
扉を開いたデフォルト
Noma Labsがエージェント・メタハーネスと呼ぶRufloは、最大100エージェントのスウォーム向けのセルフホスト型レイヤーで、Claude CodeとOpenAI Codex向けに構築され、長期メモリとツール呼び出し用の組み込みMCPサーバーを備えています。通常のセットアップはNomaが説明するもので、リポジトリをクローンし、LLM APIキーを追加し、docker compose up -dを実行するというものです。プロジェクトのデフォルトcomposeファイルは、ブリッジを0.0.0.0のポート3001にバインドし、同梱のMongoDBを27017のすべてのインターフェースにバインドし、Mongo認証は無効でした。その影響範囲は、展開環境周辺のファイアウォール、セキュリティグループ、ネットワークセグメンテーションに依存します。Noma自身の表現では、ネットワークから到達可能なインスタンスは認証なしで完全に悪用可能でした。
MCPブリッジは、HTTP経由で到着するJSON-RPCリクエストをRufloの内部ツールライブラリに対する呼び出しに変換するExpress.jsサーバーです。脆弱な行では、そのライブラリには233個のツールが含まれ、シェルアクセス、データベース操作、エージェント管理、メモリ保存をカバーしていました。Nomaの記事は、それが何を意味するかについて率直に述べています。「MCPブリッジは無作為な補助的デバッグインターフェースではありません。むしろ、Rufloの中枢神経系です。すべてのツール呼び出し、すべてのエージェントアクション、すべてのメモリ操作はMCPブリッジを通ります。」
認証レイヤーは単に弱いのではなく、存在していなかった。POST /mcp と POST /mcp/:group は MCP JSON-RPC プロトコルを実装し、受信した tools/call リクエストを内部の executeTool() 関数へ直接渡す。Ruflo はコマンドブロックリスト AUTOPILOT_BLOCKED_PATTERNS を確かに維持していた。これは危険なシェル操作を止めるためのものだったが、GitHub のアドバイザリは「autopilot フローでのみ有効化されていた。POST /mcp と POST /mcp/:group はそれをバイパスした」と明言している。したがって、ruflo__terminal_execute を名指しした認証なしの 1 回の呼び出しによって、トークン、セッション、事前のやり取りを必要とせず、コンテナの node ユーザー(アドバイザリでは uid 1000 と記載)として任意のコマンドが実行された。次に起きたことには権限昇格は不要だった。認証情報、エージェント API、メモリ ストア、データベースはいずれもそのシェルから到達可能だった。
8つのステップで見る連鎖
Noma Labsは8段階の概念実証を公開し、AWS EC2上のデフォルトのRufloデプロイメントに対して各段階をライブで確認した。実行と外部送信を検証するために、Burp Collaboratorへの帯域外コールバックを使用した。これらの段階は、理論上の脆弱性に積み重ねられた推測的な結果ではなく、実証された一連の手順であり、アドバイザリの修復セクションは、すでにその中にいる可能性のある運用担当者向けに書かれている。

偵察が最初に来るのは、ツール一覧がどの呼び出し元にも公開されているためです:tools/listは資格情報なしで233件のエントリすべてを返します。コマンド実行も同じエンドポイントから続き、Nomaの概念実証はレスポンスボディからの推測ではなく、帯域外コールバックでそれを確認しました。環境のステップこそが、ホストの侵害を請求とデータ損失の問題に変えるものです。composeファイルはプロバイダーのキーをコンテナに渡し、バックエンドプロセスは完全な環境を次のものを介して継承しました:{ ...process.env }、したがって1回のprintenvでそれらがダンプされました。その後、これらのキーによりruflo__swarm_initとruflo__agent_spawnが攻撃者制御のスワームを起動できるようになり、被害者のクォータとコンピュートを消費しました。
ステップ5は、侵入後も存続するものです。ruflo__agentdb_pattern-storeを使用して、Nomaは、その後に生成するすべてのデプロイスクリプトに攻撃者が制御するURLを埋め込むようAIに指示する、捏造されたSOC2コンプライアンスポリシーを仕込みました。AgentDBは、まさにこの種のパターンを永続化して、セッションをまたいでエージェントの動作が改善されるようにするために存在するため、注入されたエントリは、システムが設計どおりに動作するのと同じように振る舞いました。「将来の会話では攻撃者の影響を受けた出力が生成され、ユーザーにはそれを見抜く方法がありません」とNomaの報告書は述べています。この脆弱性を7月29日に報じたDark Readingは、この違いについて外部の専門家に意見を求めました。Viakooの副社長John Gallagherは、これを別種の問題だと呼びました。「これはソフトウェアの欠陥を悪用するものではなく、メモリポイズニングです」と。
残りの手順は典型的なポストエクスプロイテーションで、異例なほど容易に実行された。内部Dockerネットワーク上のMongoDBには認証がなかったため、攻撃者はクライアントを/tmpにインストールし、会話をダンプして外部へ送った。永続化は/app/beacon.jsを書き込み、require('./beacon.js')の行をindex.jsに追加し、PID 1を終了させることによって実現した。その後、Dockerの再起動ポリシーによってコンテナがビーコンを有効にした状態で復帰した。最後の手順はシェル履歴の消去だった。これらはすべて単一の未認証リクエストから続いたもので、デフォルトのデプロイメントではどの時点でもこの連鎖を止められなかった。
修正と、パッチが届かない領域
メンテナーはRuflo 3.16.3を6月30日の開示から24時間以内にリリースし、GitHubはGHSA-c4hm-4h84-2cf3のアドバイザリを2026年7月1日に公開しました。リポジトリでADR-166として追跡され、プルリクエスト2521でマージされたこの修正は、単にチェックを追加するのではなくデフォルトを変更します:
• MCPブリッジは127.0.0.1にバインドします。公開バインドにはMCP_AUTH_TOKENが必要で、トークンが存在しない場合、プロセスは起動時に致命的なメッセージを出力して終了します。
定時間比較を備えたBearerトークンミドルウェアが、ブリッジの手前に配置されています。
• terminal_executeはサーバー側でMCP_ENABLE_TERMINAL=trueの背後で制限されており、デフォルトでは無効で、その制限は/mcp、/mcp/:groupおよびオートパイロットフローでも同一に適用される — 開示されたチェーンがシェルに到達できるようにしていた、欠けていた環である。
• MongoDB では認証が必要で、コンテナを起動するには root パスワードが必要です。
• ブリッジコンテナは、tmpfs を併用した読み取り専用のルートファイルシステムで動作し、CORS 許可リストがワイルドカードに取って代わり、CI 回帰ロックが静的構成と実行時動作をカバーします。
そうした措置のいずれも、すでにAgentDBに書き込まれたエントリを削除しない。この勧告は、露出しているあらゆるインスタンスの運用者に対し、ポート3001と27017を直ちにファイアウォールで遮断し、プロバイダーキーをローテーションし、パターンストアを監査して、注入されたagentdb_pattern-storeエントリがないか確認して削除し、MongoDBの改ざんを監査し、クリーンなイメージからコンテナを再構築するよう指示している。その警告は異例なほど直接的なものだ。「パッチを適用した再デプロイだけでは、ポイズニングを元に戻すことは決してない」。Nomaの記事も同じ結論を導いている——パターンストアの監査は修復措置の一部であり、パッチはそうではない。
理由は不注意ではなく構造的なものだ。将来のモデル出力を形作るパターンストアには、正当に学習された指示と攻撃者が仕込んだ指示を区別する方法がない。どちらもパターンとして届き、システムはそれらを信頼するよう構築されている。このことは、ネットワーク上の脆弱性を、未知のバックログを抱えたデータ整合性の問題へと変える。そして運用者にとっての問題は、ポートに到達可能だったかどうかだけでなく、メモリが今何を保持しているかでもある。

何が確立されており、何が確立されていないのか
ここでの技術的記録は一次情報であり、一貫している。アドバイザリには、影響を受けるパッケージ(npm ruflo3.16.3未満)、修正版、正確なエンドポイント、コンテナユーザー、および2つのポートが示されている。メンテナーのリリースノートは同じ連鎖を説明しており、Nomaの解説記事は実証コード(PoC)の詳細を提供している。また、独立系メディア—The Hacker NewsとDark Readingは2026年7月29日、SecurityWeekは7月30日—は、矛盾する具体的事項を追加することなく同じメカニズムを報じている。Cloud Security Allianceの2026年8月5日付の調査ノートは一連の経緯を再記述し、同組織が以前に追跡していた未認証のMCPおよびエージェント・オーケストレーションの脆弱性と並べて位置づけている。アーカイブはこの記録を信頼度A、異論なしと評価し、画期的な記録としてマークしている。記録に対する重大度評価は高く、CVSSスコア自体とは区別される。
採点に関する詳細のうち一点は、正確に述べておく価値がある。二つの一次資料の記述が食い違っているためだ。GHSA-c4hm-4h84-2cf3 はCVSS 10.0を、ベクトルAV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H上で示している。最大値まで押し上げているのは、このスコープ変更である。同じ勧告の 3.16.3 リリースページ上のコピーは、このスコアを「CVSS 9.8 critical」と表現している。2026年10月30日に確認した National Vulnerability Database のレコードは、2026年7月9日に公開され、Deferredと記されているが、GitHub の 10.0 を二次的指標として掲載しており、NVD 自身が作成したスコアは持っていない。9.8 という記述についての説明は見つからず、本記事でもそれを解明してはいない。
導入実績を示す数字はさらに乏しい。Noma Labsは当時、このプロジェクトについて、GitHubのスター数が67,000超、ダウンロード数が約1,000万、アクティブユーザーが約100万人だと説明していた。Cloud Security Allianceが要約したところによると、The Hacker Newsは66,500超のスター数を挙げた。ダウンロード数とユーザー数はNoma自身によるもので、独立した検証は受けていない。2026年10月30日時点のリポジトリのスター数は80,198だった。これはプロジェクトの到達範囲を確認するものであり、露出の指標ではない。また、実際にネットワークから到達可能だったデプロイが何件あったかを公表した情報源はない。

確立されていない部分こそ、最も誇張されやすい部分だ。Nomaも、メンテナーも、私たちが読んだどの媒体も、この脆弱性が現実環境で悪用されたとは主張しておらず、アーカイブにはこの項目について実際の被害は記録されていない。NomaのPoCは、研究者がEC2上で管理していたデプロイに対して実行されたもので、デフォルトのインストールが何を許容するかを示すが、特定の本番インスタンスが何を被ったかを示すものではない。インターネットに公開されたRufloデプロイの数は公表されておらず、AgentDB監査の結果を公表した運用者もいない。したがって、影響を受ける母集団と、存在する汚染されたメモリの量はどちらも不明である。Cloud Security Allianceによる、露出したデプロイを完全侵害として扱うべきだという助言は、操作不要の悪用によって正当化されるリスク姿勢であり、侵害が発生した証拠ではない。
なぜアーカイブがそれを画期的なものと位置づけるのか
アーカイブの特筆すべきフラグは、単なる最大スコアより具体的な根拠に基づいている。人気のセルフホスト型サービスにおけるCVSS 10.0のリモートコード実行バグはよくある類型であり、ここでの修正は24時間以内に提供された。RufRootを際立たせるのは、そのエクスプロイトがAI自身の学習パイプラインで終結したことだ。そこでは、アップグレード、再デプロイ、ポート閉鎖という従来の対策を講じても、注入された命令がそのまま残り、依然として回答を形成している。Cloud Security Allianceの注記は、これを、LangGraphのチェックポイントチェーンや未認証のAutoGen Studioサーフェスを含むエージェントツーリング全体ですでに文書化していたパターンの事例研究として読み取っており、エージェントの行動を形成するために使われる永続メモリは、キャッシュではなく、完全性監視の下で機微なデータストアとして扱うべきだと主張している。
その捉え直しこそが実務的な要点です。この事案の目に見える痕跡は、パッチを適用した依存関係と公開された勧告です。目に見えない痕跡は、運用者のAgentDBに依然として含まれている可能性のあるパターンであり、正規に学習されたポリシーと植え込まれたポリシーを見分ける公開ツールやシグネチャは存在しません。到達可能なネットワークの背後でデフォルトのcomposeファイルを実行した組織にとって有用な対応は、Nomaと勧告の両方が示すとおりです。すなわち、鍵が読まれたと想定し、鍵をローテーションし、生成される回答を信頼する前にメモリを検査することです。
