one_shot::transfer_record_only
is used to transfer a token from a user to another. Because it overwrites stats_res.stats.owner
to to
without checking that it was equal to from
before, it is possible to call this function with any from
that have a stats_res.owner_counts
positive.
If this happens, the protocol will reach a corrupted state.
Likelihood:
This root cause is currently exploitable because rap_battle::go_on_stage_or_battle
contains calls to one_shot::transfer_record_only
without updating the object owner, but I believe that is another issue.
It means that a record can be transfered to a wrong owner in this case only
Impact:
The real owner of the NFT will not have their NFT count decrease, but another address will. This corrupts the protocol state regarding this token and may cause deeper issues with staking and battling.
Update the transfer record function to check current token owner is from
:
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.
The contest is complete and the rewards are being distributed.