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 解析のチューニングを参照してください。