[緊急警報] Promptyで任意コード実行の脆弱性 (GHSA-c4gh-rv8h-q9vw) - 今すぐ対応を!
はじめに:Promptyとその脆弱性概要
近年、AIの進化と共に、プロンプトを効率的に管理・利用するためのツールが注目されています。その一つであるPromptyは、プロンプトの記述と実行を助けるライブラリです。今回、PromptyのTypeScriptローダーである`@prompty/core`のv2プレリリース版において、非常に危険な任意コード実行(Arbitrary Code Execution: ACE)の脆弱性(GHSA-c4gh-rv8h-q9vw / CVE-2026-53597)が発見されました。これは、攻撃者が意図的に作成したプロンプトファイルを読み込むことで、ホストのNode.js環境で任意のJavaScriptコードを実行できるという深刻なものです。
本記事では、この脆弱性の詳細、影響、そしてフロントエンドエンジニアとして取るべき対策について解説します。
脆弱性の詳細:なぜ任意コードが実行されるのか?
この脆弱性の根源は、PromptyローダーがYAMLフロントマターのパースに利用している`gray-matter`というライブラリの誤用です。`gray-matter`は、ドキュメントの先頭にあるメタデータブロック(フロントマター)をパースするためのライブラリで、通常はYAML形式を扱います。
しかし、`gray-matter`は、`---js`や`---javascript`といった特殊なフロントマターブロックをサポートしており、これらのブロック内のコードをパース時にJavaScriptとして評価する機能を持っています。Promptyの`@prompty/core` v2プレリリース版では、この`gray-matter`を初期設定のまま使用しており、実行可能なJavaScriptフロントマターエンジンを明示的にオーバーライドして無効化していませんでした。
そのため、攻撃者が以下のような悪意のある`.prompty`ファイルを準備し、アプリケーションに読み込ませた場合、プロンプトのロード処理中に`console.log('Malicious code executed!');`の部分がホストのNode.jsプロセスで実行されてしまう可能性がありました。
```prompty --- js console.log('Malicious code executed!'); // ここに任意のJavaScriptコードが記述可能 --- # My Prompt Hello, AI! ```
過去のv1系ではこの問題に対する修正が行われていましたが、v2のTypeScriptランタイムへの再構築の際に、この安全対策が見落とされ、脆弱性が再発してしまいました。
影響範囲と深刻なリスク
この脆弱性の深刻度は'High'と評価されており、以下のような環境が影響を受けます。
<ul><li><strong>影響を受けるパッケージ:</strong> <code>@prompty/core</code> v2プレリリースライン (<code>>= 2.0.0-alpha.1 < 2.0.0-beta.3</code>)</li></ul>
アプリケーションがユーザーから提供された、あるいは信頼性の低いソース(例:外部のプロンプトギャラリー、未検証のGitHubリポジトリなど)から取得した`.prompty`ファイルを読み込む場合、攻撃者は悪意のあるJavaScriptを仕込んだプロンプトファイルを渡し、アプリケーションが動作するNode.jsプロセス上で任意のコードを実行できてしまいます。
これは、ファイルシステムの読み書き、ネットワークリクエストの実行、さらにはシステムのコマンド実行など、アプリケーションが持つあらゆる権限を悪用される可能性を意味します。フロントエンド開発者がNode.jsバックエンド(例えばNext.jsのAPIルート、Electronアプリのメインプロセスなど)でPromptyを使用している場合、その影響は甚大です。
取るべき対応策:今すぐアップグレードを!
この脆弱性に対する最も効果的な対策は、影響を受けるパッケージを速やかにアップグレードすることです。
<ul><li><strong>修正バージョン:</strong> <code>@prompty/core@2.0.0-beta.3</code> またはそれ以降</li></ul>
以下のコマンドで、プロジェクトの`@prompty/core`を最新バージョンに更新してください。
```bash npm install @prompty/core@latest # または yarn upgrade @prompty/core@latest ```
修正内容としては、コミット`c27402da2487075be577f06aa79df627fb9d6853`で、`gray-matter`のオプションを明示的に設定し、`js`および`javascript`エンジンを無効化しています。これにより、PromptyのフロントマターがYAMLのみであり、実行可能なフロントマターがサポートされないことが強制されます。また、`---js`フロントマターが拒否され評価されないことを検証する回帰テストも追加され、将来的な再発防止策が講じられています。
まとめ
今回のPromptyの脆弱性は、依存ライブラリの標準機能が予期せぬリスクをもたらす可能性があることを改めて示しています。特に、ファイルパースやコード評価を行うライブラリを扱う際には、その動作を深く理解し、アプリケーションのセキュリティポリシーに合わせて設定を調整することが不可欠です。AI関連の開発が活発化する中で、プロンプトファイルのようなコンテンツの安全性に対する意識も高めていく必要があります。
ご自身のプロジェクトで`@prompty/core`を使用している場合は、すぐにバージョンを確認し、最新版へのアップグレードを実施してください。安全な開発を心がけましょう。