Repository navigation
Conversation
Document a security advisory for ark-groth16 regarding missing public input length check in the verifier. This advisory outlines the affected functions and versions, along with a detailed explanation of the issue and its implications.
Update the vulnerability description for Groth16 verifier to clarify the missing public input length check and its implications.
Member
For active maintainers, we defer to their judgement whether an advisory is appropriate; RustSec does not want to be a mechanism for bypassing maintainers. |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Affected crate(s)
Links to upstream issue(s) or PR(s)
This issue is the request to turn that report into an advisory:
#3404
Severity
The native verifier accepts a public-input slice of the wrong length instead of returning an error. Extra elements are ignored, so they are not bound by the proof. Missing elements are treated as zero. A caller that treats a successful verification as covering the whole slice can therefore
accept a statement the proof does not cover.
Callers that already check
public_inputs.len() + 1 == vk.gamma_abc_g1.len()are unaffected. A proof still only attests to the statement it was created for; this is not a break of Groth16 soundness and it does not leak witness data. There is no fixed release (patched = []).Truncation and zero-padding are the two directions of this one missing check, so this PR adds one advisory, not two.
Checklist
RUSTSEC-0000-0000as the IDdatefield is set to the public disclosure date(not checked: upstream was asked about the bug, not about publishing an advisory, and has not answered)