Skip to content
Preview — registry, ledger and certificate data on this host are sample data.
Trust

Trust Center / Security

Security

updated 2026-09-02

Reporting a vulnerability

  • Email: security@purposesource.org. Encrypting is welcome; a key fingerprint will be published here with the first key ceremony record.
  • Machine-readable: /.well-known/security.txt (RFC 9116) points here and at that address.
  • Do not use the public contact form for a vulnerability; the form is fine for everything else.

Response targets (targets, not a service-level commitment — the team is small): acknowledgement within 3 business days; triage and an initial severity assessment within 10 business days; a fix or a published advisory on a timeline agreed with you, by severity. If we go silent, escalate to legal@purposesource.org.

Coordinated disclosure. We ask for 90 days from acknowledgement before public disclosure, or earlier by agreement once a fix is deployed. We publish a post-mortem for any issue that affected published artifacts, the signing keys, or the transparency log, and we credit reporters who want credit. There is no bug bounty.

Scope

In scope: this website; the edge API at api.purposesource.org and the apex machine endpoints (/jwks.json, /stats.json, /ct/*); the published artifacts (registry, ledger, certificate records, entitlement records, key set, transparency log) and any way to make them assert something false; the certificate issuance and verification chain; the form intake routes; the public repositories under github.com/purposesource.

Out of scope: the subprocessors’ own infrastructure (report to them directly); denial-of-service and volumetric findings; social engineering of the team; findings that need physical access; automated-scanner output without a demonstrated impact; the content of third-party repositories that merely adopt the licence.

Safe harbour

Research conducted in good faith under this policy — staying within scope, avoiding privacy violations and service degradation, not exfiltrating data beyond what is needed to demonstrate the issue, and giving us the disclosure window above — is authorised. The Association will not pursue legal action against you for it, and will state that your research was authorised if a third party raises the question. This does not authorise action against any third party, including the subprocessors, and it cannot bind them.

How this is built

  • A static site. Every page is server-rendered HTML; the two scripts on the site (the counters refresh and the verification island) only ever refresh what the HTML already says. No cookies, no analytics, no consent banner — aggregate traffic comes from server-side edge metrics that never touch a visitor’s browser.
  • One third-party script, the bot-protection widget on the contact forms, loaded only there. The Content-Security-Policy in the response headers names it as the sole external script source; no analytics host is permitted, and the build fails if one is added.
  • No database on any anonymous path. The edge API serves published artifacts from an object store and a key-value cache; there is no relational store behind any public route, so there is nothing to inject into and nothing to exfiltrate from.
  • Forms store nothing. A submission is verified server-side against the challenge service, forwarded as one email, and discarded. A missing or unverifiable challenge is a refusal — the form fails closed, never open.
  • Key custody. Signing keys are born non-exportable in an HSM-backed vault in Switzerland; no human holds standing sign permission; every certificate is logged in the append-only transparency log before delivery. Details on keys.
  • Supply chain. Dependencies are pinned by lockfile and installed with npm ci; the build runs nine gates that fail on a banned phrase, an unlabelled figure, a licence-text hash mismatch, a dead link, a structured-data claim we do not make, or a mutated log entry.
  • Subprocessors and residency are listed on the Trust Center overview.

Incident history

None. When there is one, it is listed here with its post-mortem, and the status page linked from the footer carries the live timeline.