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 不再报告缺陷,因为只有经过身份验证的用户才能访问关键资源。
相关检查器
扩展
可调整此检查器,以查找项目中使用的关键资源,并检查用户是否经过身份验证以便访问这些资源。可以通过在 .jkb 文件中使用 @CheckerParam 选项来进行此操作。有关详情,请参阅调整 Java 分析。