Skip to content

安全/数据审计跟踪:凭据存储、云端假设与 promo 依赖风险 #216

@appergb

Description

@appergb

背景

基于 pr-206 工作区当前状态做了一轮安全与数据审核。目标是把可验证结论和需要后续处理的安全假设统一落到 issue,避免审计结果散在本地上下文里。

已审计范围

  • 本地变更:openless-all/app/src-tauri/src/commands.rsopenless-all/app/src/pages/QaPanel.tsx
  • 未跟踪数据/项目:AGENTS.mdpromo-openless-v2/
  • 云/数据库线索:repo 内配置、.github/workflows/*、Tauri updater 配置、MCP 资源可见性
  • 依赖检查:主 app 与 promo 项目 npm audit;主 app build;Rust cargo check;promo tsc

结论摘要

  • pr-206 现有两处代码改动未发现直接新增敏感数据泄漏:prefs:changed 广播的是 UserPreferences,按当前 TS/Rust 类型不包含 API key / token / 密码。
  • 未发现仓库内存在 Supabase / Postgres / Cloudflare D1 / Firebase / Prisma / Drizzle 等云数据库连接配置;设计交付文档还写了“不要做云同步”。当前没有可用 DB MCP/凭据,因此无法直接登录所谓“云端所有数据库”做表级审计;更准确的结论是:仓库中未发现云数据库资产,需要人工确认是否存在仓库外云资产。
  • 发现若干应跟踪的安全/数据风险,见下方任务清单。

风险与待办

  • 凭据存储假设不一致CLAUDE.md:96 说凭据在 Keychain,明文 JSON 只是 legacy fallback;但 openless-all/app/src-tauri/src/persistence.rs:108-125 / :236-303 / :661-718 显示当前实现为 ~/.openless/credentials.json 纯 JSON,写 0600 权限但不使用 Keychain。需要决定:恢复 Keychain / 加密本地凭据 / 更新文档与威胁模型。
  • Tauri CSP 关闭openless-all/app/src-tauri/tauri.conf.json:68-70 设置 "csp": null。桌面 app 不是普通网页,但 QA 面板渲染 markdown 且 app 有 IPC surface,建议建立最小 CSP 或写清楚关闭原因与 XSS/IPC 边界。
  • PR-Agent 云端 secret 暴露面.github/workflows/pr-agent.yml:4-33 使用 pull_request_target,给外部 PR 可触发路径注入 OPENAI_KEY 与自定义 OpenAI-compatible API base,且 action 使用 the-pr-agent/pr-agent@main 未 pin SHA。当前注释说明不 checkout PR 代码,但仍建议 pin action、限制触发条件、评估 issue_comment 路径和 third-party action 供应链风险。
  • Release signing 假设.github/workflows/release-tauri.yml:99-117 在 Apple signing/notarization secrets 缺失时只 warning,可能产出 ad-hoc macOS release;需要确认正式 tag 是否必须 fail closed。
  • promo 项目依赖漏洞promo-openless-v2npm audit --audit-level=moderate 报 4 个 moderate,链路是 postcss <8.5.10GHSA-qx2v-qp2m-jg93)经 @remotion/bundler / @remotion/cli / @remotion/studio-server 引入。建议升级 Remotion 或执行 npm audit fix 后复查。
  • promo 未跟踪数据体量/隐私边界promo-openless-v2/ 当前未跟踪,包含约 190 个媒体文件/截图/视频引用,并且 node_modules/out/public/SC/ 被该目录自己的 .gitignore 忽略。需要人工确认这些素材是否可公开、是否包含用户录屏/个人信息,以及最终是否只提交源文件而不是构建产物。
  • 云数据库资产清单确认:仓库内未发现云 DB 配置,MCP 资源中也没有数据库资源。若实际有 Supabase/Neon/RDS/D1 等云资产,请补充项目名、环境、只读审计凭据或导出的 schema/RLS/policy 清单,再做表级数据与权限审核。

验证记录

  • npm run build in openless-all/app 通过(Vite 有动态/静态 import chunk warning,非阻塞)
  • cargo check --manifest-path src-tauri/Cargo.toml 通过(16 个既有 dead-code warning)
  • npm run check in promo-openless-v2 通过
  • npm audit --audit-level=moderate in promo-openless-v2 失败并报告 4 个 moderate 漏洞
  • npm audit --audit-level=moderate in openless-all/app 两次因 npm registry TLS 连接中断未完成,需要网络恢复后重跑

关联上下文

  • 当前本地分支:pr-206
  • 当前本地未跟踪:AGENTS.mdpromo-openless-v2/
  • 当前被 ignore 的敏感本地文件:密钥对.zip 已由根 .gitignore 排除,未进入待提交集

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions