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