OpenVM allows the byte decomposition of pc in AUIPC chip to overflow
Description
Published by the National Vulnerability Database
May 2, 2025
Published to the GitHub Advisory Database
May 5, 2025
Reviewed
May 5, 2025
Last updated
May 5, 2025
The fix to https://cantina.xyz/code/c486d600-bed0-4fc6-aed1-de759fd29fa2/findings/21 has a typo that still results in the highest limb of
pc
being range checked to 8-bits instead of 6-bits.In the AIR, we do https://github.com/openvm-org/openvm/blob/0f94c8a3dfa7536c1231465d1bdee5fc607a5993/extensions/rv32im/circuit/src/auipc/core.rs#L135
It should be
Right now the if statement is never triggered because the enumeration gives
i=0,1,2
when we instead wanti=1,2,3
. What this means is thatpc_limbs[3]
is range checked to 8-bits instead of 6-bits.This leads to a vulnerability where the
pc_limbs
decomposition differs from the truepc
, which means a malicious prover can make the destination register take a different value than the AUIPC instruction dictates, by making the decomposition overflow the BabyBear field.References