Sparkn

CodeFox Inc.
DeFiFoundryProxy
15,000 USDC
View results
Submission Details
Severity: low

abi.encodePacked() should not be used with dynamic types when passing the result to a hash function such as keccak256()

Summary

abi.encodePacked() should not be used with dynamic types when passing the result to a hash function such as keccak256()

Vulnerability Details

Use abi.encode() instead which will pad items to 32 bytes, which will prevent hash collisions (e.g. abi.encodePacked(0x123,0x456) => 0x123456 => abi.encodePacked(0x1,0x23456), but abi.encode(0x123,0x456) => 0x0...1230...456). "Unless there is a compelling reason, abi.encode should be preferred".

Impact

function getProxyAddress(bytes32 salt, address implementation) public view returns (address proxy) {
bytes memory code = abi.encodePacked(type(Proxy).creationCode, uint256(uint160(implementation)));
bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff), address(this), salt, keccak256(code)));
proxy = address(uint160(uint256(hash)));
}

Recommendations

Use abi.encode()

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.