跳到正文

安全

可以拿给审计人员看的安全。

我们如何构建和运营 Moatgator,让你的安全评审可以说“通过”。

  • 临时构建

    构建产物生命周期很短,24 小时后失效,且每次构建都在隔离的 worker 中运行。

  • 签名密钥始终属于你

    签名在你的流水线中完成。Moatgator 从不持有你的签名密钥、证书或 provisioning profile。

  • 最小权限访问

    GitHub App 只申请它所需的权限,GitHub Action 使用 OIDC 认证,而不是长期密钥。

  • 对齐 OWASP MASVS

    Scan 报告把每项发现对应到审计人员熟悉的 MASVS 控制项。

  • 尊重用户的遥测

    Pulse 收集关于设备和尝试的安全信号,而不是用户内容,并支持采样、按套餐保留数据和区域选择。

  • 符合 LGPD 要求

    我们依据 LGPD 处理个人数据。数据处理协议(DPA)和子处理方清单(含用途、数据和所在国家)均已发布,漏洞披露政策也已发布。

  • 安全开发

    我们自己的流水线在每次变更时运行静态分析、依赖检查和密钥扫描。

  • 对我们系统的访问

    访问生产环境需要 MFA 和经批准的单点登录,敏感的内部操作会留下审计轨迹。

Controls we can point to

Every claim here is a control with evidence. What is not built yet is listed separately, with no date promised.

“Built” means implemented and tested in the product's source code. “Built” is not the same as audited, and the platform is in private beta. Evidence lives in private repositories and can be shown to customers on request.

This section is written in English.

Built and tested

Access and identity

  • Two-factor authentication (TOTP), optional or required per organization

    Owners and admins can be required to use a one-time code. Codes cannot be reused and the secret is stored encrypted.

    Since
    Evidence
    api/src/lib/totp.tsapi/src/auth-security.test.ts
  • Passwords stored with scrypt; session tokens stored only as hashes

    Passwords use scrypt with a per-user salt. Session and one-time tokens are kept only as hashes, so a database read does not reveal a usable token.

    Since
    Evidence
    api/src/auth/local.tsapi/src/auth-security.test.ts
  • API keys shown once, stored hashed, with scope, expiry and rotation

    A key's secret is displayed only when it is created and stored as a keyed hash. Keys can be limited to one scope, expire, be rotated and be revoked immediately.

    Since
    Evidence
    api/src/lib/apikey.tsapi/src/api-keys.test.ts

Data

  • Row-level isolation between customers, enforced in the database

    Every table with customer data has row-level security forced on, and the application connects with a role that cannot bypass it. A generated test checks every such table.

    Since
    Evidence
    api/migrations/0001_init.sqlapi/src/rls.test.ts
  • Tamper-evident audit log

    Sensitive actions are appended to a hash-chained log that the database refuses to update or delete. Owners can verify the chain and export it.

    Since
    Evidence
    api/src/lib/audit-chain.tsapi/migrations/0004_audit_chain.sql
  • Application-level encryption of stored secrets (AES-256-GCM)

    Webhook secrets and two-factor secrets are encrypted before they reach the database. The key lives outside the database.

    Since
    Evidence
    api/src/lib/field-crypto.ts
  • Telemetry without IP addresses and with rotating device identifiers

    The raw device ID is never stored; the stored hash changes every 30 days and differs per app. IP addresses are stripped before ingestion and kept out of logs.

    Since
    Evidence
    api/src/privacy/index.tsapi/docs/privacy/field-inventory.md
  • Retention limits by plan, data export and erasure on request

    Events are deleted after the period of the plan. Customers can export their data and erase events by period or by device.

    Since
    Evidence
    api/src/retention/index.tsapi/docs/pulse/retention.md

Platform

  • Origin checks on state-changing requests and rate limits on sensitive routes

    Requests that change data from a browser session must come from an allowed origin. Login, sign-up, writes and ingestion are rate limited.

    Since
    Evidence
    api/src/plugins/auth.tsapi/src/lib/ratelimit.ts
  • Outbound webhooks signed and protected against server-side request forgery

    Webhook payloads carry an HMAC signature. Destinations in private, loopback and cloud-metadata ranges are refused, including after DNS resolution, and redirects are not followed.

    Since
    Evidence
    api/src/lib/ssrf.tsapi/src/webhooks.test.ts

Programs and process

  • Vulnerability disclosure contact published (security.txt)

    A security.txt file (RFC 9116) tells researchers where to report. The mailbox depends on the company domain, which is not registered yet.

    Since
    Evidence
    landing/public/.well-known/security.txt
  • Documented process and deadlines for reported bypasses

    A written process sets response deadlines by severity (7, 14, 30 and 90 days) and how a fix is published after the reporter agrees.

    Since
    Evidence
    api/docs/security/bypass-response.md
  • Incident response runbooks and severity levels

    Runbooks cover outages, stuck queues, leaked artifacts, compromised keys, public bypasses and abuse, with severity levels, roles and communication templates.

    Since
    Evidence
    api/docs/ops/incident-response/README.md

On the roadmap

  • Ephemeral builds with artifacts that expire after 24 hours

    Build workers will run isolated and artifacts will be deleted automatically. The build pipeline does not exist yet.

    Target: Phase 1

  • Your app signing keys stay with you by default

    Signing will happen in your own pipeline. This is a design goal for the build service, which does not exist yet.

    Target: Phase 1

  • Encryption in transit and at rest in managed infrastructure

    The platform is not deployed yet. TLS and encrypted storage will be enabled and verified at the first deployment.

    Target: At first deployment

  • Managed key hierarchy with automatic rotation

    A key-management library and infrastructure module exist, but no real key service is provisioned and the library is not wired into the platform yet.

    Target: At first deployment

  • Independent penetration test

    An external penetration test is planned. No report exists to publish today.

    Target: Phase 3

  • Private bug bounty

    A private bounty program is planned after the independent test.

    Target: Phase 3

  • Single sign-on (SAML, OIDC) and SCIM provisioning

    Planned for the Enterprise plan.

    Target: Phase 3

  • SOC 2 Type I

    Planned. The company holds no security certification today.

    Target: 2028

文档

  • 数据处理协议(DPA):已发布
  • 子处理方清单:公开,含用途、数据和所在国家
  • 安全问卷答复:按需提供
  • 对应 MASVS 的示例报告:按需提供

安全相关问题

你们会存储我应用的源码吗?

不会。防护作用于你流水线中已编译的应用,构建产物 24 小时后失效。

谁持有签名密钥?

你持有。Moatgator 返回未签名的构建产物,由你的流水线签名。

你们处理哪些个人数据?

仅限你通过我们的表单提交的内容,以及通过 Pulse 收集的关于设备和尝试的安全信号,绝不包括用户的内容。

你们能回答我们的安全问卷吗?

可以。请连同你的问卷或评审要求联系我们。

防护能让应用无法被攻击吗?

不能。防护提高了攻击成本并让攻击可见。它降低风险,但无法消除风险。

需要安全文档吗?

告诉我们你的评审需要什么,我们会发给你。