[緊急注意] math-codegenに深刻なRCE脆弱性 (CVE-2026-41507) が発覚!直ちに対策を
はじめに:数式評価ライブラリ `math-codegen` の深刻な脆弱性
日本のフロントエンドエンジニアの皆さん、こんにちは。今回は、Webアプリケーション開発で数式を扱う際に利用されることがあるJavaScriptライブラリ、`math-codegen` に関連する非常に危険な脆弱性(GHSA-p6x5-p4xf-cc4r / CVE-2026-41507)が発見されたことをお知らせします。この脆弱性は、その深刻度を示す「critical」という評価からもわかる通り、Webサイトだけでなく、最悪の場合サーバー全体が攻撃者に乗っ取られてしまう可能性がある「遠隔コード実行(RCE)」につながるものです。ユーザー入力の処理に関わる皆さんは、特に注意が必要です。
脆弱性の詳細:なぜ危険なのか?
`math-codegen`ライブラリは、文字列として与えられた数式をJavaScriptコードに変換し、評価するためのものです。この脆弱性は、ライブラリの`cg.parse()`関数が文字列リテラルを扱う方法に根本的な問題がありました。具体的には、古いバージョンの`math-codegen`では、ユーザーからの入力に含まれる文字列リテラルが、何のチェックもされずにJavaScriptのコードを実行する`new Function()`のボディに直接挿入されていました。
これにより、悪意のあるユーザーが「`1 + '` `); console.log(process.env); //` 」のような文字列を数式として入力した場合、本来ただの文字列として扱われるべき部分が、実はJavaScriptのコードとして解釈されて実行されてしまう事態が発生します。これは「文字列リテラルインジェクション」と呼ばれる攻撃手法であり、このケースでは直接システムコマンドの実行など、危険なコードを挿入され、リモートで実行される可能性がありました。
影響を受ける条件と潜むリスク
この脆弱性の影響を受けるのは、`math-codegen`ライブラリの**バージョン0.4.3未満**を使用しているアプリケーションです。特に、以下のようなケースで危険に晒されます。
1. **ユーザーが直接数式を入力できるWebアプリケーション:** 例えば、カスタム計算機能を提供するWebサイトや、ユーザーが独自のデータ解析式を記述できるようなツールなどが該当します。入力された数式がそのまま`cg.parse()`に渡されると、容易に攻撃されてしまいます。
2. **バックエンドで数式評価エンジンとして利用しているシステム:** フロントエンドで入力された値が、バックエンドで`math-codegen`を使って評価される場合も同様に危険です。攻撃者がフロントエンドを迂回し、API経由で悪意のある数式を送りつける可能性もあります。
この脆弱性が悪用されると、攻撃者はターゲットとなるシステム上で任意のコマンドを実行できるRCEが可能になります。これにより、Webアプリケーションのデータ改ざんや削除はもちろん、Webアプリケーションが動作しているサーバーそのものが攻撃者に完全に制御され、個人情報の流出やマルウェアの設置など、甚大な被害につながる可能性があります。
直ちに講じるべき対策
この深刻な脆弱性からシステムを保護するために、最も推奨される対策は次の通りです。
**1. `math-codegen` をバージョン0.4.3以降にアップグレードする**
これが最も確実で推奨される解決策です。バージョン0.4.3では、セキュリティが強化され、文字列リテラル値には`JSON.stringify()`が適用されるようになりました。これにより、入力された文字列がコードとしてではなく、安全なデータとして扱われることが保証されます。
`npm install math-codegen@latest` または `yarn add math-codegen@latest` を実行して、ライブラリを更新してください。
すぐにアップグレードできない場合の暫定的な回避策としては、以下のいずれかを適用してください。ただし、これらは一時的なものであり、可能な限り早期のアップグレードを目指すべきです。
**2. 入力の厳格なサニタイズ(無害化)**
ユーザーからの入力を`cg.parse()`関数に渡す前に、必ず入念にサニタイズし、悪意のあるコードが含まれていないことを確認してください。具体的には、数式として想定される文字(数字、演算子、変数名など)のみを許可し、それ以外の特殊文字や予約語を厳しく制限するホワイトリスト方式での入力チェックが有効です。
**3. 文字列リテラルの手動エスケープ**
入力に含まれる文字列リテラル部分を、手動で適切にエスケープ処理(例:`'`を`\'`に変換するなど)してからパーサーに渡すようにしてください。しかし、この方法は実装が複雑で、エスケープ漏れが発生しやすく、新たな脆弱性の原因となるリスクが高いため、可能な限りライブラリのアップグレードを優先してください。
まとめ
`math-codegen`の脆弱性は、ユーザーからの入力を安全に扱わないことの危険性を改めて浮き彫りにしました。このRCE脆弱性は、アプリケーションだけでなく、基盤となるサーバー環境をも危険に晒す重大なものです。ご自身のプロジェクトで`math-codegen`を使用している場合は、直ちにバージョンを確認し、速やかにバージョン0.4.3以降へアップグレードするよう強く推奨します。セキュリティ対策は、常に最優先事項として取り組んでいきましょう。