概要
node-forge(npm パッケージ名: forge)は JavaScript で 実装 された 暗号・PKI ツールキット であり、X.509 証明書 の 生成、解析、検証 の 機能 を 提供 して います。この ライブラリ の バージョン 1.4.0 より 前 に おいて、X.509 証明書チェーン の 検証 処理 に 重大 な 脆弱性 が 存在 します。
この 脆弱性 は CWE-295(Improper Certificate Validation、不適切 な 証明書 検証)に 分類 されます。具体的 に は、証明書 の basicConstraints 拡張 を 適切 に 検証 して いない ため、攻撃者 が 偽造 した CA 証明書 が 証明書チェーン 内 で 信頼 されて しまいます。
X.509 証明書 の basicConstraints 拡張 は、その 証明書 が 認証局(CA)として 機能 できる か どうか を 示す 重要 な フィールド です。CA:TRUE が 設定 されて いない エンドエンティティ 証明書 は、他 の 証明書 に 署名 する 権限 を 持ちません。この 制約 は PKI(公開鍵基盤)の 信頼 モデル の 根幹 を 成す もの です。
node-forge の 証明書 検証 実装 で は、この basicConstraints 拡張 の チェック が 欠落 して いた ため、以下 の 攻撃 シナリオ が 成立 します。
攻撃者 は 正規 の CA から 発行 された 通常 の サーバー 証明書(エンドエンティティ 証明書)を 取得 します。通常、この 証明書 に は CA:FALSE が 設定 されて おり、他 の 証明書 に 署名 する こと は できません。しかし、node-forge は この 制約 を 検証 しない ため、攻撃者 は この エンドエンティティ 証明書 の 秘密鍵 を 使って 任意 の ドメイン に 対する 偽造 証明書 を 作成 し、node-forge を 使用 して いる アプリケーション に 対して その 偽造 証明書 を 提示 する こと が できます。
この 攻撃 に より、以下 の 深刻 な 影響 が 生じます。
第一 に、中間者攻撃(MITM)が 可能 に なります。攻撃者 は 任意 の ドメイン に 対する 偽造 証明書 を 作成 し、TLS 通信 を 傍受・改ざん する こと が できます。
第二 に、なりすまし が 可能 に なります。正規 の サービス に 見せかけた 偽の サーバー を 立ち上げ、ユーザー の 認証情報 や 機密データ を 窃取 する こと が できます。
第三 に、証明書 ピンニング の 無効化 に つながる 可能性 が あります。正規 の CA チェーン に 連なる 証明書 であるため、一部 の ピンニング 実装 を バイパス できる 場合 が あります。
この 脆弱性 は TLS クライアント として node-forge を 使用 して いる アプリケーション や、証明書チェーン の 検証 を node-forge に 依存 して いる システム に 特に 影響 が 大きい です。HTTPS リクエスト の 送信、Webhook の 検証、mTLS(相互TLS認証)など の 機能 で node-forge を 使用 して いる 場合、速やか に 対応 する 必要 が あります。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 7.4 |
| 深刻度 | High |
| 攻撃元 | ネットワーク |
| 攻撃条件の複雑さ | 高 |
| 必要な権限 | 不要 |
| ユーザー操作 | 不要 |
| CWE | CWE-295 (不適切な証明書検証) |
影響を受けるソフトウェア
| 製品 | ベンダー | 影響バージョン |
|---|---|---|
| node-forge (forge) | Digital Bazaar | v1.4.0 より前 の 全バージョン |
修正バージョンと回避策
- 修正バージョン: node-forge v1.4.0 以降 へ アップデート する こと で、basicConstraints 拡張 の 厳密 な 検証 が 実装 されます
- 暫定回避策: 証明書チェーン の 検証 に node-forge を 使用 して いる 箇所 で、中間 証明書 の basicConstraints 拡張 に
CA:TRUEが 設定 されて いる こと を 独自 に チェック する ロジック を 追加 する - 代替手段: 可能 で あれば、Node.js 組み込み の TLS/crypto モジュール を 使用 する こと で、この 脆弱性 の 影響 を 回避 できます
- 依存関係 の 確認:
npm ls forgeまたはnpm auditで プロジェクト 内 の node-forge バージョン を 確認 し、間接 依存 も 含めて 更新 する
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
