Platform: Code4rena
Start Date: 04/01/2023
Pot Size: $60,500 USDC
Total HM: 15
Participants: 105
Period: 5 days
Judge: gzeon
Total Solo HM: 1
Id: 200
League: ETH
Rank: 56/105
Findings: 1
Award: $78.26
🌟 Selected for report: 0
🚀 Solo Findings: 0
🌟 Selected for report: immeas
Also found by: 0xDave, 0xbepresent, HE1M, Kutu, betweenETHlines, hansfriese, hihen, peanuts, prc, wait
78.2598 USDC - $78.26
https://github.com/code-423n4/2023-01-biconomy/blob/53c8c3823175aeb26dee5529eeefa81240a406ba/scw-contracts/contracts/smart-contract-wallet/SmartAccount.sol#L460 https://github.com/code-423n4/2023-01-biconomy/blob/53c8c3823175aeb26dee5529eeefa81240a406ba/scw-contracts/contracts/smart-contract-wallet/SmartAccount.sol#L465
Entrypoint can not call the functions execute()
and executeBatch()
.
There are two functions in SmartAccount contract related to execution implemented as below.
SmartAccount.sol 460: function execute(address dest, uint value, bytes calldata func) external onlyOwner{ 461: _requireFromEntryPointOrOwner(); 462: _call(dest, value, func); 463: } 464: 465: function executeBatch(address[] calldata dest, bytes[] calldata func) external onlyOwner{ 466: _requireFromEntryPointOrOwner(); 467: require(dest.length == func.length, "wrong array lengths"); 468: for (uint i = 0; i < dest.length;) { 469: _call(dest[i], 0, func[i]); 470: unchecked { 471: ++i; 472: } 473: } 474: }
These two functions are supposed to be callable by the EntryPoint contract and the function _requireFromEntryPointOrOwner()
is used as a guard for caller.
But the functions have the modifier onlyOwner
and it reverts when these are called by the EntryPoint contract.
Manual Review
Remove the onlyOnwer
modifier for the functions execute()
and executeBatch()
.
#0 - c4-judge
2023-01-18T00:39:09Z
gzeon-c4 marked the issue as duplicate of #390
#1 - c4-sponsor
2023-01-26T06:52:18Z
livingrockrises marked the issue as sponsor confirmed
#2 - c4-judge
2023-02-10T12:21:32Z
gzeon-c4 marked the issue as satisfactory