Hexens Audit: Proof Reuse and Malleability in privateMint Function Bypasses Auditor Controls in privateMint #30
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.
The privateMint function in the EncryptedERC contract, despite being restricted to the owner, allows the reuse of zero-knowledge proofs which affects the intended auditor control mechanism. While the mint circuit (mint_circuit.go) verifies the auditor's encryption and approval of the mint amount, the current implementation does not prevent the same proof from being used multiple times.
This implementation allows the owner to:
Mint multiple times using a single auditor approval
Exceed the auditor-approved mint amount
Operate beyond the scope of auditor oversight
The issue is compounded by proof malleability, where manipulating the y-coordinates of the proof points can create multiple valid variations of the same proof.