Modern Frontend CVEs

対象CVE: CVE-2026-69255

[緊急解説] Flowiseの深刻なRCE脆弱性 (CVE-2026-69255) - Pyodide経由でRootシェル奪取!

AIチャットフロー構築ツールFlowiseにおいて、CSV AgentがPyodideを介してホストのNode.js環境でRoot権限のリモートコード実行を可能にする極めて深刻な脆弱性(CVE-2026-69255)が発見されました。

はじめに:Flowiseユーザーとフロントエンド開発者への緊急警告

近年、AIを活用したアプリケーション開発が急速に進む中、Low-code/No-codeツールであるFlowiseは、Node.jsベースでチャットフローを簡単に構築できることから、多くの開発者に利用されています。しかし、今回、FlowiseのCSV Agent機能に極めて深刻なリモートコード実行(RCE)の脆弱性(GHSA-vmv7-4m6c-3cg5 / CVE-2026-69255)が発見され、Root権限でのシェル奪取が検証されました。

この脆弱性はCVSS v3.1スコアで9.9 Criticalと評価されており、Flowiseを運用している開発者はもちろん、Node.js環境でPyodideなどのサンドボックス化された実行環境を扱っているフロントエンド寄りの開発者も、その詳細と対策を理解しておく必要があります。

脆弱性の詳細:JavaScriptからPython、そしてNode.jsへの道筋

この脆弱性の核心は、FlowiseのCSV Agent (`packages/components/nodes/agents/CSVAgent/CSVAgent.ts`) が、ユーザーがアップロードするCSVファイル(データURI形式)から抽出したbase64エンコード文字列の扱い方にあります。

具体的には、JavaScriptコード内で以下のような形でbase64文字列がPythonコードに直接挿入されます。

`base64_string = "${base64String}"`

ここで`base64String`が適切にサニタイズされていないため、攻撃者は `"` (ダブルクォーテーション) を含んだ悪意のある文字列を挿入することで、Pythonの文字列リテラルを脱出し、任意のPythonコードを埋め込むことが可能になります。これは、JavaScriptのテンプレートリテラル内での文字列挿入が、そのままPythonのコードコンテキストに影響を与える典型的なコードインジェクションです。

さらに危険なのは、このPythonコードがPyodide環境で実行される点です。PyodideはWebAssembly上でPythonを実行する強力なツールですが、`js`ブリッジという機能を提供し、PythonコードからホストのJavaScript/Node.js環境にアクセスするメカニズムを持っています。

攻撃者はこの`js`ブリッジを利用し、Pythonコード内で `js.globalThis.eval` を呼び出すことで、ホストのNode.jsプロセスで任意のJavaScriptコードを実行します。そして、Node.jsの機能を使って `process.mainModule.constructor._load('child_process')` のように `child_process` モジュールを動的にロードし、最終的に `.execSync('CMD')` でOSコマンドをRoot権限で実行することに成功しています。これは、ESM環境での `require` 制限をバイパスする巧妙な手法です。

なお、この攻撃には「ペイロードにカンマ`,`を含められない」という制約がありますが、検証済みペイロードはその制約を回避しています。

攻撃によって何が可能になるのか?

この脆弱性が悪用された場合、以下のような甚大な被害が発生する可能性があります。

<ul><li><b>Root権限でのリモートコード実行 (RCE):</b> Flowiseが動作するサーバー上で、最高権限(Root)でのシステムコマンド実行が可能です。これにより、サーバーの完全な制御が奪われます。</li><li><b>機密情報の窃取:</b> 環境変数に保存されたAPIキーやデータベース認証情報 (`FLOWISE_PASSWORD=admin123`など)、ファイルシステム上の任意のファイル(`/root/.flowise`、`/etc/hostname`など)が読み取られ、外部に漏洩する可能性があります。</li><li><b>サービス拒否 (DoS):</b> 悪意のある操作により、Flowiseプロセスや基盤となるNode.jsプロセスをクラッシュさせ、サービスを停止させることが可能です。</li><li><b>データ改ざん・破壊:</b> データベースやファイルシステムへの書き込みが可能になるため、Flowiseで構築されたチャットフローやAIモデル設定などが改ざん・破壊される恐れがあります。</li></ul>

フロントエンドエンジニアが知るべき教訓と対策

この脆弱性はサーバーサイドのFlowise環境で発生しますが、フロントエンド開発にも携わるエンジニアとして、以下の点に注目し、対策を講じる必要があります。

最も重要なのは、<b>Flowiseを直ちに最新の修正バージョンにアップデートすること</b>です。現時点で具体的な修正バージョンが公開されていませんが、公式のアナウンスを注視し、速やかに適用してください。

暫定的な対策としては、CSV Agent機能の利用を制限するか、外部からのファイルアップロード機能を無効化することも検討してください。

<ul><li><b>ユーザー入力の徹底的な検証とサニタイズ:</b> ファイルの内容、データURI、フォーム入力など、外部から受け取るデータは常に信頼せず、サーバーサイドで厳格な検証(正規表現マッチング、型チェックなど)とサニタイズ(特殊文字のエスケープなど)を行うことが不可欠です。本件では `base64String` の正規表現による検証や、文字列挿入ではなくPyodideのAPI(`pyodide.globals.set()`)を利用した安全なデータ受け渡しが対策として挙げられています。</li><li><b>サンドボックスの過信をしない:</b> Pyodideのようなサンドボックス環境やNodeVMのような仮想化環境も、完全ではありません。常にサンドボックスエスケープのリスクを考慮し、機密性の高い操作にはアクセスさせない設計を心がけましょう。</li><li><b>動的なコード実行の危険性:</b> `eval()` や `child_process.execSync()` のような動的にコードを実行する機能は、極めて危険であることを再認識し、必要最小限の利用に留めるべきです。やむを得ず利用する場合は、入力の完全な制御と実行権限の最小化を徹底してください。</li><li><b>依存ライブラリのセキュリティ監視:</b> 自分が直接書いたコードだけでなく、使用しているオープンソースライブラリやフレームワークの脆弱性情報(GitHub Advisory Databaseなど)を常にチェックし、迅速にアップデートすることが重要です。</li><li><b>AI支援ツールの活用と限界:</b> 今回の脆弱性発見にはAI(Claude Code)が寄与していますが、AIが見つけた脆弱性も最終的には人間の手による分析、検証、対策が必要です。</li></ul>

まとめ

FlowiseのCVE-2026-69255は、JavaScript、Python(Pyodide)、Node.jsという複数の技術スタックを跨いで攻撃が連鎖する、複雑かつ非常に危険なRCE脆弱性です。特にフロントエンドの技術者がサーバーサイドやインフラ寄りの脆弱性に無関心ではいられない時代であることを強く示唆しています。

Flowiseを利用している組織・開発者は、一刻も早く情報収集と対応を行い、そうでない場合も、本脆弱性から得られる教訓を活かして、自身の開発プロセスにおけるセキュリティ意識と対策を一層強化してください。

← ブログ一覧に戻る