Provenode is a cryptographic model-registry platform: its core promise is that models can be proven authentic, and that tampering is detected and healed automatically. Security is not an afterthought here — it is the product. We take vulnerabilities seriously and ask researchers to do the same.
| Version | Supported |
|---|---|
| main (latest) | ✅ |
| < 4.0 | ❌ |
Do not open a public GitHub issue for security bugs.
Email the maintainers directly. If you need to encrypt, reach out for a PGP key. Include:
- A short description of the vulnerability and its impact.
- Steps to reproduce (minimal, if possible).
- The affected endpoint or module.
- Your suggested fix, if you have one.
You can expect:
- Acknowledgement within 48 hours of a valid report.
- A fix target and disclosure timeline within 7 days.
- Public credit for the report unless you request anonymity.
Please report:
- Auth bypasses (any mutating route reachable without
X-Provenode-TokenwhenDEPLOY_SECRETis set). - Signature/verification weaknesses in
lib/sign.js,lib/passport.js,lib/zkproof.js. - Payment-integrity issues in
lib/payments.js(intent pricing, settlement, double-spend). - Tamper-detection or self-heal bypasses (
lib/selfheal.js,lib/fingerprint.js). - SSRF, injection, or data-exposure in
api/index.js. - Cryptographic misuse (nonce reuse, weak randomness, hash truncation).
Built-in controls (all active in production):
- Central auth guard — every mutating route requires
X-Provenode-TokenmatchingDEPLOY_SECRET; unauthenticated mutating requests return 401. - CORS fail-closed — responses only allow the configured
ALLOWED_ORIGIN(never wildcard), with strictVary: Originhandling. - Rate limiting — Redis-backed sliding window across all Vercel instances (429 +
Retry-After). - Security headers — CSP, HSTS,
nosniff,frame-ancestors: noneon all responses. - SSRF protection — webhook targets blocked unless public HTTP(S); private/non-HTTP URLs rejected.
- Ed25519 signatures — models and passports signed with the org key; verifiers recompute canonical payloads so field tampering breaks the signature.
- Tamper detection — SHA-256 verification at the edge plus behavioral fingerprinting (canary-output comparison) to catch silent edits that leave hashes unchanged.
- Audit log — every mutating action recorded with actor, target, and details.
- The Move on-chain anchor is only exercised when
MOVE_CONTRACT_ADDRESSandSHELBY_PRIVATE_KEYare configured; without them, certificates anchor as immutable Shelby blobs (still public, still verifiable). SHELBY_NETWORK=testnetis supported as an explicit opt-out for testing; shelbynet is the default and the only network recommended for production.- Local development with no
DEPLOY_SECRETruns in open mode — never deploy that way.
We ask for a 90-day coordinated-disclosure window from the date a report is acknowledged before public disclosure, unless the issue is being actively exploited.
Contributors who report verified vulnerabilities will be credited here (with permission).