Security policy

Reporting a vulnerability

Open a security advisory on this repository, which is private until published. If that is unavailable to you, open a normal issue saying only that you have a security report and asking for a contact — do not put the details in a public issue.

There is no bug bounty. This is a public-domain project maintained by volunteers, so expect a reply in days rather than hours.

What is useful in a report, roughly in order:

  1. What an attacker gains, and what they need to start — "any peer on the medium, one packet, no key" is a very different report from "a session partner, over hours".
  2. A reproduction. A failing test or a byte sequence beats a description of a code path, because several plausible readings of this code have turned out to be already handled — see [Investigated and not a finding: several reports have been investigated and closed that way, and the reasoning is in the commit that closed each one.
  3. Which file and function.

Every accepted finding is written up in the commit that fixes it, with its reproduction, root cause, patch, and the test that keeps it fixed. You are welcome to be credited there or not, as you prefer.

What is in scope

The protocol and its implementations: the Rust core, the bridges, the wasm/browser node, the C ABI and its language bindings, and the Android app. Also in scope, and treated as real findings rather than documentation nits:

What is not in scope

Known limitations, stated plainly

Report these only if you can show something worse than what is written here.

Start with the security maturity matrix, which is generated from the tree and says per component what has actually been fuzzed, property-tested, reviewed and run on hardware. It exists because "the parser is audited" and "the protocol is audited" are very different claims and a reader with only the first cannot tell them apart. Its most important cell is the independently reviewed column, which is empty for every component: nobody outside this repository has audited any of this.

Supported versions

The v1 wire format is frozen; master is the only supported branch. Fixes land there and reach releases from there — there are no maintained back-branches to backport to.

Operator notes