From the solidity documentation:
https://docs.soliditylang.org/en/v0.8.17/abi-spec.html?highlight=collisions#non-standard-packed-mode
> If you use keccak256(abi.encodePacked(a, b))
and both a
and b
are dynamic types, it is easy to craft collisions in the hash value by moving parts of a
into b
and vice-versa. More specifically, abi.encodePacked("a", "bc") == abi.encodePacked("ab", "c")
.
Found in src/GivingThanks.sol Line: 45
Found in src/GivingThanks.sol Line: 60
As the solidity docs describe, two or more dynamic types are passed to abi.encodePacked
. Moreover, these dynamic values are user-specified function arguments in external functions, meaning anyone can directly specify the value of these arguments when calling the function.
Aderyn
Instead of writing functions to accept several arguments that are hashed inside the function, consider rewriting the function to take the hashed value as a function argument directly so that the hashing process happens off-chain. This approach would solve the issue and save gas.
Use abi.encode() instead of abi.encodePacked()
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.