bug: block proofs are never cryptographically verified in `apply_proof`
- Lenguaje dominante
- Rust
- Estrellas
- 104
- Forks
- 138
- Merge medio
- 1 d 13 h
- PR fusionados (30 d)
- 56
Descripción
## 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(())`.
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.