- expr-evalのCVE-2025-12735により、安全でない入力評価を通じてリモートコード実行が可能
- 脆弱なバージョンは≤2.0.2;2.0.3で修正、expr-eval-fork 3.0.0でフォーク
- 開発者は変数のサニタイズを行い、evaluate()呼び出しで信頼できない入力を避けるべき
広く利用されているJavaScriptライブラリに、攻撃者がリモートで悪意のあるコードを実行できる重大な脆弱性が発見されました。
セキュリティ研究者のJangwoo Choe氏は、expr-evalというNPMで週80万回以上ダウンロードされているライブラリに「不十分な入力検証」のバグを発見しました。このライブラリは、文字列から数式を解析・評価し、開発者がユーザー入力の数式を安全に計算できるようにします。一般的に、このスクリプトはウェブアプリの電卓、データ分析ツール、式ベースのロジックで使用されています。
この脆弱性には9.8/10(クリティカル)の深刻度スコアが付与され、CVE-2025-12735として追跡されています。CERT/CCおよび業界のトラッカーはこのバグを高い影響度と分類しており、リモートで悪用可能、権限やユーザー操作を必要とせず、機密性・完全性・可用性のすべてが侵害される可能性があるとしています。
修正と緩和策
「この機能は、悪意のあるコードを注入し、システムレベルのコマンドを実行することで、機密性の高いローカルリソースへのアクセスやデータの流出を引き起こす可能性があります」とCERTの勧告には記載されています。「この問題はプルリクエスト#288で修正されています。」
問題の根本原因は、ライブラリが関数オブジェクトやその他の危険な値を評価コンテキストに許可していることにあり、攻撃者が変数オブジェクトに影響を与えられる場合、サンドボックスを抜けて任意のJavaScriptを実行する関数を渡すことができます。
このライブラリの2.0.2以前のすべてのバージョンが脆弱であり、2.0.3以降で修正されています。
ユーザーは、積極的にメンテナンスされているフォーク版expr-eval-forkのバージョン3.0.0に移行することでリスクを軽減できます。また、アプリがユーザー提供や信頼できない入力に対してevaluate()を呼び出している場合は、直ちに信頼できないデータの入力をやめ、変数オブジェクトをラップまたはサニタイズして関数やプロトタイプ改変フィールドが注入されないようにする必要があります。
このライブラリは広く人気があります。npmjs.comによると、現在250以上のプロジェクトで使用されています。