Modern Frontend CVEs

対象CVE: CVE-2026-50171

[解説] Angularの数値フォーマット機能にサービス停止 (DoS) の脆弱性 (CVE-2026-50171)

Angularの`@angular/common`パッケージに含まれる`formatNumber`関数に、悪意のある入力によってメモリが大量消費され、サービス停止を引き起こす可能性があるDoS脆弱性が発見されました。早急なアップデートが推奨されます。

はじめに:Angularの数値フォーマット機能に潜むDoSの脅威

Angularのフロントエンド開発者の皆さん、重要なセキュリティ情報です。`@angular/common`パッケージに含まれる数値フォーマット機能に、サービス停止(DoS)を引き起こす可能性のある脆弱性が見つかりました(CVE-2026-50171 / GHSA-p3vc-36g9-x9gr)。この脆弱性は、悪意のある入力によってアプリケーションの安定性を著しく損なう恐れがあります。

脆弱性の詳細とメカニズム

この脆弱性は、`formatNumber`関数(および`DecimalPipe`、`PercentPipe`、`CurrencyPipe`などの関連パイプ)が受け取る`digitsInfo`パラメータの検証不備に起因します。`digitsInfo`は数値の整数部と小数部の桁数を指定する文字列ですが、特に小数点以下の最小・最大桁数を指定する部分に、非常に大きな値(例: `'1.200000000-200000000'`)が指定された場合に問題が発生します。

内部的に呼び出される`roundNumber`関数は、この不正な`digitsInfo`パラメータに対応するため、指定された桁数に合わせて配列に際限なく要素を追加しようとします。この結果、利用可能なメモリが急速に消費され、システムリソースが枯渇し、アプリケーションが機能不全に陥ります。

あなたのアプリケーションへの影響

この脆弱性によって引き起こされる影響は、アプリケーションのレンダリング方式によって異なります。

**サーバーサイドレンダリング (SSR) を利用している場合:** Node.jsサーバー上でAngularアプリケーションを動かしている場合、攻撃者が仕掛けた悪意のある入力が処理されると、Node.jsプロセスがメモリ不足(`JavaScript heap out of memory`)によりクラッシュします。これにより、すべてのユーザーに対してアプリケーションが利用不能となるサービス停止状態に陥ります。

**クライアントサイドレンダリング (CSR) の場合:** ブラウザ上で動作するアプリケーションの場合、悪意のある入力が処理されると、ユーザーのブラウザタブのメインスレッドが大量のメモリ消費と処理によってブロックされます。結果として、タブがフリーズし、応答不能となることでユーザー体験が著しく損なわれます。

攻撃の前提条件と自己診断

この脆弱性が悪用されるには、以下の二つの条件が満たされている必要があります。あなたのアプリケーションが該当するか確認しましょう。

**1. 脆弱な機能の使用:** アプリケーションがAngularの数値フォーマット機能(`formatNumber`関数を直接、または`DecimalPipe`、`PercentPipe`、`CurrencyPipe`といったテンプレートパイプを介して)を利用していること。これはAngularアプリで数値表示をカスタマイズしている多くのケースに当てはまります。

**2. `digitsInfo`パラメータが攻撃者制御可能:** `digitsInfo`パラメータが、信頼できないユーザー入力(例: URLクエリパラメータ、ユーザー設定フォームからの入力、ユーザー定義のフォーマットオプションを受け入れるAPIレスポンスなど)によってカスタマイズ可能、または直接制御される状態にあること。もし`digitsInfo`がアプリケーション内部で定義された固定値や、厳密にバリデーションされた信頼できるソースからの値に限定されている場合、この脆弱性が外部から悪用される可能性は低いと言えます。

推奨される対応策とアップデート手順

この脆弱性に対する最も確実な対策は、Angularのバージョンを修正済みのバージョンへ早急にアップデートすることです。以下のバージョンでこの問題は修正されています。

<ul><li>Angular 22.0.0-rc.2 以降</li><li>Angular 21.2.15 以降</li><li>Angular 20.3.22 以降</li><li>Angular 19.2.23 以降</li></ul>

あなたのプロジェクトで使用しているAngularのバージョンに応じて、適切なバージョンへのアップデートを実施してください。`ng update`コマンドを利用して、依存関係を一括で更新できます。

`ng update @angular/cli @angular/core`

もし、すぐにアップデートが難しい状況であれば、緊急策として、`digitsInfo`パラメータにユーザーが制御できる値を使用していないかを徹底的に確認し、その入力に対して厳格なバリデーション(例: 正規表現による文字列の検証、数値範囲の制限など)を導入することを検討してください。

まとめ

Angularの数値フォーマット機能におけるDoS脆弱性は、悪用された場合、アプリケーションの可用性に深刻な影響を及ぼします。特にSSRを使用している場合や、ユーザーからの入力で数値フォーマットが変更されうる場合は、早急な対応が求められます。自身のプロジェクトが影響範囲にあるかを確認し、推奨されるアップデートを実施することで、ユーザーに安全で安定したサービスを提供し続けましょう。

← ブログ一覧に戻る