SPRING.AUTHZ.MISSING

承認の欠落

このチェッカーは、保護されたリソースへのアクセスがユーザーに承認されているかどうかを検証し、保護されたリソースにユーザーが承認を得ることなくアクセスを試みているケースを報告します。

脆弱性とリスク

攻撃者は、重要データの直接の変更や読み取り、特権機能へのアクセスなどを通じて特権を取得する可能性があります。

軽減と防止

アプリケーション内のすべての特権資産 (機密データを表示する Web ページ、特権機能や管理機能が含まれる Web サイトセクションなど) を特定します。アプリケーションにおけるユーザー役割とそれらのアクセス権限を特定します。資産にアクセスするための特権がユーザーにあるかどうかを常にチェックします。プロジェクト内の保護されたリソース (承認が必要なリソース) に常に適切なセットアップを行います。

脆弱コード例

Spring には、リソースのアクセス制御のためのメカニズムを備えたセキュリティコンポーネントが付属しています。Spring は一連のフィルターを使用してユーザーからの要求を処理します。この例では、configure() メソッドによって、アクセス役割が必要な URL がいくつか定義されています。

コピー
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/version ").hasAnyRole("ADMIN","USER")
           .antMatchers(HttpMethod.PUT ,"/admin/*").hasRole("ADMIN")
           .antMatchers("/setting").authenticated()
          .and().httpBasic();
     }

Klocwork は、9 行目で「'/setting' リソースにアクセスするには承認が必要」という欠陥を報告します。保護されたリソースにアクセスする前に、ユーザーは承認を得る必要があります。この例では、ユーザーは '/setting' にアクセスする認証を受けますが、承認は受けていません。

修正コード例

コピー
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/version ").hasAnyRole("ADMIN","USER")
           .antMatchers(HttpMethod.PUT ,"/admin/*").hasRole("ADMIN")
          .antMatchers("/setting").hasAuthority("ADMIN")
          .and().httpBasic();
     }

修正されたこの例では、Klocwork はもはや欠陥を報告しません。これは、API (承認を必要とするか、または保護されたリソースである API) ごとにユーザーが承認を受けるためです。

関連チェッカー

拡張機能

このチェッカーは、プロジェクトで使用されている保護された API へのアクセスがユーザーに承認されているかをチェックするように調整できます。この調整は、.jkb ファイル内の @CheckerParam オプションを使用して行うことができます。詳細については、Java 解析のチューニングを参照してください。