AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
High 72 Bitcoin

fix: reject all shielded PCZTs in the legacy transparent-only path

Public commit record

What the developer wrote

Authored by Adam Tucker

85/100 · Strong
fix: reject all shielded PCZTs in the legacy transparent-only path

The legacy multi_coins check/parse/sign path only handles transparent
data, but pczt_requires_cypherpunk_support only rejected V6/Ironwood PCZTs.
A v5 PCZT carrying an Orchard or Sapling bundle slipped through: its
transparent part was validated and signed while the shielded bundle was
silently ignored. Extend the guard to also reject Orchard actions and
Sapling spends/outputs so the boundary is strictly transparent-only.
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
The short version

What changed, and why it matters

This commit fixes a security gap in the Keystone hardware wallet's Zcash transaction handling. The older 'legacy' code path was only designed to inspect and sign transparent (non-private) Zcash transactions, but its safety check only blocked the newest V6 and Ironwood transaction types. A version 5 transaction containing hidden Sapling or Orchard transfers could slip past the check. The wallet would then validate and sign only the visible transparent portion, while silently ignoring the shielded part. That could let a malicious or buggy app trick a user into approving a transaction that also moves funds privately. The patch now rejects any transaction containing Sapling or Orchard shielded data in the legacy path, forcing it to use the newer 'cypherpunk' path that understands those formats.

Recommended action

Treat this as a security fix and include it in the next firmware release. Verify that builds without the cypherpunk feature correctly reject all shielded PCZTs in tests, and audit any other legacy paths that may parse or sign PCZTs to ensure they route shielded transactions to the cypherpunk implementation. Consider adding explicit regression tests for v5 PCZTs containing Sapling and Orchard bundles.

Security signals we found

01

Incomplete validation/signature path for shielded transaction data

02

Silent dropping of Sapling/Orchard bundles in legacy transparent-only code

03

Guard condition too narrow (only V6 + Ironwood) before patch

04

Potential user-interface inconsistency between displayed and signed transaction

05

Patch hardens rejection boundary but is partial: relies on cfg gating and correct feature builds

Risk score

Why this scored 72/100

Our methodology →
Potential impact 22/30
Exploitability 16/25
Stealth signal 12/15
Affected reach 10/15
Confidence 8/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.