SPRING.AUTHC.ABSENT

没有用于关键功能的配置

此检查器会验证是否已针对关键问题执行身份验证,并且会报告项目 API 配置中未包括关键资源的问题。

漏洞与风险

如果软件不针对关键资源执行任何身份验证,攻击者可以获得对敏感数据的访问权限、执行管理功能,甚至执行任意代码。

缓解与预防

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

漏洞代码示例

Spring 提供可验证身份验证的安全组件。

复制
  @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.POST,"/api-docs ").anonymous()
          .antMatchers(HttpMethod.PUT,"/profile").authenticated()
          .and().httpBasic();
     }

Klocwork 在第 9 行报告了 SPRING.AUTHC.ABSENT 缺陷,这表示“配置部分中缺少关键资源 admin”。因为“admin”API 不存在于任何 antMatchers() 中,所以用户可以在不进行身份验证的情况下访问“admin”API。

修正代码示例

复制
  @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.POST,"/api-docs ").anonymous()
          .antMatchers(HttpMethod.PUT,"/profile").authenticated()
          .antMatchers(HttpMethod.PUT ,"/admin").hasRole("admin")
          .and().httpBasic();
     }

在此修正代码示例中,Klocwork 不再报告缺陷,因为关键资源列表中的每个元素都存在于配置中。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

必须调整此检查器,以查找项目中使用的特定关键 API。可以通过在 .jkb 文件中使用 @CheckerParam 选项来进行此操作。有关详情,请参阅调整 Java 分析。