服务器端授权缺失使任何经过认证的用户都可以升级为平台管理员
作者: geo-chen创建于 2026年7月17日更新于 2026年7月17日
v3.4.0 的 pom.xml 中固定的 logi-security-spring-boot-starter-2.10.13.jar 中,com.didiglobal.logi.security.extend.impl.DefaultLoginExtendImpl.interceptorCheck()(从 logi-security-spring-boot-starter-2.10.13.jar 反编译而来):
public boolean interceptorCheck(HttpServletRequest request, HttpServletResponse response,
String requestMappingValue, List<String> whiteMappingValues) throws IOException {
if (StringUtils.isEmpty(requestMappingValue)) { ...; return false; }
for (String mapping : whiteMappingValues) {
if (requestMappingValue.contains(mapping)) return true;
}
if (!this.hasLoginValid(request)) {
this.logout(request, response);
return false;
}
String operator = HttpRequestUtil.getOperator(request);
User user = this.userService.getUserByUserName(operator);
if (user == null) throw new LogiSecurityException(ResultCode.USER_NOT_EXISTS);
this.initLoginContext(request, response, operator, user.getId());
return true;
}hasLoginValid() 仅检查 X-SSO-USER 会话/cookie 是否标识了一个已存在的用户行。此方法(或从 PermissionInterceptor 可访问的任何其他地方)中没有读取调用者的 logi_security_role、logi_security_role_permission 或 logi_security_user_resource 行,并将其与请求的 URL 或资源 ID 进行比较。km-rest 模块中的任何控制器都没有带有任何权限检查的注解 — 对于 RequiresPermission|PreAuthorize|CheckPermission|Aspect 的全面搜索,结果为零。在 logi_security_role 树中种植的权限点树中,
内容来源: didi/KnowStreaming