已开启
【安全】【argus漏洞挖掘问题分析】api-scan-action — Argus 漏洞扫描问题修复 #10
XueYiMing创建于  23 天前
XueYiMing成员
23 天前 创建
字段 内容
项目 api-scan-action
漏洞数量 8 个(中危 2 / 低危 6)
漏洞分类 Supply Chain (3) / Supply Chain Trust (1) / Insecure CI Pinning (1) / SSRF (1) / Missing Authentication (1) / Insecure Configuration (1) / Error Handling Misconfiguration (1)
CWE 编号 CWE-494, CWE-1357, CWE-755, CWE-749, CWE-918, CWE-306
扫描日期 2026-10-12

漏洞清单

# 编号 严重程度 分类 CWE 文件:行号 标题
1 argus-apiscanaction-20261012171404-001 中危 Supply Chain Trust CWE-494 src/index.js:45 从外部仓库克隆代码以可变分支引用执行,无完整性校验
2 argus-apiscanaction-20261012171404-002 中危 Supply Chain CWE-494 src/index.js:56 外部仓库 requirements.txt 无哈希校验直接 pip install
3 argus-apiscanaction-20261012171404-003 低危 Missing Authentication CWE-306 src/index.js:58 扫描结果上传无认证凭据,可伪造扫描结果
4 argus-apiscanaction-20261012171404-004 低危 SSRF CWE-918 src/index.js:20 upload_url 未做 URL 安全校验,可被利用为 SSRF
5 argus-apiscanaction-20261012171404-005 低危 Insecure Configuration CWE-749 src/index.js:56 使用 --break-system-packages 绕过 PEP 668 保护
6 argus-apiscanaction-20261012171404-006 低危 Error Handling Misconfiguration CWE-755 src/index.js:73 上传失败仅 warning 不阻断门禁,安全扫描结果静默丢失
7 argus-apiscanaction-20261012171404-007 低危 Insecure CI Pinning CWE-1357 .gitcode/workflows/api-scan.yml:22 工作流使用 @master 可变引用外部 Action
8 argus-apiscanaction-20261012171404-008 低危 Supply Chain CWE-494 dist/index.js:1 编译产物 inline 依赖,无法通过 lockfile 审计运行时版本

漏洞详情

1. 外部仓库克隆无完整性校验导致供应链 RCE(CWE-494)— 中危

  • 文件: src/index.js:45
  • 描述: api-scan-action 在每次 CI/CD 流水线运行时从外部仓库 openlibing-api-parser 克隆代码并以 Runner 权限执行。由于默认引用可变分支 master 且无完整性校验,一旦攻击者向 master 分支注入恶意代码,所有使用该 Action 且未显式固定 commit SHA 的流水线将自动拉取并执行恶意代码。攻击者可借此窃取 CI/CD Runner 中的 GitHub/GitCode Token、仓库密钥、构建产物,篡改代码扫描结果以绕过安全门禁。
  • 受影响资产: api-scan-action、openlibing-api-parser 外部工具仓库、所有引用该 Action 的 CI/CD 流水线、CI/CD Runner 环境、下游构建产物
  • 修复建议: 将 tool_ref 默认值从 master 改为固定 commit SHA;增加克隆后 SHA256 校验

2. 外部 requirements.txt 无哈希校验直接安装(CWE-494)— 中危

  • 文件: src/index.js:56
  • 描述: 该 GitHub Action 在 CI 流水线执行时,从不受本项目版本控制的外部 Git 仓库克隆工具代码,并直接执行 pip3 install -r requirements.txt 安装其中的 Python 依赖。由于未使用 --require-hashes 哈希校验、未固定 commit SHA、使用第三方 PyPI 镜像源,攻击者可通过篡改外部仓库或注册 typosquatting 包两条路径在 CI 运行环境中实现任意代码执行(RCE)。CI runner 通常持有 GITHUB_TOKEN、ATOMGIT 凭据等敏感密钥,攻击成功后可窃取这些密钥并横向渗透代码仓库。
  • 受影响资产: api-scan-action、CI/CD 运行环境、CI 环境中的 GITHUB_TOKEN/ATOMGIT 密钥、被扫描的代码仓库、外部工具仓库、PyPI 包注册表及清华镜像源
  • 修复建议: 使用 --require-hashes 安装依赖;固定 commit SHA 克隆外部仓库;使用官方 PyPI 源

3. 扫描结果上传无认证(CWE-306)

  • 文件: src/index.js:58
  • 描述: 扫描结果通过外部脚本上传到 openLiBing 平台,当前实现中上传请求不携带任何认证凭据(apig-app-key/apig-app-secret 在 README 中声明但未实现),导致上传端点无法验证请求来源身份。攻击者获取公开的 upload_url 后,可伪造扫描结果上传,从而污染接口兼容性报告或绕过 PR 门禁检测。同时 action.yml 硬编码了含 APIC 标识符的华为云域名,该标识符随 Action 公开分发。
  • 受影响资产: api-scan-action、openLiBing 接口兼容性检测平台上传端点、PR 门禁决策系统、action.yml 中硬编码的华为云 APIC 上传地址
  • 修复建议: 实现上传认证机制,携带 apig-app-key/apig-app-secret;移除 action.yml 中硬编码的 APIC 标识符

4. upload_url 未校验导致 SSRF(CWE-918)

  • 文件: src/index.js:20
  • 描述: upload_url 作为 Action 输入参数从 workflow 的 with 块读取后,未经过任何 URL 安全校验即直接传递给外部 bash 脚本执行 HTTP 上传请求。在 pull_request_target 事件场景下,若调用方 workflow 将 PR 可控数据传入 upload_url,攻击者可控制扫描结果的上传目标地址,导致扫描结果数据泄露、仓库元数据泄露、APIG 凭据泄露,以及利用 SSRF 探测云元数据端点获取云凭据。
  • 受影响资产: api-scan-action 核心入口、外部扫描脚本 openlibing_scan.sh、pull_request_target 事件下的 workflow secrets 访问权限、扫描结果数据文件 results.json
  • 修复建议: 对 upload_url 进行协议白名单校验(仅允许 https://)和域名白名单校验;禁止 file://、gopher:// 等非 HTTP(S) 协议

5. --break-system-packages 绕过 PEP 668 保护(CWE-749)

  • 文件: src/index.js:56
  • 描述: 该 GitHub Action 在安装 Python 依赖时使用 --break-system-packages 标志绕过 PEP 668 externally-managed-environment 保护机制,允许 pip 全局安装覆盖系统级 Python 包。同时使用第三方镜像源(清华大学 PyPI 镜像)而非官方 pypi.org。如果外部仓库的 requirements.txt 被篡改或镜像源被入侵,恶意 Python 包可在安装时通过 setup.py 执行任意代码,覆盖 runner 上的系统工具或植入后门。
  • 受影响资产: api-miner-action 工作流、src/index.js run() 函数、GitHub Actions runner 的 Python 运行时、外部仓库 requirements.txt、清华 PyPI 镜像源
  • 修复建议: 使用虚拟环境(venv)安装依赖而非全局安装;移除 --break-system-packages;使用官方 PyPI 源

6. 上传失败不阻断门禁(CWE-755)

  • 文件: src/index.js:73
  • 描述: 当扫描成功但结果上传失败(退出码 20)时,Action 仅输出 warning 而不标记失败,导致:1) PR 门禁不阻断,开发者可合入未经安全审查的代码;2) 安全扫描结果静默丢失,安全团队无法在 openLiBing 平台获取扫描数据;3) 在上传服务持续故障时形成持续安全盲区。
  • 受影响资产: API-Miner GitHub Action 安全扫描组件、openLiBing 平台上传接口、PR 代码合入门禁流程、安全团队审计面板
  • 修复建议: 上传失败时应标记 Action 失败(exit code 非 0)以阻断 PR 门禁;增加重试机制和告警通知

7. 工作流使用 @master 可变引用(CWE-1357)

  • 文件: .gitcode/workflows/api-scan.yml:22
  • 描述: CI/CD 流水线使用可变 @master 分支引用外部 Action,而非不可变 commit SHA。上游 openlibing/api-scan-action 仓库 master 分支的任何变更(包括被入侵后的恶意提交)会在下次工作流运行时自动拉取并在 CI Runner 上执行。攻击者若获取上游仓库 master 分支推送权限,可向所有使用该工作流的流水线注入恶意代码,窃取 secrets.ROBOT_TOKEN 凭证。
  • 受影响资产: api-scan 工作流配置、CI Runner 运行环境、secrets.ROBOT_TOKEN 凭证、上游仓库 master 分支
  • 修复建议: 将 @master 引用改为固定 commit SHA

8. dist/index.js inline 依赖无法审计(CWE-494)

  • 文件: dist/index.js:1
  • 描述: dist/index.js 作为 GitHub Action 的实际运行入口,将所有依赖(含传递依赖 undici 5.29.0、node-fetch 2.7.0 等)inline 为 27656 行单文件并提交到仓库。安全团队无法通过 package-lock.json 审计运行时实际使用的依赖版本,存在版本漂移和隐蔽篡改风险。
  • 受影响资产: api-scan-action GitHub Action、dist/index.js、package-lock.json、package.json、打包内联依赖
  • 修复建议: 在 CI 构建时从 lockfile 重新构建 dist/index.js 并校验一致性;或对 dist/index.js 生成 SHA256 校验值并在使用时验证
likedislike