0xMiden / 0xMiden/node

bug: block proofs are never cryptographically verified in `apply_proof`

Open
#2,383 5 comments 0 reactions 1 assignee Claimed by @sergerad View on GitHub
blocked
Dominant language
Rust
Stars
104
Forks
138
Avg merge
1d 13h
Merged PRs (30d)
56

Description

## Summary

`verify_block_proof` in `crates/store/src/state/apply_proof.rs` only deserializes the proof bytes it never performs cryptographic verification. Any byte sequence that parses as a valid `BlockProof` struct is accepted and written to disk.

## Code

```rust
// crates/store/src/state/apply_proof.rs
fn verify_block_proof(_block_num: BlockNumber, proof_bytes: &[u8]) -> anyhow::Result<()> {
let _proof =
BlockProof::read_from_bytes(proof_bytes).context("failed to deserialize block proof")?;

// TODO: perform verification.
Ok(())
}
```

## Impact

- This function is called from `apply_proof`, which is used by both the sequencer's `ProofScheduler` and the full-node's `ProofSync`
- Unverified proofs are persisted to disk and broadcast to all replica subscribers via `proof_cache`
- An attacker can submit a structurally valid but cryptographically invalid proof and it will be accepted

## Expected behavior

The proof should be cryptographically verified before returning `Ok(())`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.