Node.jsサンドボックスの重大な欠陥、AIエージェントをホストコード実行のリスクにさらす

Node.jsのサンドボックス化ライブラリであるisolated-vmに存在する重大な脆弱性が、AIエージェントや自動化プラットフォーム、そして信頼できないJavaScriptを実行するアプリケーションに深刻なリスクをもたらしています。

GHSA-864f-rcv7-6rh4として追跡されているこの欠陥は型の取り違え(type confusion)に起因する問題で、サンドボックス内で動作するコードがホストプロセスをクラッシュさせたり、最悪の場合は乗っ取ったりすることを可能にする恐れがあります。

Cris Staicu氏によれば、影響を受けるこのパッケージは週に100万回以上ダウンロードされており、ユーザー入力やAIモデルが生成したコードを隔離する必要がある開発者の間で広く利用されているといいます。

修正版はすでに公開されていますが、旧バージョンを利用している組織は、これを緊急のパッチ適用課題として扱うべきです。この脆弱性は、シリアライズされた値を別々のV8アイソレート間で移動させる機能であるExternalCopyに存在します。

アイソレートは本来、強力な境界を提供します。独自のヒープ、組み込み関数、オブジェクトグラフを持つため、アプリケーションが意図的に権限を付与しない限り、サンドボックス化されたコードはホストのリソースにアクセスできません。

ExternalCopyには、基盤となるメモリをコピーせずにArrayBufferを移動させるためのtransferListというオプションが用意されています。しかし処理の過程で、isolated-vmは転送リストのエントリを1回目のパスで検証し、2回目のパスで転送を行うという構造になっていました。

攻撃者はJavaScriptのゲッターを利用し、検証時には本物のArrayBufferを返しておき、ネイティブの転送処理が再度実行される際には別の値を返すという手口を使うことができました。

このずれにより、V8自体ではなくC++バインディング層に、いわゆるTOCTOU(time-of-check, time-of-use)条件が生まれてしまいました。2回目の走査では、未検証のキャストが置き換えられた値をArrayBufferとして扱い、そのまま参照(デリファレンス)してしまいます。

結果として、ホストプロセス内で攻撃者が影響を及ぼせるメモリアクセスが発生します。Cris Staicu氏は、再現性のある狙ったアドレスへのクラッシュを実証し、サンドボックスのゲストに対するサービス拒否(DoS)攻撃を可能にすることを示しました。

同氏はまた、このプリミティブを制御フローのハイジャックへとエスカレートさせることに成功したとも報告しており、これによりサンドボックスの外でコードを実行できる可能性があります。完全なエクスプロイトの詳細は公開されていませんが、この実証は単なる安定性の欠陥にとどまらないことを示しています。ネイティブのグルーコードが、ホスト間の分離を維持できていなかったのです。

この発見が重要なのは、isolated-vmが、ゲストとホストの境界がセキュリティ上の要となる環境に組み込まれているためです。

自動化・ローコードサービスはこれを使って顧客のワークフローを実行し、AIフレームワークはモデルが生成したツールロジックの実行に用い、マルチテナントプラットフォームはスクリプトがファイルやネットワーク、ホストのAPIにアクセスするのを制限するために依存しています。

サンドボックス化されたコードに限定的な機能を提供するために一般的に渡される、たった一つのivm.Referenceだけで、この脆弱な機能に到達するのに十分でした。

つまり、限定的なスコープのオブジェクトを一つだけ公開しているからといって、危険性がなくなるとは考えるべきではないということです。攻撃者が制御可能なオブジェクトが関わる場合、境界をまたぐすべての機能、シリアライザー、そしてネイティブ拡張機能について、セキュリティレビューを行う必要があります。

メンテナーはisolated-vm 7.0.1および6.2.0でこの問題を修正し、機密性の高いコピー処理中にJavaScriptの実行を防ぐようにしました。これにより、ゲッターやプロキシなどの仕組みを使って、検証と使用の間で転送リストの値を変更することができなくなります。

各組織は直ちにアップグレードを行い、推移的な依存関係を確認したうえで、信頼できないコードやテナント提供のコード、AIが生成したJavaScriptを実行しているすべてのサービスを洗い出す必要があります。

アップデートが完了するまでの間、運用担当者は公開する参照(リファレンス)を最小限に抑え、リスクの高いワークロードを分離し、サンドボックスホスト上で発生する異常なクラッシュやプロセスの再起動を監視すべきです。

セキュリティチームに、不審な活動を迅速に調査し、事業への影響が広がる前に脅威を封じ込めるための可視性とコンテキストを提供しましょう。ANY.RUNで調査力を強化する

翻訳元: https://cyberpress.org/critical-node-js-sandbox-flaw/

本記事は cyberpress.org の記事を翻訳・要約したものです。