SPRING.AUTHC.MISSING

缺少对关键功能的授权

此检查器会验证用户是否经过身份验证,以便访问受保护的资源并报告匿名用户尝试访问关键资源的情况。

漏洞与风险

通过不要求身份验证,攻击者可以获得对敏感数据的访问权限、执行管理功能,甚至执行任意代码。

缓解与预防

标识您的应用程序中的所有特权资产,例如显示敏感数据的网页、包含特权或管理功能的网站部分,等等。标识应用程序中的用户角色及其访问权限。始终检查用户是否应该有权访问资产。始终为关键资源和公共资源进行适当的设置。

漏洞代码示例 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 行报告了 SPRING.AUTHC.MISSING 缺陷,这表示“需要进行身份验证才能访问“account/Info”资源”。在此示例中,用户无需进行身份验证即可访问“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 行报告了 SPRING.AUTHC.MISSING 缺陷,这表示“需要进行身份验证才能访问“admin”资源”。在此示例中,用户无需进行身份验证即可访问“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 分析。