junfuture1103/CVE-2026-55511
GitHub: junfuture1103/CVE-2026-55511
针对 Yamcs 任务控制系统 StreamSQL 中 Java 代码注入漏洞(CVE-2026-55511)的非武器化概念验证与技术分析文档。
Stars: 0 | Forks: 0
# CVE-2026-55511:Yamcs StreamSQL 认证 RCE
CVE-2026-55511 的非武器化概念验证与技术文档,这是 Yamcs StreamSQL 聚合表达式编译器中存在的一个认证 Java 代码注入漏洞。
| 字段 | 值 |
| --- | --- |
| 产品 | Yamcs (`org.yamcs:yamcs-core`) |
| 安全公告 | [GHSA-3g44-3m7x-cgg2](https://github.com/yamcs/yamcs/security/advisories/GHSA-3g44-3m7x-cgg2) |
| 弱点 | CWE-94:代码生成控制不当 |
| 严重程度 | 严重,CVSS 3.1:9.1 |
| 向量 | `CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H` |
| 所需权限 | `SystemPrivilege.ControlArchiving` |
| 已修复版本 | Yamcs 5.13.2 和 5.12.8 |
| 主线补丁 | [`b65a3d78178ba99a58b753feda6ecc3b5a694f13`](https://github.com/yamcs/yamcs/commit/b65a3d78178ba99a58b753feda6ecc3b5a694f13) |
## 概述
Yamcs 接受 StreamSQL 对象的双引号名称,并且在受影响的版本中,允许这些名称中包含几乎任何字符。诸如 `sum(...)` 之类的聚合表达式会使用列名动态构建 Java 源代码,并使用 Janino `SimpleCompiler` 编译该源代码。
易受攻击的代码在将列名放入生成的 Java 标识符之前,仅应用了极少的名称清理。因此,拥有 `ControlArchiving` 权限的经过认证的用户可以创建特制的带引号列名,通过 `POST /api/archive/{instance}:executeSql` 到达聚合编译器,并在 Yamcs 服务器的 JVM 中执行受攻击者影响的 Java 代码。
这跨越了预期的 Yamcs 授权边界:`ControlArchiving` 允许进行存档、表和流管理,但并不意在授予在服务器上执行任意 Java 代码的权限。
## 受影响版本
| 发布线 | 受影响 | 已修复 |
| --- | --- | --- |
| 5.13.x | 5.13.1 及更早版本 | 5.13.2 |
| 5.12.x | 5.12.7 及更早版本 | 5.12.8 |
升级至 Yamcs 5.13.2、5.12.8 或更高版本的受支持版本。
## 技术细节
易受攻击的数据流如下:
```
POST /api/archive/{instance}:executeSql
-> TableApi.executeSql
-> Yarch StreamSQL parser
-> double-quoted object name
-> SelectExpression aggregate binding
-> SumExpression.aggregateFillCode_newData
-> Expression.fillCode_InputDefVars
-> CompilableAggregateExpression.getCompiledAggregate
-> Janino SimpleCompiler.cook
-> attacker-influenced Java executes in the Yamcs JVM
```
三个条件共同导致了此问题:
1. 易受攻击的 `S_DOUBLE_QUOTED_IDENTIFIER` 语法接受除 CR、LF 和 `"` 之外的任何字符。
2. `Expression.fillCode_InputDefVars` 从列名中派生 Java 变量名。其 `sanitizeName` 辅助方法仅替换 `/` 和 `-`。
3. 生成的聚合类使用 Janino 编译和加载,没有限制性的表达式沙箱。
这使得在生成的 `newData(Tuple)` 方法中可以使用 Java 语法字符,如分号、空格、括号、赋值运算符和点。与纯表达式路径不同,聚合方法提供了可达的语句上下文,注入的语句可以在其中编译和执行。
## 前置条件与影响
利用此漏洞需要一个持有 `SystemPrivilege.ControlArchiving` 权限的经过认证的账户。没有该权限的账户将被 `TableApi.executeSql` 授权检查拒绝。
成功利用此漏洞将以 Yamcs 服务进程的权限运行 Java。根据部署隔离情况,这可能会影响任务数据和主机环境的机密性、完整性和可用性。此问题不是未经认证的 RCE,其本身也不会将 Yamcs 进程的权限提升至超出其操作系统或容器权限。
## 概念验证
包含的 [`poc.py`](poc.py) 特意设计为非武器化:
- 它不连接实时的 Yamcs 服务器;
- 它不执行操作系统命令;
- 它在本地 Yamcs 检出中验证相关的易受攻击源代码链;
- 它生成聚合代码生成模式的小型 Java 模型;并且
- 它仅设置一个无害的 JVM 属性标记。
### 要求
- Python 3.9+
- 本地 Yamcs 源码检出
- 可选的 JDK(`javac` 和 `java`)用于无害标记测试
### 运行
```
cd /path/to/yamcs
python3 /path/to/poc.py \
--json /tmp/evidence.json \
--log /tmp/crash_evidence.log \
--expect-crash
```
预期指标:
```
source_chain_confirmed=true
generated_source_injection_present=true
marker_executed=true
```
## 证据
- [`evidence/evidence.json`](evidence/evidence.json):结构化的源代码链和 Java 模型结果
- [`evidence/crash_evidence.log`](evidence/crash_evidence.log):简洁的验证日志
包含的证据是针对 Yamcs 源码提交 `98a05e95461207c143e4297ec4bb1b5a76e9cb19` 生成的。它确认了易受攻击的源代码链、生成的源代码注入以及无害标记执行。
## 官方补丁
上游修复标题为 `Avoid RCE through double-quoted identifiers`:
- 主线 / 5.13.x:[`b65a3d78178ba99a58b753feda6ecc3b5a694f13`](https://github.com/yamcs/yamcs/commit/b65a3d78178ba99a58b753feda6ecc3b5a694f13),发布于 5.13.2
- 5.12.x 向后移植:[`8c1070b12c0a6c003903325cb2a1013347e2dbde`](https://github.com/yamcs/yamcs/commit/8c1070b12c0a6c003903325cb2a1013347e2dbde),发布于 5.12.8
核心更改将双引号标识符从几乎不受限制的字符集:
```
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" (~["\n","\r","\""])* "\"" >
```
限制为字母、数字、`$`、`_`、`#` 和 `.` 的白名单:
```
< S_DOUBLE_QUOTED_IDENTIFIER: "\"" ( | | )+ "\"" >
```
在名称进入 Java 代码生成阶段之前,这会拒绝报告的注入所需的语句分隔符和表达式构建字符。该补丁还更新了生成的解析器文件、文档和相关测试。
此限制可能会影响包含空格或非白名单标点符号的现有带引号对象名。在升级或向后移植之前,请审查 StreamSQL schema 和自动化流程。
## 与 CVE-2026-44632 的区别
CVE-2026-55511 是与 CVE-2026-44632 / GHSA-524g-x36v-9wm6 不同的入口点。CVE-2026-44632 涉及 `JavaExprAlgorithmExecutionFactory`,是通过任务数据库算法覆盖功能到达的,并由 `ChangeMissionDatabase` 控制。
此问题位于 `org.yamcs.yarch.streamsql` 中,通过 `executeSql` 到达,并由 `ControlArchiving` 控制。早期的 5.13.0 / 5.12.7 算法路径修复并未修改 StreamSQL 编译器或其带引号标识符的处理方式。
## 附加文档
- [`VULNERABILITY_REPORT.md`](VULNERABILITY_REPORT.md):扩展的漏洞报告
- [`PATCH_ANALYSIS.md`](PATCH_ANALYSIS.md):详细的上游补丁分析和兼容性说明
## 参考
- [官方 Yamcs 安全公告:GHSA-3g44-3m7x-cgg2](https://github.com/yamcs/yamcs/security/advisories/GHSA-3g44-3m7x-cgg2)
- [官方主线修复提交](https://github.com/yamcs/yamcs/commit/b65a3d78178ba99a58b753feda6ecc3b5a694f13)
- [官方 5.12.x 修复提交](https://github.com/yamcs/yamcs/commit/8c1070b12c0a6c003903325cb2a1013347e2dbde)
仅在您拥有或明确获得授权进行测试的系统中使用此材料。
标签:JS文件枚举, PoC, RCE, 暴力破解, 逆向工具