Skip to content

Zellic audit fixes#38

Merged
HenryMBaldwin merged 7 commits intoseismicfrom
zellic-audit-feb-2026
Mar 31, 2026
Merged

Zellic audit fixes#38
HenryMBaldwin merged 7 commits intoseismicfrom
zellic-audit-feb-2026

Conversation

@cdrappi
Copy link
Copy Markdown
Contributor

@cdrappi cdrappi commented Mar 9, 2026

No description provided.

Adds `zellic-audit-feb-2026` to the push and pull_request branch
triggers in `seismic.yml` so the full CI suite runs on PRs into this
branch.
@cdrappi cdrappi marked this pull request as draft March 9, 2026 15:53
drappi-ai and others added 5 commits March 20, 2026 12:04
…path (#31)

## Summary

- `verify_proof`'s empty-root fast path hardcoded `expected_private:
true` in the `ValueMismatch` error instead of using the caller-provided
`expected_is_private`
- One-line fix: `expected_private: true` → `expected_private:
expected_is_private`

Addresses
[SeismicSystems/internal#209](SeismicSystems/internal#209).
## Summary

- Empty proofs (or proofs starting with `EMPTY_STRING_CODE`) were
accepted even with trailing junk nodes
- Added `TrailingProofNodes` error variant; after accepting the empty
node, verify no remaining elements exist

Addresses
[SeismicSystems/internal#207](SeismicSystems/internal#207)
## Summary

- Proof nodes were decoded without size or count limits, allowing
memory/CPU exhaustion via malicious proofs
- Added `MAX_PROOF_NODE_SIZE` (1024 bytes) and `MAX_PROOF_NODES` (65)
with upfront/per-iteration checks
- Added `ProofNodeTooLarge` and `TooManyProofNodes` error variants

Addresses
[SeismicSystems/internal#206](SeismicSystems/internal#206).
## Summary

- `process_branch` used `unreachable!` when an inline extension node's
child decoded as a Leaf/Extension/EmptyRoot, allowing a malicious proof
to trigger a panic (DoS)
- Replaced with `ProofVerificationError::UnexpectedNodeChild` error
return

Addresses
[SeismicSystems/internal#205](SeismicSystems/internal#205).
## Summary

Cherry-pick of [PR
#19](#19) onto
`zellic-audit-feb-2026`.

`process_branch` did not update `last_decoded_node_is_private` when
decoding in-place leaf nodes, causing stale privacy flags in proof
verification.

Addresses
[SeismicSystems/internal#208](SeismicSystems/internal#208).

## Test plan
- Includes `private_inplace_leaf_proof_verification` regression test
- All existing tests pass

Co-authored-by: Samuel Laferriere <9342524+samlaf@users.noreply.github.com>
@HenryMBaldwin HenryMBaldwin marked this pull request as ready for review March 31, 2026 17:04
@HenryMBaldwin
Copy link
Copy Markdown
Contributor

This is good to merge

@HenryMBaldwin HenryMBaldwin changed the title [DO NOT MERGE] Zellic audit fixes Zellic audit fixes Mar 31, 2026
Backmerge seismic (with veridise audit fixes) into zellic-audit-feb-2026
to prepare for PR merge into seismic. Resolves conflicts:
- CI workflow: reset branches to [seismic]
- Deduplicated tests present on both branches (cherry-picks)
@HenryMBaldwin HenryMBaldwin merged commit 175e8b5 into seismic Mar 31, 2026
5 checks passed
@HenryMBaldwin HenryMBaldwin deleted the zellic-audit-feb-2026 branch March 31, 2026 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants