Tractor actioin signature can be replayed
The tractor facet handles tractor and blueprint operations. It utilizes blueprint in order to execute on behalf of the publisher. The problem is that the blueprintHash does not include the nonce and therefore it allows the signature to be replayed.
the function verifyRequisition
has a call to getBlueprintHash
as shown below.
this calls this
when the blueprint is exceuted, the nonce is incremented but beecause the signature schema does not use the nonce to compose signature and use the max nonce to compose signature, the same signature can be replayed a lot of times.
The same signature can be replayed multiple times allow users to execute the blueprint action multiple times,
for example, the user (original publisher) sign a blueprint to transfer token
the code transfer token from LibTractor._user() to recipient address,
if this blueprint is executed multiple times and the LibTractor._user() has unlimited allowance, the fund in the publisher are drained.
Manual review
Use the nonce to compose the signature to ensure the signature is not replayable.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.