🛡 概要
人気のJavaScript式パーサー「expr-eval」で、リモートコード実行(RCE)につながる重大な脆弱性(CVE-2025-12735)が報告されています。NPMで週80万超のダウンロード実績がある同ライブラリは、ユーザー入力の数式を安全に評価する用途で広く採用されています。当該問題は研究者Jangwoo Choe氏により報告され、CISAはCVSS 9.8(Critical)と評価。CERT-CCも深刻性を指摘しており、アプリケーションの振る舞いを攻撃者が全面的に制御しうるリスクがあるとしています。影響はオリジナルのexpr-evalと、そのフォークであるexpr-eval-forkの旧版に及びますが、expr-eval-fork 3.0.0で修正が提供されています。既存プロジェクトは速やかな移行が推奨されます。
🔍 技術詳細
問題の核心は、Parser.evaluate()に渡される変数/コンテキストオブジェクトの検証不備です。本来、式評価エンジンは変数値(数値・文字列・ブールなどのプリミティブ)を安全に扱う必要があります。しかし当該欠陥により、攻撃者が悪意ある関数オブジェクトを変数として注入できると、評価処理中にそれらが呼び出され、アプリケーションの権限で任意の処理が実行される恐れがあります。アプリケーションの設計・実装によっては、サーバー側でNode.jsの危険な機能(たとえばOSコマンド実行を可能にするもの)へ到達しうる経路が形成され、RCEに至る可能性があります。ブラウザ側で用いられる場合でも、同一コンテキスト内で任意関数が実行されることは深刻な情報漏えいやアカウント乗っ取りにつながります。
影響範囲は、6年以上更新のなかったオリジナルのexpr-evalと、そのフォークであるexpr-eval-forkの旧版に及びます。修正はexpr-eval-fork v3.0.0で提供され、評価時に許可リスト方式で安全な関数のみを実行する仕組み、カスタム関数の登録制、そしてこれらを担保するテスト強化が導入されています。オリジナルのexpr-eval向けには修正PRが存在しますが、メンテナの不在によりリリース時期は不明とされています。依存するライブラリのメンテナも含め、影響プロジェクトはフォーク版への移行と再配布(再リリース)を急ぐべきです。
なお、実際の悪用可能性は「アプリがどのようにコンテキストを組み立て、どの入力をどこまで利用者に委ねているか」に強く依存します。たとえば、外部リクエスト由来のデータからコンテキストを直接構築している、あるいは関数オブジェクトをユーザーが間接的に指定できる設計になっている場合、危険性は飛躍的に増大します。安全側に倒すため、アップグレードと合わせて、コンテキストに渡す値の型とプロパティの厳格な制限が不可欠です。
⚠ 影響
- サーバー乗っ取り:式評価経路から任意関数が実行され、OSコマンド呼び出しへ到達する構成ではRCEに発展。
- 機密情報の漏えい:アプリ内部のデータ・環境変数へのアクセスやログ吸い上げ。
- 横展開:同一ランタイム・同一ホスト内の他プロセスや資格情報を足掛かりに、追加侵害へ進展。
- サプライチェーン影響:ライブラリ利用アプリが多数存在するため、下流プロダクト・顧客に波及。
CVSS v3.x 基本値: 9.8(Critical、CISA公表)。
🛠 対策
- 緊急アップグレード:expr-eval-fork v3.0.0へ移行。依存関係の宣言とロックファイルを更新し、再ビルド・再デプロイ。移行後は、許可リスト登録外の関数が実行されないことをテストで検証。
- 利用停止の検討(オリジナル版):オリジナルexpr-evalはメンテ不在のため、PRマージ時期が不明。フォーク版へ乗り換え、あるいは代替ライブラリへの移行を検討。
- コンテキスト防御:評価関数に渡すオブジェクトはプリミティブ値のみに制限。型チェック(isFunctionの拒否)と深いコピーで原型汚染・プロトタイプ連鎖経由の参照を遮断。
- 入力検証・WAF:式専用の文字クラス・長さ・関数名許可リストでフィルタ。APIゲートウェイ/WAFで不審な式パターンを遮断。
- 権限最小化:式評価を行うプロセスのOS権限を最小化し、ネットワーク分離・ファイル書込権限の防御を徹底。
- SBOM/SCA:SBOMを更新し、SCA(npm audit等)でCVE-2025-12735の検出有無を継続確認。依存の間接参照も棚卸。
📌 SOC視点
- プロセス監視:Node.jsプロセスからの子プロセス起動(spawn/exec/execFile)・PowerShell/シェルの起動・未知バイナリ実行をEDRで検知。
- アプリログ:式評価エンドポイントでのエラー急増、異常に複雑な式、関数呼び出しの多用などの振る舞い変化。
- 依存関係監査:資産管理にNPMパッケージ名とバージョンを紐付け、expr-eval/expr-eval-forkの脆弱版有無を可視化。
- ネットワーク:評価処理直後に発生する外向き通信(C2やデータ外送)を検知。新規ドメインへのDNSクエリや急増するHTTP要求に注意。
- メモリ/スタック兆候:例外トレースにParser.evaluate()直後の不審な関数呼び出しが現れるケースを収集・相関。
📈 MITRE ATT&CK
- TA0001 Initial Access / T1190 Exploit Public-Facing Application:式評価を提供する公開APIやWeb機能に対し、悪意ある入力で脆弱性を突く想定。
- TA0002 Execution / T1059.007 JavaScript:評価エンジンからJavaScript関数が実行され、任意コード実行に至る。
- TA0011 Command and Control(該当可能):成功後に外部と通信してコマンド取得・データ流出する振る舞いが見られる場合。
根拠:脆弱性は式評価の実行経路を踏み台にするもので、攻撃の入り口は公開機能の悪用(T1190)、実体はJavaScript実行(T1059.007)。成功後の通信が観測されればC2に該当します。
🏢 組織規模別助言
- 小規模(〜50名):使用箇所の特定と即時アップグレードを最優先。ビルドとデプロイの自動化(CI/CD)にSCAチェックを組み込み、単一の変更で全サービスを更新。
- 中規模(50〜500名):プロダクト横断の依存関係インベントリを整備。ステージングでの回帰試験をテンプレート化し、緊急パッチの標準手順(CAB承認フロー)を整える。
- 大規模(500名以上):SBOMの継続運用と脆弱性情報の自動連携(VEX等)。段階的ロールアウトとカナリアデプロイでリスクを抑え、全社PSIRT主導で影響範囲と顧客通知ポリシーを統制。
🔎 類似事例
- CVE-2022-36067(vm2サンドボックス逃れ):JS実行環境の隔離破りによりRCE。
- CVE-2017-5638(Apache Struts OGNLインジェクション):式言語の不適切な評価によるRCE。
- CVE-2022-22965(Spring4Shell):フレームワークのプロパティバインドを悪用したRCE。
🧭 次の一手
- 自社コードと依存の棚卸:npm lsでexpr-eval/expr-eval-forkの利用とバージョンを確認。
- 即時移行:expr-eval-fork v3.0.0へ更新し、再リリースしてユーザーへ修正版を配布。
- 安全対策の恒常化:SCA・SBOM・EDR監視・WAFルールを継続運用。コンテキスト型チェックのユニットテストを追加。
- 次に読む:式評価エンジンの安全設計チェックリスト、依存関係の緊急パッチ運用ガイド、Node.jsでの任意コード実行の兆候検知ハンドブック。


