🛡 概要
JavaScriptの暗号ライブラリ「node-forge」に、署名検証を回避できる脆弱性(CVE-2025-12816)が報告・修正されました。ASN.1の検証ロジックに起因し、細工したデータが正当なものと誤判定される恐れがあります。調整済み情報では高深刻度(High)として扱われており、修正はバージョン1.3.2で提供済みです。発見者はPalo Alto NetworksのHunter Wodzenski氏。node-forgeはNPMで週2,600万回近いダウンロードがある広く普及したライブラリであるため、影響は広範に及ぶ可能性があります。依存するアプリケーションは直ちに最新版へ更新してください。
🔍 技術詳細
本脆弱性は、node-forge(1.3.1およびそれ以前)が実装するASN.1構造の検証における「解釈の不一致(interpretation conflict)」により発生します。ASN.1/DERでは、型(Tag)、長さ(Length)、値(Value)の厳格な表現や順序、再エンコード時の一意性(canonical化)が求められますが、当該ライブラリの検証機構が一部の異常・非正規化表現を却下しきれず、スキーマ検証と下流の暗号検証の間で意味的な不整合が生じ得ます。攻撃者は、例えば長さフィールドと実データの不一致、構造の入れ子の仕方、コンテキスト固有タグの使い方、プリミティブ/コンストラクテッドの扱いなどに起因する境界事例を突くことで、ASN.1パーサを「それらしく見える」木構造へ誘導し、後段の署名検証・証明書検証・CMS/PKCS#7検証などが本来失敗すべき不正データを妥当とみなす状況を作り出せます。研究者は、node-forgeが構造と完全性の担保に用いられている文脈において、悪意のあるASN.1入力により検証機構を欺く概念実証を示しています。利用される機能の例としては、X.509証明書/チェーンの解析・検証、OCSPやCSR処理、PKCS#1/PKCS#7(CMS)署名データの検証、S/MIME検証等が挙げられます。なお、Node.js標準のTLSハンドシェイクはOpenSSLを用いており、通常それ自体はnode-forgeに依存しませんが、アプリケーション層で独自の署名・証明書確認にnode-forgeを用いている場合は影響が発生し得ます。
⚠ 影響
- 認証回避:署名ベースの認可/認証フローをアプリ層で実装している場合、細工データが通過し不正アクセスに繋がる可能性。
- 署名付きデータの改ざん:PKCS#7/CMSやS/MIMEの署名検証をすり抜け、改ざん済みコンテンツが正当と扱われる可能性。
- 証明書関連機能の誤用:証明書の解析・整合性確認、失効/OCSP応答の評価などが誤判定となるリスク。
CERT/CCは、影響はアプリケーション次第で、信頼判断に署名検証が重要な環境では深刻になり得ると注意喚起しています。
🛠 対策
- 至急アップデート:node-forgeを1.3.2以上へ固定(ピン留め)し、ロックファイルを更新。CIで脆弱バージョン(≤1.3.1)のビルドを失敗させる。
- SCA/SBOM運用:依存関係の在庫(SBOM)を更新し、SCAでCVE-2025-12816検出を継続監視。依存ライブラリのトランジティブ依存にも注意。
- 回避策(暫定):アップデート完了まで、外部から供給されるASN.1由来の署名データ(証明書、CMS等)の受け入れを制限し、可能ならOpenSSL等の別実装で二重検証(クロスバリデーション)を行う。
- 回帰テスト:既知の境界事例(異常な長さ、重複要素、非正規DERなど)を含むテストベクトルを追加し、検証の失敗を確認。
- 監査と復旧:過去ログから「本来拒否されるべき署名/証明書が受理された」痕跡をサンプリング調査。疑義があれば関連する鍵・証明書・トークンの失効/再発行を検討。
CVSSの数値は公的情報を確認してください。現在公表情報では高深刻度として扱われています。
📌 SOC視点
- アプリ監査ログ:forge.asn1.fromDer、pki.certificateFromAsn1、pki.verifyCertificateChain、pkcs7.messageFromAsn1 等の成功/失敗率の急変(失敗が急減し成功が増加)を時系列で可視化。
- 入力監視:外部から受領するBase64/DERのASN.1ペイロードに、非正規DERや重複フィールド、極端な長さ値等の兆候がないかWAF/IDLで検査。検知時は隔離。
- 相関分析:同一送信元からの複数の署名付き要求で、署名アルゴリズムやIssuerが不自然に揺れる挙動を相関。偽造試行の可能性。
- EDR/プロセス:node・PM2等の実行体の異常クラッシュ減少や検証モジュール周辺の例外率低下を観測(例外が出なくなる=誤受理の兆候)。
- 二重検証ジョブ:バッチで過去に受理した署名/証明書をOpenSSL等で再検証し差分を検出。差分ヒットは高優先度で調査。
📈 MITRE ATT&CK
- TA0005 Defense Evasion / T1553 Subvert Trust Controls(署名/信頼検証をすり抜けて不正なコードやデータを正当と見せかける)。
- TA0001 Initial Access / T1190 Exploit Public-Facing Application(公開APIがnode-forgeで署名検証を行う場合、細工入力により初期侵入の足掛かりとなり得る)。
根拠:ASN.1検証の抜け穴を利用して信頼境界(署名・証明書)を欺く行為は、信頼制御の迂回(T1553)に該当。これをインターネット公開エンドポイントへ投入する形で悪用すれば、公開アプリの脆弱性悪用(T1190)の様相を帯びます。
🏢 組織規模別助言
- 小規模(〜50名):依存パッケージ一覧を即時棚卸しし、node-forge使用有無を確認。該当サービスは緊急更新し、外部からの署名付き入力の受付を一時制限。SCAの無償プランでも可。
- 中規模(50〜500名):CI/CDに脆弱バージョン拒否のポリシーを実装。WAFでASN.1の異常検知シグネチャを有効化。過去30〜90日の検証ログをサンプリング再検証。
- 大規模(500名以上):SBOMをCMDBと連携し自動追跡。段階的ロールアウトとカナリアリリースで1.3.2を配布。レッド/ブルー合同で悪用シナリオのテーブルトップ演習を実施し、IR手順に反映。
🔎 類似事例
- CVE-2022-21449(Java「Psychic Signatures」:ECDSA検証不備)
- CVE-2020-0601(Windows CryptoAPI「CurveBall」:証明書検証不備)
- CVE-2022-34689(Windows CryptoAPI:証明書スプーフィング)
- CVE-2015-1793(OpenSSL:代替チェーンに起因する証明書偽造)
🧭 次の一手
- 今すぐ依存グラフを確認し、node-forgeを1.3.2へ更新・固定。
- SCA導入/強化とSBOM自動生成をCIに組み込み、脆弱版ビルドを遮断。
- ASN.1データの二重検証(OpenSSL等)と、受理済みデータの後追い再検証を短期で実施。
- 次に読むべき:JavaScript暗号ライブラリ安全運用ガイド、ASN.1/DER厳格検証チェックリスト、CIでのサプライチェーン防御実践。


