Skip to content

Security: wangzhs/sayso

Security

SECURITY.md

Security Policy

安全设计原则

Sayso 遵循以下安全设计原则:

  1. Fail-Closed: 任何安全检查失败时,默认拒绝执行
  2. Defense in Depth: 多层安全检查(规则 + LLM 语义)
  3. Least Privilege: 仅请求必要的系统权限
  4. Transparency: 开源代码,可审计

已知安全边界

命令模式 (Mode C) 风险

Mode C 允许语音控制执行 shell 命令,这是一个高风险功能

  • 范围: 仅执行用户已批准的命令
  • 确认: 危险命令需要用户显式确认
  • 超时: 命令执行有 30 秒超时限制
  • 审计: 所有命令记录在日志中(不含 API key)

命令注入防护

Sayso 使用直接执行模型(而非 shell 执行)来防止命令注入:

// 安全:直接执行程序
Command::new("git").args(["status"]).output()

// 危险:通过 shell 执行(Sayso 不使用)
Command::new("sh").arg("-c").arg("git status")

这可以防止 CVE-2024-24576 类注入攻击。

权限模型

权限 用途 风险等级
麦克风 语音输入
辅助功能 文字注入
网络 STT/LLM API 调用
命令执行 Mode C 功能

API 密钥保护

  • 密钥存储在系统 Keychain 中
  • 绝不写入日志或配置文件
  • Rust 日志中 Authorization header 内容被屏蔽
  • 内存中仅在使用时短暂存在

报告安全问题

如果你发现了安全漏洞,请通过以下方式报告:

  1. 不要在公开 Issue 中披露漏洞
  2. 发送邮件至 [项目维护者邮箱]
  3. 提供详细的重现步骤和影响评估
  4. 我们会尽快响应(通常在 48 小时内)

报告内容

有效的安全报告应包含:

  • 漏洞描述
  • 影响范围(哪些版本/平台受影响)
  • 重现步骤
  • 可能的修复建议(可选)
  • 你的联系方式(用于后续沟通)

安全更新

安全修复会通过以下渠道发布:

  1. GitHub Releases(带 security 标签)
  2. CHANGELOG.md 中的安全修复说明
  3. 必要的安全公告

版本支持

版本 支持状态
0.1.x 当前版本,接受安全更新

安全相关配置

禁用命令模式

如果你不需要命令执行功能,可以在设置中禁用它:

{
  "voice": {
    "mode_c_hotkey": null  // 禁用 Mode C
  }
}

使用本地 STT

使用本地 Whisper 替代云端 API(即将支持):

{
  "stt_config": {
    "endpoint": "http://localhost:8080/v1/audio/transcriptions"
  }
}

安全审计

已完成的审计

  • 2026-03-23: Codex 对抗性代码审查
    • 发现 10 个 P1/P2 级别问题,全部修复
    • 详见 TODOS.md 中的 "Codex 对抗审查修复记录"

审计重点领域

  • FSM 状态机并发安全
  • 命令执行注入防护
  • 音频数据处理边界
  • API 密钥泄露风险
  • 剪贴板 fallback 策略

漏洞披露政策

我们遵循负责任的披露原则:

  1. 收到报告后 48 小时内确认
  2. 7 天内提供初步评估
  3. 修复完成后 90 天内公开披露(给予用户升级时间)
  4. 公开时归功于报告者(如要求匿名则尊重)

最佳实践

作为用户

  • 仅从官方渠道下载(GitHub Releases)
  • 及时更新到最新版本
  • 谨慎使用 Mode C,仅执行你理解的命令
  • 定期检查日志是否有异常活动

作为开发者

  • 运行 cargo audit 检查依赖漏洞
  • 提交前运行 cargo test 确保测试通过
  • 任何涉及命令执行/注入的变更都需要额外审查
  • 遵循现有的安全模式(见 ARCHITECTURE.md)

相关文档

There aren’t any published security advisories