ng-antd-adminに認証回避の脆弱性、22.0で修正
管理画面テンプレートのng-antd-adminで、同梱されたJWTの既定シークレットを替えずに運用していると、管理者を含む任意のユーザーになりすませる脆弱性が見つかりました。22.0より前の版を使い、このテンプレートから作った社内システムや受託案件がある組織が対象です。シークレットの差し替えと22.0への更新を進めてください。
急ぎ度: 早めに
CVSS v3は9.8と高く修正版22.0が出ていますが、影響は既定のシークレットを置き換えていない環境に限られます。
関係があるか
ng-antd-adminをもとに管理画面や業務システムを作り、JWTのシークレットを既定のまま使っている組織が当てはまります。インターネットに公開している環境は、とくに優先して見てください。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| ng-antd-admin(Angular と NestJS の管理システムテンプレート) | 22.0より前の全ての版。ただし、同梱の既定シークレットを置き換えていない環境 | 22.0 |
確かめ方
- 1自社や委託先が作ったシステムに、ng-antd-adminを土台にしたものがないかをリポジトリと開発履歴から洗い出す。
- 2該当するシステムで、JWTの署名に使うシークレットの設定を確認し、テンプレートに同梱されていた既定値のままでないかを見る。
- 3ソースをテンプレートから取り込んだ版を確認する。リポジトリを手元に持っている場合は、タグの確認から始める。
何が起きたか
ng-antd-adminの22.0より前の版では、既定のJWTシークレットを替えずに運用していると、正規のログインなしに他人になりすませます。管理者を含む任意のユーザーとして保護されたAPIにアクセスできるため、アカウントの乗っ取り、データの漏えい、不正な操作につながります。
ng-antd-adminはAngularとNestJSで作られた管理システムのテンプレートです。JWTの署名に使うシークレットが固定値で同梱されており、置き換えずに動かしても、起動時に警告が出ません。そのため、既定のまま運用が始まっていても気づきにくい構成でした。弱点の分類はCWE-321(ハードコードされた暗号鍵の使用)です。
修正版の22.0は、同梱の既定シークレットを本番環境では受け付けません。一方、非本番環境では警告を出したうえで使えるままです。
攻撃の流れ
-
1
既定値の入手
テンプレートに同梱された既定のシークレットを、対象システムが使い続けていることを突き止めます。
-
2
偽トークン作成
そのシークレットで署名した、任意のユーザーを名乗るトークンを作ります。
-
3
認証を通過
システムが偽のトークンを正規のものとして受け入れ、管理者としてログイン済みの扱いになります。
-
4
API操作
保護されたAPIでデータの取得や変更、不正な操作ができる状態になります。
どう悪用されるか
認証は不要で、ネットワーク越しに攻撃できます。攻撃の難易度は低く、利用者の操作も要りません。CVSSのベクターはCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hです。ただし、対象は既定のシークレットを置き換えていないデプロイに限られます。
成功すると、管理者を含む任意のユーザーとして振る舞えます。アカウントの乗っ取り、保護されたデータの漏えい、権限が必要な操作の実行が起こり得ます。機密性、完全性、可用性のいずれも影響が大きいと評価されています。
今すぐやること
-
1
JWTのシークレットを推測されない値に置き換える
本番と非本番の全ての環境で、十分に長くランダムな値を新しく生成して設定し直します。置き換えは、旧値が知られている前提で行います。置き換えると、それまでに発行されたトークンは使えなくなる点に注意し、ログインし直してもらう段取りを組んでください。
-
2
ng-antd-adminを22.0に更新する
テンプレートから取り込んだ版を確認し、22.0の修正を取り込みます。22.0は本番で既定のシークレットを拒否しますが、非本番では警告つきで通すため、更新だけで安全にはなりません。
git describe --tags -
3
インターネットに出ている非本番環境を洗い出す
検証環境やデモ環境が外部から到達でき、既定のシークレットのままになっていないかを確認します。非本番の環境でも実データを入れていれば、被害は本番と変わりません。
-
4
不審なアクセスの痕跡を確認する
既定のシークレットで運用していた期間について、管理者権限での操作や、見覚えのないアカウントでのAPI呼び出しがないかをアクセスログで調べます。痕跡が見つかったら、データ漏えいと不正な変更を前提に調査を進めてください。
すぐ更新できないとき
すぐに更新できないときは、管理画面とAPIへの経路を、VPNや社内ネットワーク、IPアドレス制限、リバースプロキシのいずれかで絞り込み、外部から直接到達できないようにします。これは時間を稼ぐ手段にとどまります。
背景
ng-antd-adminは、管理画面の画面部品とバックエンドの雛形を一式そろえたテンプレートです。ソースコードがGitHubで公開されており、利用者はこれを取り込んで自社の管理システムに作り替えます。雛形に入っていた設定値は、そのまま本番のシステムにも残りやすい性質があります。
JWTは、サーバーが持つシークレットで署名することで、トークンが正規に発行されたものだと確かめる仕組みです。このシークレットが公開物に含まれた固定値だと、署名の信頼が成り立ちません。今回の脆弱性は、まさにこの前提が崩れる形です。管理者の権限を持つトークンも同じ手口で偽造できるため、影響が管理画面全体に及びます。
よくある質問
Q.ng-antd-adminを直接使っていませんが、確認が必要ですか。
まだ分かっていないこと
- この脆弱性が実際の攻撃で悪用されているかどうかは、公表されていません。
- 既定のシークレットが置かれた具体的な場所や設定名と、非本番環境の判定基準は、ベンダーのアドバイザリ(GHSA-qphq-m2hv-wj5h)と22.0のリリースノートで確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
ng-antd-admin is an Angular and NestJS administration system template. Prior to 22.0, a hardcoded default JWT secret permits token forgery when a deployment has not replaced the default secret, without a startup warning. An attacker can bypass authentication and authorization, impersonate any user including administrators, and access protected API endpoints, leading to account takeover, data leakage and unauthorized operations. Version 22.0 rejects the shipped secret in production but permits it with a warning in non-production environments.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- patch github.com
- web github.com