| शीर्षक | dromara orion-visor v2.5.7 Default Token |
|---|
| विवरण | Orion-visor 中 ExposeApi 硬编码默认令牌认证绕过(CWE-798)
摘要
Orion-visor Bastion 主机使用 ExposeApiAspect 的 @ExposeApi 注释,用于内部代理界面 API 的自定义认证。生产配置 application-prod.yaml 包含硬编码的默认令牌 pmqeHOyZaumHm0Wt。当API_EXPOSE_TOKEN环境变量未被覆盖时,任何知道该公开令牌的远程攻击者都可以绕过认证,访问所有@ExposeApi端点。
详情
根源:ExposeApiAspect.beforeExposeApi()(ExposeApiAspect.java 的第62-77行)中的信任边界失效。@ExposeApi注释带有@PermitAll元注释,导致Spring Security跳过这些端点。认证委托给 ExposeApiAspect 执行,它通过 config.getToken().equals(request.getHeader(config.getHeader()))在第 73 行将请求头令牌与配置好的令牌进行比较。令牌是从 ExposeApiConfig 加载的,绑定到 orion.api.expose。In application-prod.yaml line 86: token: ${API_EXPOSE_TOKEN:pmqeHOyZaumHm0Wt}.备用 pmqeHOyZaumHm0Wt 在开源仓库中公开可见。受影响端点:HostAgentEndpointController.java行64-97(setAgentOnline、setAgentOffline、setAgentHeartbeat、syncHostSpec)和MonitorAgentEndpointController.java行59-76行(addMetrics,syncHostMeta)。完整 API 路径前缀:/orion-visor/api。
核心漏洞代码路径:
Orion-visor-framework/Orion-visor-spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/core/aspect/ExposeApiAspect.java:62-77
@Before(value = “exposeApi(e)”, argNames = “e”)
public void beforeExposeApi(ExposeApi e) {
HttpServletRequest request = Optional.ofNullable(RequestContextHolder.getRequestAttributes())
.map(s -> (ServletRequestAttributes) s)
.map(ServletRequestAttributes::getRequest)
.orElse(null);
如果 (请求 == null) {
throw ErrorCode.EXPOSE_UNAUTHORIZED.exception();
}
if (!config.getToken().equals(request.getHeader(config.getHeader())))) {
log.warn(“expose API unauthorized, URL: {}”, request.getRequestURI());
throw ErrorCode.EXPOSE_UNAUTHORIZED.exception();
}
}
所有 ExposeApi 端点的认证汇入器。简单字符串比较配置后的令牌(默认为 pmqeHOyZaumHm0Wt)与 X-Server-Token 头部。鞋底保护机制。
Orion-visor-framework/Orion-visor-Spring-boot-starter-web/src/main/java/org/dromara/visor/framework/web/core/annotation/ExposeApi.java:35-45
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@PermitAll
公共@interface ExposeApi {
字符串源()默认“”;
}
@ExposeApi元注释了@PermitAll,导致Spring Security绕过了这些端点的认证。首先,信任边界失效。
# Orion-visor-launch/src/main/resources/application-prod.yaml:83-86
揭露:
token: ${API_EXPOSE_TOKEN:pmqeHOyZaumHm0Wt}
Production config with hardcoded default token pmqeHOyZaumHm0Wt.在开源仓库中公开可见。
Orion-visor-modules/Orion-visor-module-asset/Orion-visor-module-asset-service/src/main/java/org/dromara/visor/module/asset/controller/HostAgentEndpointController.java:64-97
@ExposeApi @GetMapping(“/set-online”) public HostOnlineAgentConfigVO setAgentOnline(...){ ... }
@ExposeApi @GetMapping(“/set-offline”)公用布尔 setAgentOffline(...){ ... }
@ExposeApi @GetMapping(“/心跳”)公共布尔集合AgentHeartbeat(...){ ... }
@ExposeApi @PostMapping(“/sync-host-spec”)公共布尔 syncHostSpec(...){ ... }
HostAgentEndpointController中有四个@ExposeApi入口点,通过认证绕过后可访问。允许代理状态操作和数据注入。
有色人种
Precondition: System uses default ExposeApi token pmqeHOyZaumHm0Wt (API_EXPOSE_TOKEN env var not overrideden).
步骤1 - 验证绕过:用X-Server-Token获取/orion-visor/api/host/agent-endpoint/heartbeat:pmqeHOyZaumHm0Wt,X-Agent-Key:测试。预期:HTTP 200(非401),确认绕过。
步骤2 - 注入数据:POST /orion-visor/api/host/agent-endpoint/sync-host-spec?taskId=1,且令牌头和主体相同{“osName”:“compromised”,“cpuCores”:999}。预期:HTTP 200真实、恶意数据写入。
影响
远程未认证攻击者通过公开的默认令牌绕过了ExposeApi认证。可以操控主机代理状态,伪造心跳,注入虚假监控和主机规格数据。CVSS 9.8 危急 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H。
修复
从配置中移除硬编码的默认令牌。2. 启动时要求强制性API_EXPOSE_TOKEN。3. 每次部署生成唯一的随机令牌。4. 考虑mTLS或JWT认证。5.添加IP白名单。6. 通知用户轮换代币。
披露说明
代币在开源仓库中公开可见。通过代码审核发现的。受影响:v2.5.7 确认。补丁时间表:待定。
补充信息
受影响产品
生态系统:自架
包裹名称:Orion-visor
受影响版本:v2.5.7
已修补版本:待定
严重程度
评分方法:CVSS v3.1
评分:9.8
矢量字符串:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
弱点
CWE:CWE-798 硬编码凭证的使用
项目地址:https://github.com/dromara/orion-visor 报告人:sumo166 邮箱:[email protected] GitHub 个人资料:https://github.com/sumo166 vuldb ID:summmm |
|---|
| स्रोत | ⚠️ https://github.com/dromara/orion-visor/issues/170;https://github.com/sumo166/CVE-apply/blob/main/dromara-orion-visor/ExposeApi%20Hardcoded%20Default%20Token%20Authentication%20Bypass%20(CWE-798)_en.md |
|---|
| उपयोगकर्ता | summmm (UID 69690) |
|---|
| सबमिशन | 31/07/2026 11:25 AM (1 महीना पहले) |
|---|
| संयम | 12/09/2026 10:58 AM (1 month later) |
|---|
| स्थिति | स्वीकृत |
|---|
| VulDB प्रविष्टि | 403097 [dromara orion-visor तक 2.5.7 ExposeApiAspect.java ExposeApiAspect.beforeExposeApi कमजोर प्रमाणीकरण] |
|---|
| अंक | 20 |
|---|