docs(security): update disclosure contacts and reporting requirements - #11174
Merged
Conversation
conradoplg
previously approved these changes
Aug 3, 2026
The Signal channel for critical vulnerabilities listed a single handle, so a consensus-split or counterfeiting report had no fast path if that person was unavailable. Add two more Zcash Foundation handles and state that the group must include all of them. The published PGP block held two concatenated primary keys: E7B32440 (Zcash Foundation <security@zfnd.org>, created 2026-01-29), which is self-revoked and expired 2026-02-28, alongside the live 7550C36C key. A reporter importing the block could encrypt to the dead key or conclude the key was revoked. Re-emit the block with only 7550C36C and its encryption subkey, and publish that fingerprint in plain text so it can be verified without importing anything. Add Shielded Labs to the bilateral disclosure agreement list.
conradoplg
approved these changes
Aug 5, 2026
conradoplg
left a comment
Collaborator
There was a problem hiding this comment.
I checked the gpg pubkey matches the one I have
alchemydc
marked this pull request as ready for review
August 5, 2026 16:11
Contributor
|
Queued — the merge queue status continues in this comment ↓. |
Contributor
Merge Queue Status
This pull request spent 58 seconds in the queue, including 12 seconds running CI. Required conditions to merge
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Two problems with
SECURITY.md.Reports arrive untested against current code. Triage time is wasted when a
vulnerability report's proof of concept was never tested against a current
version of Zebra.
SECURITY.mddid not tell reporters which version to testagainst, or to say which version they tested.
The published contacts had gaps. A review of the contacts turned up three
issues:
pilizcash.01was the only handle on the Signal channel for criticalvulnerabilities. If that person is unavailable, a consensus-split or
counterfeiting report has no fast path in.
E7B32440DA784EBFB8AA2845FD6D55591BF92BCA(
Zcash Foundation <security@zfnd.org>, created 2026-01-29) is self-revokedand expired on 2026-02-28; only
7550C36C3DF616A69F1EFE006046DDEF94CF99B5(
Zcash Foundation Security Team, expires 2028-03-03) is live. Both werepublished together in docs: Update SECURITY.md with public encryption key #10460. A reporter importing the block could encrypt
to the dead key, or read the revocation and conclude the ZF key is gone.
Solution
Add a "Before You Report" subsection at the top of "Receiving Disclosures" in
SECURITY.md, before the reporting-channel instructions. It asks reporters to:mainbranch before submitting,
maincommit hash tested in the report.Also add a "Security Vulnerability Reports" section to
AGENTS.md(whichCLAUDE.mdsymlinks to) so AI coding agents hold agent-assisted reports to thesame standard: route suspected vulnerabilities through SECURITY.md instead of
public issues or PRs, reproduce against the latest release or current
main,include the version tested, and don't submit speculative findings without a
reproduction.
Then update the published contacts:
conrado.42anddc_zf.77to the Signal list, and state that the groupmust include all of the listed handles rather than any one of them.
7550C36C…key and its Curve25519encryption subkey, and publish that fingerprint in plain text so a reporter
can verify the armor without importing it first.
The Signal handles here are deliberately ZF-side only. The ecosystem policy at
zcash/.github/SECURITY.mdlistsdairaemma.31,pilizcash.01, andnuttycom.01; this document aligns with that process rather than duplicatingits contacts.
Tests
Documentation-only change; verified markdown heading structure renders
correctly.
The re-emitted key block was verified two ways, since a broken armor block
would silently take the email fallback channel offline:
fingerprint
7550C36C3DF616A69F1EFE006046DDEF94CF99B5, one encryptionsubkey, no revocation signature, recomputed CRC24 matching the
=K4Oqarmor checksum.
gpground-trip in a throwaway homedir — imports as a single non-revokeded25519 [SC]+cv25519 [E]pair expiring 2028-03-03, andgpg -e -r security@zfnd.orgsucceeds against subkeyE9AE3777E154032C,confirming the key is actually usable for encryption.
markdownlintpasses with.trunk/configs/.markdownlint.yaml.codespellwas not run locally (not installed on this host); CI covers it.
AI Disclosure
description, and audited the published PGP key block and contacts.
PR Checklist
type(scope): description