Skip to content

Security: cnwinds/cursor-pulse

Security

SECURITY.md

安全策略

支持的版本

安全修复以公开仓库的默认分支(master / main)为准。正式发版 tag 出现后会在此补充列表。

威胁模型(摘要)

Cursor Pulse 是自托管控制面。敏感资产包括:

  • Cursor / 厂商 API Key 与代理池凭证
  • 钉钉应用 Secret
  • JWT / 内部 service token
  • 可选:Go 数据面代理的 MITM CA 私钥

信任边界:Web 管理后台、Internal HTTP API、钉钉渠道、Assistant 服务、可选 Go MITM 代理。

非目标: 客户端对本地 MITM CA 使用 -k / 跳过 TLS 校验时的传输完整性。

报告漏洞

不要在公开 issue 中附带密钥或可直接利用的细节。

优先使用 GitHub 公开仓的 Security Advisories,或联系 pyproject.toml / GitHub 主页上的维护者。

请说明:受影响版本或 commit、影响面、复现步骤,以及是否计划协调披露。

密钥处理

  • .env.example 复制为 .env,将 config.example.yaml 复制为 config.yaml切勿提交 .envconfig.yaml*.db*.pem*.key.dev/ 调试落盘。
  • 为以下项生成高熵随机值:JWT_SECRETPULSE_CREDENTIAL_ENCRYPTION_KEYPULSE_INTERNAL_SERVICE_TOKENPULSE_INTERNAL_TOKEN(通常与前者同值)、ASSISTANT_SERVICE_TOKENASSISTANT_SECRET_KEY
  • 生产环境禁止使用 change-me-* 等占位令牌(见 docker/scripts/setup.sh;应用启动也会拒绝)。
  • 一旦疑似泄露请立即轮换;更改 PULSE_CREDENTIAL_ENCRYPTION_KEY 后需按 docs/RUNBOOK.md 重加密已存凭证(pulse rotate-credential-key 或文档中的 Python 步骤)。

鉴权说明

  • 内部路由(/api/internal/v1/*)必须配置 service token;未配置时应失败关闭(fail closed)。
  • 双变量名、同一密钥值: Pulse / Go Proxy 读 PULSE_INTERNAL_SERVICE_TOKEN;Assistant 回调 Pulse 读 PULSE_INTERNAL_TOKEN。本地与 Docker 部署通常设为相同高熵字符串(docker/scripts/setup.sh 会写入两者)。
  • 设置项「揭密 / reveal」会返回明文密钥——请谨慎授予管理员角色。
  • ADMIN_PASSWORD / ADMIN_WEB_TOKEN 属于灾备路径;日常优先使用门户 bootstrap 账号。

部署加固

  • 勿在无 TLS 终结与网络隔离的情况下,将 web / proxy 监听直接暴露到公网。
  • Go 数据面默认监听 0.0.0.0:8317;本机部署请设 PROXY_LISTEN=127.0.0.1:8317(或 -listen),避免 LAN 侧任意 CONNECT。详见 proxy/README.md
  • CONNECT 目标受 PROXY_CONNECT_ALLOWLIST 约束(默认仅 *.cursor.sh,cursor.sh);非匹配主机返回 403。勿放宽到不可信域名。
  • 代理会话默认 120s 后向 Pulse 重新 authorizePROXY_SESSION_TTL);吊销/暂停 key 会在 TTL 内生效,无需重启代理。
  • MITM CA 私钥仅保存在可信运维机器;泄露后立即轮换。
  • PROXY_DEBUG_USAGE 会落盘请求体——仅限本地调试,切勿提交调试目录。

There aren't any published security advisories