Normal behavior:
set_secret
should be callable only by the program owner (the module’s publishing address, e.g., @owner
). This function configures a sensitive value, so unauthorized callers must be rejected.
Specific issue:
set_secret
is marked public entry
and accepts any &signer
. There is no check that address_of(caller)
equals the program owner. As a result, any account can invoke set_secret
, emit the SetNewSecret
event, and write a Vault
resource under their own address, spoofing configuration changes and polluting state.
Likelihood:
Whenever a non-owner externally calls set_secret
, because the function is public entry
and contains no owner/capability check.
Whenever off-chain indexers or other components trust the SetNewSecret
event or the mere existence of Vault
resources to infer official configuration.
Impact:
Unauthorized parties can trigger SetNewSecret
events and create arbitrary Vault
resources, spoofing configuration updates and potentially confusing integrators/UI/indexers.
State pollution / griefing by creating many bogus secrets under random addresses, increasing storage and complicating program logic that enumerates or validates vaults.
In Move for Aptos, the term "owner" refers to a signer, which is a verified account that owns a given resource, has permission to add resources and the ability to grant access or modify digital assets. Following this logic in this contest, the owner is the account that owns `Vault`. This means that anyone has right to call `set_secret` and then to own the `Vault` and to retrieve the secret from the `Vault` in `get_secret` function. Therefore, this group is invalid, because the expected behavior is anyone to call the `set_secret` function.
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.