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 不再报告缺陷,因为关键资源列表中的每个元素都存在于配置中。
相关检查器
扩展
必须调整此检查器,以查找项目中使用的特定关键 API。可以通过在 .jkb 文件中使用 @CheckerParam 选项来进行此操作。有关详情,请参阅调整 Java 分析。