Sayso 遵循以下安全设计原则:
- Fail-Closed: 任何安全检查失败时,默认拒绝执行
- Defense in Depth: 多层安全检查(规则 + LLM 语义)
- Least Privilege: 仅请求必要的系统权限
- Transparency: 开源代码,可审计
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 功能 | 高 |
- 密钥存储在系统 Keychain 中
- 绝不写入日志或配置文件
- Rust 日志中 Authorization header 内容被屏蔽
- 内存中仅在使用时短暂存在
如果你发现了安全漏洞,请通过以下方式报告:
- 不要在公开 Issue 中披露漏洞
- 发送邮件至 [项目维护者邮箱]
- 提供详细的重现步骤和影响评估
- 我们会尽快响应(通常在 48 小时内)
有效的安全报告应包含:
- 漏洞描述
- 影响范围(哪些版本/平台受影响)
- 重现步骤
- 可能的修复建议(可选)
- 你的联系方式(用于后续沟通)
安全修复会通过以下渠道发布:
- GitHub Releases(带
security标签) - CHANGELOG.md 中的安全修复说明
- 必要的安全公告
| 版本 | 支持状态 |
|---|---|
| 0.1.x | 当前版本,接受安全更新 |
如果你不需要命令执行功能,可以在设置中禁用它:
{
"voice": {
"mode_c_hotkey": null // 禁用 Mode C
}
}使用本地 Whisper 替代云端 API(即将支持):
{
"stt_config": {
"endpoint": "http://localhost:8080/v1/audio/transcriptions"
}
}- 2026-03-23: Codex 对抗性代码审查
- 发现 10 个 P1/P2 级别问题,全部修复
- 详见 TODOS.md 中的 "Codex 对抗审查修复记录"
- FSM 状态机并发安全
- 命令执行注入防护
- 音频数据处理边界
- API 密钥泄露风险
- 剪贴板 fallback 策略
我们遵循负责任的披露原则:
- 收到报告后 48 小时内确认
- 7 天内提供初步评估
- 修复完成后 90 天内公开披露(给予用户升级时间)
- 公开时归功于报告者(如要求匿名则尊重)
- 仅从官方渠道下载(GitHub Releases)
- 及时更新到最新版本
- 谨慎使用 Mode C,仅执行你理解的命令
- 定期检查日志是否有异常活动
- 运行
cargo audit检查依赖漏洞 - 提交前运行
cargo test确保测试通过 - 任何涉及命令执行/注入的变更都需要额外审查
- 遵循现有的安全模式(见 ARCHITECTURE.md)
- ARCHITECTURE.md - 架构和安全设计
- TODOS.md - 已知安全问题追踪
- CHANGELOG.md - 安全修复历史