Security Audits
AdPriva has not published a third-party security audit, and it does not run a bug bounty programme. This page lists the security testing that runs today and the design choices that limit what an attacker could reach.
Testing on every change
- Each code repository (API, ingest server, anchor worker, scoring service, explorer, console, tag and WordPress plugin) runs its tests in GitHub Actions on every change.
- The Go services also run static analysis:
golangci-lintin the API and the ingest server,go vetin the explorer. - The
Anchor.solcontract has a Foundry test suite, including fuzz tests that run 10,000 times in CI. - The API has tests that put marker values in a proof’s private fields (IP address, user agent, page URL, referrer, site, nonce) and fail if any marker shows up in a public response.
Design choices that limit exposure
- The tag holds no secret. There is no key in the browser to steal. The server signs every proof.
- The tag sends no cookies. Its requests are made with credentials turned off, and it sets no cookies or browser storage.
- The public record is minimal. Public lookups return a proof’s id, status, score, verdict and anchor references, and nothing that names a publisher, site, page or visitor.
- Only hashes go on-chain. Horizen receives a batch’s Merkle root, never event data. Batches anchored before 2026-09-28 also sent zkVerify a zero-knowledge proof, again with no event data.
- Raw IP addresses and user agents expire. They are emptied from proof records after 30 days (current production setting).
Reporting a security problem
Email hello@adpriva.com.