OpenDeepWiki 2.0.6以前で管理者トークンを偽造される脆弱性
OpenDeepWikiに、ログインなしで管理者になりすませる脆弱性が見つかりました。2.0.6以前を社内外に公開している組織が対象で、管理画面の外部到達を止めたうえで修正版への更新と鍵の交換を進めてください。
急ぎ度: 至急
CVSS v3は9.8、署名鍵が公開リポジトリの設定ファイルに書かれていて悪用の準備が要らないため、外部から到達できる環境では先に手を打つ価値があります。
関係があるか
OpenDeepWikiを自社で動かしている組織が対象です。インターネットに公開している場合は特に優先度が高く、社内ネットワーク限定でも利用者が多いなら対象として扱ってください。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| OpenDeepWiki(AIDotNet) | 2.0.6以前 | 修正のコミットが公開されています。修正版の版番号は、ベンダーのリポジトリの告知で確認してください |
確かめ方
- 1OpenDeepWikiを導入しているサーバーやコンテナーを洗い出し、動かしている版を確認します。
- 2設定ファイルのappsettings.jsonで、Jwt:SecretKeyが配布時の値のままか、自組織で変更した値かを確認します。
- 3管理用の /api/adminに、インターネットや社内の広い範囲から到達できないかを、リバースプロキシやファイアウォールの設定から確認します。
何が起きたか
OpenDeepWikiの2.0.6以前では、ログインしていない第三者が管理者になりすませます。管理者向けのAPIが乗っ取られ、利用者・ロール・リポジトリ・設定・APIキーの操作を許してしまう脆弱性です。
原因は、トークンの署名に使う鍵が設定ファイルのappsettings.jsonに固定値として書かれていることです。この鍵は公開リポジトリのv2.0.6のソースから誰でも読めるため、署名を偽造すれば本物と見分けがつきません。具体的には、HS256で署名したベアラートークンにAdminロールの主張を載せて、/api/admin配下のエンドポイントを呼び出せます。
分類はCWE-321で、ハードコードされた暗号鍵にあたります。ベンダーのリポジトリには修正のコミットが公開されています。
攻撃の流れ
-
1
公開鍵の入手
公開されているソースから、署名に使う固定の鍵を読み取ります。
-
2
トークン偽造
その鍵で署名した、Admin権限を名乗るトークンを自分で作ります。
-
3
管理APIに到達
偽造トークンを付けて /api/admin配下にアクセスし、管理者として扱われます。
-
4
設定と鍵の掌握
利用者・ロール・リポジトリ・設定・APIキーを閲覧、変更します。
どう悪用されるか
悪用に認証は要りません。ネットワーク経由で対象のサーバーに到達でき、利用者の操作も必要ありません。攻撃の複雑さは低く、鍵が公開されているため、特別な準備なしに試せる状態です。
CVSSでは機密性・完全性・可用性のいずれも影響が大きいと評価されています。成功すると、攻撃者は管理者として利用者やロールを作り替え、取り込まれたリポジトリや各種設定を変更し、保存されているAPIキーも扱えるようになります。APIキーが外部サービスのものなら、被害はOpenDeepWikiの外に広がるおそれがあります。
今すぐやること
-
1
稼働中の版と公開範囲を確認する
OpenDeepWikiの稼働場所を洗い出し、版と、外部から管理APIに到達できるかを確認します。Dockerで動かしている場合は、次のコマンドでイメージのタグを見られます。
docker ps --format '{{.Names}}\t{{.Image}}' -
2
修正版に更新する
ベンダーのリポジトリで修正を含む版が出ていれば、その版へ更新します。更新後も、署名鍵が配布時の値のまま残っていないかを確かめます。
-
3
署名鍵とAPIキーを交換する
Jwt:SecretKeyを推測されにくい長いランダム値に変更します。あわせて、OpenDeepWikiに登録していたAPIキーを発行元で再発行し、古いキーを無効にします。
-
4
管理者の操作履歴を点検する
身に覚えのない管理者アカウントやロール変更、リポジトリや設定の変更がないかを調べます。アクセスログで、/api/adminへの想定外の接続元も確認します。
すぐ更新できないとき
すぐに更新できないときは、まず /api/adminへのアクセスを、リバースプロキシやファイアウォールで管理者のIPアドレスやVPN経由だけに絞ります。そのうえでJwt:SecretKeyを自組織だけが知る長いランダム値に変えると、公開されている鍵で署名したトークンは通らなくなると考えられます。鍵を変えると発行済みのトークンも無効になるため、利用者には再ログインが必要になる見込みです。
背景
OpenDeepWikiは、AIDotNetが公開しているオープンソースのツールで、リポジトリを取り込んで文書として閲覧できるようにする用途で使われます。管理画面からは利用者やロール、リポジトリ、設定、APIキーを扱えるので、社内の開発資産と外部サービスの認証情報が一か所に集まりやすい製品です。管理者権限を奪われると、その両方に手が届きます。
今回のように、署名鍵が設定ファイルの初期値として配布されていると、それを変えずに使っている環境はすべて同じ鍵を共有していることになります。鍵の強さは関係なく、公開された時点で署名の意味がなくなります。設定ファイルの初期値を本番でも使い続けていないかが、影響の有無を分けます。
よくある質問
Q.社内ネットワークだけで使っていれば、対象外ですか。
まだ分かっていないこと
- 修正版の版番号とリリース日は公表されていません。ベンダーのリポジトリのIssue(#403)やリリースの告知で確認してください。
- 実際の攻撃で悪用されたかどうかは分かっていません。
- 偽造されたトークンによるアクセスが、ログに通常と区別できる形で残るかどうかは分かっていません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 修正版 |
|---|---|---|---|
| AIDotNet | OpenDeepWiki |
2.0.6 以前 |
— |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
OpenDeepWiki through 2.0.6 contains a hard-coded JWT signing key vulnerability that allows unauthenticated attackers to forge administrator tokens using the publicly known Jwt:SecretKey in appsettings.json. Attackers can mint HS256 bearer tokens with an Admin role claim to access /api/admin endpoints and control users, roles, repositories, settings, and API keys.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory hackmd.io
- advisory vulncheck.com
- advisory nvd.nist.gov
- advisory github.com
- package github.com
- patch github.com
- report github.com
- web github.com
- web github.com
- web github.com