cmail processes authentication data, message content, attachments, and administrative records. This pre-1.0 project has not been certified for any regulatory or assurance framework.
Until versioned releases exist, security fixes target the latest commit on the default branch. Older commits, forks, and deployment-specific modifications are not supported by the project.
Use the repository host's private vulnerability-reporting feature when available. On GitHub, open the repository's Security tab, choose Advisories, then Report a vulnerability, or use the private reporting form after the repository owner enables it.
If private reporting is unavailable, ask the maintainers for a private contact channel — do not publish technical details. Do not open a public issue containing an exploit, secret, personal data, private message, tenant identifier, or production URL.
Include:
- the affected commit or version;
- the affected component and route;
- prerequisites and a minimal reproduction;
- expected and observed behavior;
- likely impact;
- suggested mitigation, if known;
- whether the issue is already public or actively exploited.
Maintainers aim to acknowledge a complete report within seven days. Investigation and remediation time depends on severity and complexity. Allow a coordinated fix and disclosure before publishing details.
Reports are especially useful for:
- authentication, session, OAuth, or authorization bypasses;
- cross-mailbox data access;
- server-side request forgery, injection, or unsafe HTML handling;
- exposure of message content, attachments, secrets, or tenant metadata;
- inbound or outbound mail spoofing caused by application logic;
- privilege escalation in user, mailbox, policy, audit, trace, or settings tools;
- dependency vulnerabilities with a demonstrated path through cmail.
Provider outages, provider-account compromise, DNS misconfiguration, unsupported local changes, and social engineering without a product flaw are usually deployment concerns, not project vulnerabilities. Report privately if the boundary is unclear.
Every deployment should:
- use unique secrets and provider credentials;
- keep secrets in provider secret stores, never Git;
- restrict Cloudflare, identity-provider, and outbound-provider administrative access;
- configure OAuth callback URLs exactly;
- verify sender domains and publish appropriate SPF, DKIM, and DMARC records;
- monitor authentication, audit, trace, provider, and DNS events;
- define D1 and R2 backup and restore procedures;
- update dependencies and redeploy security fixes promptly;
- follow the security checklist.
If credentials are exposed, rotate or revoke them immediately. Removing a file from the latest commit is not enough when the value exists in Git history, build logs, caches, or deployed configuration.
Before publishing or mirroring the repository, run pnpm release:check. Its
history scan inspects reachable Git objects and reports affected paths without
printing secret values. A failing history check blocks release even when the
current working tree is clean.