Resources · Security

How to report something real.

Confidential token operations on FHEVM is new ground. If you've found a privilege escalation, money-loss path, ACL bypass, or EIP-712 signature forgery, report it privately through GitHub before opening any public issue.

Responsible disclosure

Report it privately on GitHub

For a real vulnerability, use GitHub's private vulnerability reporting on the tokenops-sdk repo: open the repo's Security tab and click “Report a vulnerability”. That opens a private advisory only the maintainers can see, so please don't file a public issue for anything that could move funds or break confidentiality. Include a description, reproduction steps, and (if you have one) a PoC. We respond within 48 hours; serious reports receive a same-day acknowledgement.

What counts as in-scope: anything that lets a non-authorised party (a) move funds, (b) decrypt a ciphertext without holding the right ACL grant, (c) forge an EIP-712 claim against a domain they don't own, or (d) escalate to DEFAULT_ADMIN_ROLE on a factory / clone / singleton. Report these privately via the advisory flow above.

What's out of scope: gas-grief vectors that don't change ownership of value; UI bugs in the docs site; opinions about the FHE model itself (raise those with Zama). For these non-sensitive bugs, a public issue on the tokenops-sdk repo is the right channel.

Threat model

What the SDK trusts

Trusted

DEPLOYED_ADDRESSES

The factory + singleton addresses baked into the SDK are the audit boundary. The SDK never deploys factories, it only calls into pre-deployed ones.

Trusted

Zama relayer + KMS

Encrypt + user-decrypt round-trips hit Zama's infrastructure. The SDK doesn't hold keys, but it does depend on Zama's threshold posture for liveness + correctness.

Conditional

Caller's wallet

Operators are responsible for keeping their admin keys safe. Use a dedicated cold signer holding DEFAULT_ADMIN_ROLE solely for signing claims, rather than the warm operator wallet, so a warm-wallet compromise doesn't leak claim-signing authority.

Untrusted

Encrypted handle bytes

A handle is opaque. Possessing it tells you nothing about the plaintext. The SDK logs handles freely (debug, telemetry), this is by design and doesn't leak.

Audits

Where each product stands

All three products are audited by OpenZeppelin. fhe-disperse is live on Sepolia and Ethereum mainnet. fhe-vesting and fhe-airdrop are audited and live on Sepolia; mainnet deployment is pending CREATE3 deployment and Zama KMS mainnet readiness.

Resources › Audit posture → carries the canonical table.
Don't drop a private key in chat
If you're sharing a reproduction trace, redact any private keys, signatures, and pre-decrypted plaintexts. We can reproduce from public state given the tx hash + the wallet address.