The setChoosingRamContract(address) function allows an event organizer to freely update the address of the choosingRamContract variable. The organizer could intentionally or unintentionally set a new address to a choosingRamContract variable by calling setChoosingRamContract(address). In this case, users who would call ChoosingRam::increaseValuesOfParticipants will not be able to update the properties of their NFTs. Due to the logic of ChoosingRam::increaseValuesOfParticipants it makes an external call to RamNFT::updateCharacteristics. However the access to RamNFT::updateCharacteristics is protected with an onlyChoosingRamContract modifier. If the organizer has updated the address of the choosingRamContract variable, the call to RamNFT::updateCharacteristics as well as to ChoosingRam::increaseValuesOfParticipants will revert, leading to a potential denial-of-service (DoS) vulnerability.
Organizer can update the address of the choosingRamContract variable, resulting in users not being able to update the characteristics of their NFTs via ChoosingRam::increaseValuesOfParticipants. This would break one of the core invariants of the protocol.
manual review, VSC
Consider deleting RamNFT::setChoosingRamContract function and making the following changes to RamNFT.sol:
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.