·
2 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
This release is a security release. All users on v1.5.0 or earlier are recommended to upgrade.
Security Fixes
This release addresses the following security advisories:
- GHSA-9jfx-4f4f-497j: SHA-256 and Keccak circuits under-constrained.
- GHSA-76mq-v757-53gr:
openvm-pairingpairing check missing proper subfield check on scaling factor. - GHSA-j9m2-fxc5-fr82: Native recursion verifier missing constraints in program and circuit.
- GHSA-fh29-29h9-qm9h: System AIRs missing boolean or zero assertions.
This release also incorporates the upstream Plonky3 fix for GHSA-vj64-rjf3-w3v7 (MultiField32Challenger transcript binding) via the update to Plonky3 v0.4.3.
Changed
- (Transpiler) Reject non-contiguous executable segments in ELF decoder.
- (Circuits/VM) Add boolean constraints to
PhantomAir(is_valid) andVmConnectorAir(is_terminate) bus interaction multiplicities. - (Circuits/SHA-256) Enforce that the
Sha256Airtrace ends on a padding row. - (Circuits/SHA-256) Add range checks on byte limbs in
Sha256VmAirmessage length comparison to prevent field-modulus wraparound. - (Circuits/SHA-256) Enforce
is_last_blockis constant across all rows within a block inSha256VmAir. - (Circuits/SHA-256) Constrain padding block count after the terminal marker in
Sha256VmAirto prevent extra padding blocks. - (Circuits/Keccak) Add terminal finalization constraint to
KeccakVmAirto ensure partial tail rows (since 24 never divides a power of two) cannot contain enabled instructions. - (Circuits/Keccak) Add explicit boolean assertion on
is_enabledinKeccakVmAir. - (Circuits/Memory) Anchor the root node's
as_labelandaddress_labelto zero inMemoryMerkleAir. - (Recursion) Constrain
air_perm_by_heightin the recursive STARK verifier to be a valid permutation of AIR indices. - (Recursion) Add bounds checks for unchecked
builder.geton dynamic arrays in the recursive STARK verifier and continuations verifier to prevent out-of-bounds reads from malicious proof data. - (Recursion) Zero-fill the
maskarray inverify_rapsto prevent reads of uninitialized memory in the permutation check. - (Recursion) Validate that each AIR proof's
exposed_values_after_challengelength matches verifier key advice, preventing injection of extra post-challenge exposed-value vectors. - (Recursion) Fix
add_felt_extiASM lowering to correctly computelhs + rhs[0]for the base coefficient instead of silently droppingrhs[0]. - (Recursion) Constrain
VERIFY_BATCHinside-row hashing to start at the correctopened_valuesindex and preventopened_indexfrom advancing across row boundaries. - (Recursion) Update Plonky3 to v0.4.3. The static verifier challenger now mirrors
MultiField32Challengerfrom that release: each absorb packs the pendingFscalars and tags the block with the number ofFelements consumed, and each squeeze splits thePFrate cells into canonical base-|F|limbs. Also adds a DSL primitive (CircuitVarToFieldOrderLimbsF) that constrains the in-circuit base-|F|decomposition to be canonical. - (Guest Library/IO) Add checked arithmetic to hint stream read and deserialization buffer allocation to prevent integer overflow from untrusted hint lengths.
- (Guest Library/Algebra) Ensure zero is always reported as a perfect square in modular arithmetic.
- (Guest Library/Pairing) Add Fp6 subfield checks for the hinted scalar factor in
openvm-pairingBN254/BLS12-381 pairing check optimization. - (Guest Library/ECC) Make all
from_xy_*point constructorsunsafesince they do not perform subgroup membership checks. - (Guest Library/ECC) Reject the identity point (point at infinity) as a valid public key in ECDSA verification.
- (Guest Library/ruint) Restrict zkVM-accelerated bitwise intrinsics (
and,or,xor) to 256-bitUinttypes only. Fixcmpfallback to avoid infinite recursion on non-256-bit types. - (Guest Library/ruint) Fix OOB read in
ruintshift intrinsics by passing correctly sized buffer.
Removed
- (Recursion) Delete dead and buggy
ConstraintCompilercode.
Full Changelog: v1.5.0...v1.6.0