概要
node-forge(npm パッケージ名: forge)は JavaScript で 実装 された 暗号・PKI ツールキット であり、Ed25519 楕円曲線 デジタル署名 アルゴリズム の 実装 を 含んで います。この ライブラリ の バージョン 1.4.0 より 前 に おいて、Ed25519 署名 検証 の 実装 に 脆弱性 が 存在 し、非正規(non-canonical)な 署名 を 有効 な もの として 受け入れて しまいます。
この 脆弱性 は CWE-347(Improper Verification of Cryptographic Signature、暗号署名 の 不適切 な 検証)に 分類 されます。
Ed25519 署名 アルゴリズム は RFC 8032 で 標準化 されて おり、その セクション 8.4 に おいて、署名 検証 時 に S 値 が 群 の 位数 L 未満 で ある こと を 確認 する 必要 が ある と 明記 されて います。この チェック は 署名 の 一意性(canonical form)を 保証 する ため に 不可欠 です。
node-forge の Ed25519 実装 で は、この S 値 の 正規性 チェック が 欠落 して いた ため、S + L や S + 2L など の 非正規 な 値 を 持つ 署名 も 検証 に 成功 して しまいます。
非正規 署名 の 受け入れ は 一見 無害 に 見える かもしれません が、以下 の ような 深刻 な セキュリティ 上 の 問題 を 引き起こす 可能性 が あります。
第一 に、署名 の 可鍛性(malleability)の 問題 が あります。同じ メッセージ に 対して 複数 の 有効 な 署名 が 存在 する こと に なり、署名 の 一意性 に 依存 する アプリケーション ロジック が 破綻 します。例えば、ブロックチェーン や 分散台帳 システム で トランザクション の 一意性 を 署名 で 担保 して いる 場合、二重支払い など の 攻撃 が 成立 する 可能性 が あります。
第二 に、相互運用性 の 問題 が あります。RFC 8032 に 準拠 した 他 の Ed25519 実装 と 検証 結果 が 異なる ため、システム 間 で 署名 の 有効性 に ついて 不整合 が 発生 します。
第三 に、認証 バイパス の リスク が あります。署名 を 改変 して も 検証 が 通る ため、特定 の 条件 下 で 認証 メカニズム を 迂回 できる 可能性 が あります。
Ed25519 は 高速性 と セキュリティ の 両立 から 近年 広く 採用 されて おり、SSH 鍵認証、TLS 1.3、FIDO2/WebAuthn、暗号通貨 など の 重要 な プロトコル で 使用 されて います。node-forge を 通じて Ed25519 署名 検証 を 行って いる アプリケーション は、速やか に v1.4.0 以降 へ アップデート する こと が 推奨 されます。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 7.5 |
| 深刻度 | High |
| 攻撃元 | ネットワーク |
| 攻撃条件の複雑さ | 低 |
| 必要な権限 | 不要 |
| ユーザー操作 | 不要 |
| CWE | CWE-347 (暗号署名の不適切な検証) |
影響を受けるソフトウェア
| 製品 | ベンダー | 影響バージョン |
|---|---|---|
| node-forge (forge) | Digital Bazaar | v1.4.0 より前 の 全バージョン |
修正バージョンと回避策
- 修正バージョン: node-forge v1.4.0 以降 へ アップデート する こと で、RFC 8032 セクション 8.4 に 準拠 した S 値 の 正規性 チェック が 追加 されます
- 暫定回避策: Ed25519 署名 検証 を 行う 箇所 で、署名 の S コンポーネント が 群 の 位数 L 未満 で ある こと を 独自 に チェック する ロジック を 追加 する
- 依存関係 の 確認:
npm ls forgeまたはnpm auditで プロジェクト 内 の node-forge バージョン を 確認 し、間接 依存 も 含めて 更新 する
関連リンク
- NVD
- GitHub Security Advisory (GHSA-q67f-28xg-22rw)
- RFC 8032 Section 8.4 - Ed25519 検証要件
- node-forge GitHub リポジトリ
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
