AstroBlocksに管理者なりすまし脆弱性、3.4.0で修正
AstroBlocksの3.4.0より前では、第三者が管理者のセッショントークンを偽造し、CMSを丸ごと操作できます。3.4.0に更新して署名用のシークレットを設定し、不審な管理操作がないかも調べてください。
急ぎ度: 至急
CVSS v3は9.8で、認証なしにネットワーク経由で管理者権限を取られうる一方、修正版の3.4.0がすでに公開されているためです。
関係があるか
AstroのサイトにAstroBlocksを組み込み、管理画面を本番環境やステージング環境に公開している組織が対象です。公式ドキュメントのとおりに認証を設定した環境も含まれます。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| @astroblocks/astro-blocks(npm) | 3.4.0より前のすべての版。認証機能が入った0.3.0以降で、最新の影響版は3.3.2 | 3.4.0 |
確かめ方
- 1package.jsonとロックファイルで@astroblocks/astro-blocksの版を確認します。3.4.0未満なら次の確認に進みます。
- 2稼働中の環境にCMS_JWT_SECRETが設定されているかを確認します。3.4.0未満が読むのはこの名前だけです。未設定なら、公開パッケージに含まれる固定値で署名と検証が行われています。
- 3ASTRO_BLOCKS_JWT_SECRETだけを設定している場合も該当します。ドキュメントはこちらの名前を案内していましたが、3.4.0未満のコードは読んでいませんでした。
何が起きたか
AstroBlocksの管理画面に、管理者(owner)のセッショントークンを第三者が偽造できる脆弱性があります。偽造されたトークンは正規のものとして通り、コンテンツ、ユーザー、メディア、リダイレクト、設定を作成・削除できてしまいます。
原因は、トークンの署名に使うシークレットの扱いにあります。シークレットが未設定のとき、3.4.0より前のサーバーは固定の値で署名と検証を行います。この固定値はnpmで配布されるパッケージのソースに入っており、誰でも読めます。
さらに、コードがシークレットを読む環境変数はCMS_JWT_SECRETでしたが、README.mdとAGENTS.consumer.mdはASTRO_BLOCKS_JWT_SECRETを設定するよう案内していました。ドキュメントのとおりに設定した運用者ほど、気づかないまま公開の固定値で動かしていた可能性があります。弱点の種類はCWE-321(ハードコードされた暗号鍵の使用)とCWE-798(ハードコードされた認証情報の使用)です。
修正を取り込んだPull Requestは2026年7月2日にマージされ、GitHubの勧告も同日付です。CVEの公表は11月11日でした。依存パッケージを定期的に更新している環境なら、すでに3.4.0以降になっているかもしれません。
攻撃の流れ
-
1
固定値の入手
公開されているパッケージのソースから、シークレット未設定時に使われる固定値を読み取ります。
-
2
トークンの偽造
その固定値で署名し、ownerの役割を持つセッショントークンを作ります。
-
3
管理機能へ提示
偽造したトークンを管理機能に示すと、サーバーは正規の管理者として扱います。
-
4
CMSの掌握
コンテンツ、ユーザー、メディア、リダイレクト、設定を作成・削除できる状態になります。
どう悪用されるか
攻撃者はログイン情報を持っている必要がなく、利用者の操作も要りません。管理画面にネットワーク経由で到達できれば成立します。CVSSの攻撃条件の複雑さは低で、必要な知識は、パッケージから読める固定値だけです。
成功すると、CMSの管理権限をすべて握られます。機密性、完全性、可用性の影響はいずれも高です。公開サイトの内容やリダイレクトも書き換えられるため、サイトの閲覧者にも影響が及びえます。
今すぐやること
-
1
導入している版を確認する
ステージング環境や過去に作ったサイトも含め、AstroBlocksを使うプロジェクトを洗い出し、版が3.4.0未満かどうかを確認します。
npm ls @astroblocks/astro-blocks -
2
3.4.0以降に更新し、シークレットを設定する
修正版に更新し、ASTRO_BLOCKS_JWT_SECRETに32文字以上のランダムな値を新しく生成して設定します。3.4.0の本番ビルドは、シークレットが未設定だと管理画面のログインが503を返して使えなくなります。公開サイトの表示は止まりません。古い版の時期に偽造されたトークンを無効にするため、以前使った値の使い回しは避けます。
-
3
不審な管理操作の跡を調べる
見覚えのないユーザー、特にownerの役割を持つアカウントがないかを確認します。コンテンツ、メディア、リダイレクト、設定に身に覚えのない変更がないかも見ます。管理機能へのアクセスログがあれば、通常と違う接続元からの操作を探します。
-
4
未設定のまま公開している環境を残さない
更新が遅れる環境があれば、下記の回避策を先に適用します。管理画面を社内ネットワークやVPNからだけ到達できるようにしておくと、更新までの間の露出を減らせます。
すぐ更新できないとき
3.4.0未満のまま運用を続ける場合は、3.4.0未満が実際に読む環境変数のCMS_JWT_SECRETに、32文字以上のランダムな強い値を設定します。値を変えると、偽造された可能性のあるトークンも無効になります。ASTRO_BLOCKS_JWT_SECRETを設定しても3.4.0未満では読まれないため、回避策になりません。あくまで更新までのつなぎで、3.4.0以降への更新が推奨されています。
背景
AstroBlocksは、Astroのプロジェクトに組み込むブロック型のCMSです。記事などのコンテンツに加えて、ユーザー、メディア、リダイレクト、設定を管理画面から扱います。認証は0.3.0で導入されました。管理者のトークンの署名に使う鍵が固定値に落ちる状態は、その管理画面の入口を無効にするのと変わりません。
修正の過程で、ドキュメントにも食い違いが見つかりました。ASTRO_BLOCKS_ADMIN_USERとASTRO_BLOCKS_ADMIN_PASSWORDという変数は案内されていましたが、コードは一度も読んでいませんでした。実際には、管理者アカウントは初回ログイン時に作られます。トークンもhttpOnlyのCookieではなく、Bearerヘッダーで扱われます。READMEとAGENTS.consumer.mdはこれらを訂正済みです。設定したはずの値が効いていなかった可能性があるため、環境変数が実際に読まれているかも見直す価値があります。
よくある質問
Q.管理者のパスワードを強くしていれば防げますか。
Q.更新後もCMS_JWT_SECRETのままで問題ありませんか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
AstroBlocks is a block-first CMS for Astro projects. Prior to version 3.4.0, admin session tokens can be forged due to a hard-coded fallback JWT secret and a mismatched environment variable name. An attacker who knows the public fallback value (readable in the published package) can forge a valid session token with role: "owner" and obtain full administrative control of the CMS — creating/deleting content, users, media, redirects, and configuration. This issue has been patched in version 3.4.0.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- patch github.com
- patch github.com
- web github.com