SPRING.AUTHC.MISSING

重要な機能に対する承認の欠落

このチェッカーは、保護されたリソースにアクセスするための認証をユーザーが得ているかを確認し、匿名ユーザーが重要リソースへのアクセスを試みているケースを報告します。

脆弱性とリスク

認証を要求しないと、攻撃者によって機密データへのアクセス権の取得、管理機能の実行、任意のコードの実行などが行われる可能性があります。

軽減と防止

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

脆弱コード例 1

Spring には、認証をチェックできるセキュリティコンポーネントが付属しています。

コピー
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/setting/guest/create").permitAll()
           .antMatchers(HttpMethod.POST,"/api-docs").anonymous()
           .antMatchers("setting/admin/**").hasAnyRole("ADMIN")
          .antMatchers(HttpMethod.GET,"/admin/accountInfo").anonymous()
          .antMatchers(HttpMethod.PUT,"/profile").authenticated()
          .and().httpBasic();
     }

Klocwork は、10 行目で「'/accountInfo' リソースにアクセスするには認証が必要」という SPRING.AUTHC.MISSING 欠陥を報告します。この例では、ユーザーは認証なしで '/accountInfo' にアクセスできます。AntMatchers() は GET メソッドを使用しており、'/accountInfo' は共同リソースではありません。'/accounInfo' にアクセスするには、ユーザーは認証を得ている必要があります。

修正コード例 1

コピー
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
           
           http.authorizeRequests()
           .antMatchers(HttpMethod.POST,"/setting/guest/create").permitAll()
           .antMatchers(HttpMethod.POST,"/api-docs ").anonymous()
          .antMatchers("setting/admin/**").hasAnyRole("ADMIN")
          .antMatchers(HttpMethod.GET,"/admin/accountInfo").hasAuthority("ADMIN")
          .antMatchers(HttpMethod.PUT,"/profile").authenticated()
          .and().httpBasic();
     }

修正されたこの例では、Klocwork はもはや欠陥を報告しません。これは、認証されたユーザーだけが重要リソースにアクセスでき、共同リソースには匿名要求を使用してアクセスできるためです。

脆弱コード例 2

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

Klocwork は、7 行目で「'admin' リソースにアクセスするには認証が必要」という SPRING.AUTHC.MISSING 欠陥を報告します。この例では、ユーザーは認証なしで '/admin' にアクセスできます。AntMatchers() は POST メソッドを使用しており、'/admin' は重要リソースです。'/admin' にアクセスするには、ユーザーは認証を得ている必要があります。

修正コード例 2

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

修正されたこの例では、Klocwork はもはや欠陥を報告しません。これは、認証されたユーザーだけが重要リソースにアクセスできるためです。

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。

拡張機能

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