バグ概要 youlai-boot は、Spring Boot 3 ベースの単一アプリケーションのバックエンド管理システムです。そのセキュリティ層は無状態(ステートレス)であり、JWT フィルターはログインパス、验证码パス、トークン更新パス、WebSocket、API ドキュメントなどの少数のホワイトリストパスを除き、すべてのリクエストに対して認証を行います。機能的な認可は、Spring のメソッドセキュリティのみによって実現されており、 注釈が各ハンドラーに付与されています。しかし、権限の強制に関する MVC インターセプターやアスペクトが存在しないため、認証済みの呼び出し元は 注釈が付与されていないすべてのハンドラーにアクセスすることができます。 このレポートでは、バージョン v2.21.1 で特権状態が変更され、かつ 注釈が欠落している 2 つのハンドラーについて扱います。一方、同じコントローラー内の他のハンドラーには注釈が付いています。 影響範囲 脆弱性 1:未承認のロール-権限割り当てによる権限昇格 - エンドポイント: - ハンドラー: - 欠落チェック: - 影響:認証済み低権限ユーザーは、任意のメニューおよびボタン権限をロールに割り当てることができ、これにより直ちに管理者レベルの権限を獲得します。 脆弱性 2:未承認のユーザーステータスエンドポイントによるアカウント状態改ざん - エンドポイント: - ハンドラー: - 欠落チェック: - 影響:認証済み低権限ユーザーは、スーパー管理者アカウント(root)または管理者アカウント(admin)を無効化することができ、これらのアカウントによる認証を阻止します。また、以前無効化された管理者アカウントを再度有効化することも可能です。 修正策 脆弱性 1: ハンドラーに 注釈を追加し、適切な権限を持つユーザーのみがエンドポイントを呼び出せるようにします。 脆弱性 2: ハンドラーに 注釈を追加し、適切な権限を持つユーザーのみがエンドポイントを呼び出せるようにします。 詳細な攻撃手順 脆弱性 1:権限昇格 1. 根本原因:プラットフォームは機能的な認可を定義していますが、ロール権限を上書きするハンドラー上の注釈を無視しています。 2. 攻撃フロー: - 認証済み低権限ユーザーが エンドポイントを呼び出します。 - このエンドポイントは、ロールのメニューおよびボタン権限セットを上書きし、Redis 内のロール権限キャッシュを更新します。 - 認可チェックがないため、低権限ユーザーは任意のメニューおよびボタン権限をロールに割り当てることができます。 - 権限キャッシュは同じ呼び出しの中で更新されるため、呼び出し元は直ちに管理者レベルの権限を獲得します。 脆弱性 2:アカウント状態改ざん 1. 根本原因:プラットフォームは機能的な認可を定義していますが、ユーザーステータスを更新するハンドラー上の注釈を無視しています。 2. 攻撃フロー: - 認証済み低権限ユーザーが エンドポイントを呼び出します。 - このエンドポイントは、認可チェックや、対象ユーザーが非特権ユーザーであることを確認する保護なしに、任意のユーザーアカウントの有効化・無効化を行います。 - 低権限ユーザーはスーパー管理者アカウント(root)または管理者アカウント(admin)を無効化し、これらのアカウントによる認証を阻止することができます。また、以前無効化された管理者アカウントを再度有効化することも可能です。 検証 影響と制限:両方の脆弱性には、認証済みの呼び出し元が必要です。修正されたリリースコミットにおいて静的ソースコードレビューによって確認されました。ランタイムでの検証は実行されていません。 参照 CVE 番号:CWE-862 認可の欠落、CWE-269 不適切な権限管理 ステータス:これらのエンドポイントに対する公開公告はまだ発表されていません。本稿作成時点では、公開済みの CVE は同じコントローラー内の他のエンドポイントをカバーしています(参照およびデデュープノート参照)。 コードブロック まとめ 脆弱性 1:未承認のロール-権限割り当てによる権限昇格。 脆弱性 2:未承認のユーザーステータスエンドポイントによるアカウント状態改ざん。 修正策:関連するハンドラーに 注釈を追加し、適切な権限を持つユーザーのみがこれらのエンドポイントを呼び出せるようにします。