服务器端授权缺失使任何经过认证的用户都可以升级为平台管理员

作者: 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 反编译而来):

java
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_rolelogi_security_role_permissionlogi_security_user_resource 行,并将其与请求的 URL 或资源 ID 进行比较。km-rest 模块中的任何控制器都没有带有任何权限检查的注解 — 对于 RequiresPermission|PreAuthorize|CheckPermission|Aspect 的全面搜索,结果为零。在 logi_security_role 树中种植的权限点树中,

内容来源: didi/KnowStreaming