Security

Audits

Privacy you cannot check is a claim, not a property. Every security control Cowl runs is in the open repository with its report beside it — including the findings, including the ones still open. The rule the audit directory enforces on itself: a security claim without an artifact behind it does not ship, not here and not in a tweet.

Published · checkable
The full index, every report, and every finding with its verdict lives at audits/README.md. Nothing on this page is a summary you have to take on trust — each row links to the work.

Where it stands

AreaResult
Pool accountingSix invariants held across 245,760 randomised calls. The turnstile reconciles exact to the wei on every token that ever entered, on both live pools.
Circuit constraintsEvery constraint proven load-bearing: 17 deleted one at a time, 17 caught. Public inputs match the pool on all 14 of spend and 6 of shield.
Contracts, static analysisSlither and Aderyn over the pool and the trade adapter. Neither scanner found a path to deposited funds. Every finding triaged against source, and a gate on every push now fails on anything untriaged.
App and CLI codeCodeQL security-extended read on both repositories: 4 findings, 1 fixed, 3 rebutted with reasoning. Nothing flagged in proving, note handling, key derivation or the wire format.
Supply chainEvery advisory in both trees read and traced. One install script in what a user installs, and the CLI is proven to work without it. Gated on every push against a baseline.
Test integrityThree mutation harnesses, so a test or an alarm that quietly stopped constraining anything shows up instead of staying green.
Continuous integrationSix jobs in the CLI plus the app’s, green since the first run, every action pinned by commit hash.
Live monitoringGovernance, turnstile and relayer float watched against a committed baseline, with all seven alarms proven to fire. See monitoring.

Supply chain scores

OpenSSF Scorecard 5.5.0, measured against the public repositories rather than a working checkout, so the number you get scoring them yourself is the number below.

RepositoryScoreNotables
Cowl-Protocol/cli8.9Token permissions, dangerous workflow, binary artifacts all 10
Cowl-Protocol/app8.0Every GitHub-owned and third-party action pinned by SHA

Findings, and what happened to them

Findings carry IDs, severities and statuses, and the reports publish them whether or not they flatter the code. Severity is an Impact × Likelihood matrix, kept deliberately separate from whatever a tool scored it, because tool severity and report severity are not the same thing.

  • Fixed. The trade adapter dropped ERC-20 return values on two paths; both are fixed in source and pinned by tests proven to fail against the code before the fix.
  • Mitigated.The verifier swap is the pool’s only lever, timelocked seven days, and it is now watched from outside — pending swaps and already-executed ones both.
  • Acknowledged. The rest were read against source and rebutted in writing, each with the reasoning that closes it. Two of the highest-ranked scanner findings are in this group, which is exactly why the CI gate fails on anything untriaged rather than on anything high.

What is verified where

AreaReviewed for
ZK circuitsConstraint coverage and soundness under adversarial witnesses — proofs that should be rejected, not just ones that should pass
ContractsValue conservation, access control, the verifier swap path, the trade adapter
CryptographyCommitment and nullifier scheme, note ciphers, key derivation
ClientsThe CLI and the app, plus everything they depend on to reach you

Run it yourself

None of this needs our word. Clone the repository and every control above runs on your machine, against the live mainnet deployment.

npm run watch                # governance + turnstile + relayer float, live
npm run test:supplychain     # install-script and advisory baseline
npm run test:watch-mutants   # prove the alarms still fire
cd contracts && forge test   # 64 tests, invariant suite included
cd circuits/transfer && nargo test

Independent review

The published work above is the free and continuous half, and it runs on every push. Paid third-party review of the circuits and contracts is the next line of the program, and every report lands here in full and unedited when it does. No free tool audits a Noir circuit, which is precisely why the adversarial witness harness exists in the meantime.

Reporting something

Found a problem? The security policy has the private channel and what a first report should carry. Do not open a public issue. You get an acknowledgement from a human within 72 hours, an assessment within seven days, credit if you want it, and no legal action for good-faith research.

No status theater
Nothing here is called audited before a report exists. What is published is exactly what was run, what it found, and what was decided about each finding — with the commands to reproduce every one of them.