code4rena-2023-01-biconomy-l05

[L-05] Front running attacks by the onlyOwner

보고서

Summary

front running을 이용하여 권한을 변경해 콜을 실패시킬 수 있다. 권한자 변경 시 timelock을 이용하여 버퍼를 넣을 것을 제안했다.

Keyword

front running, timelock

Vulnerability

contracts/smart-contract-wallet/paymasters/verifying/singleton/VerifyingSingletonPaymaster.sol:
  65:     function setSigner( address _newVerifyingSigner) external onlyOwner{
  66:         require(_newVerifyingSigner != address(0), "VerifyingPaymaster: new signer can not be zero address");
  67:         verifyingSigner = _newVerifyingSigner;
  68:     }

setSigner 함수를 통해 verifyingSigner 를 설정할 수 있다.

만약 verifyingSigner를 사용하는 함수를 실행했는데, front running을 통해 setSigner를 우선 처리해 verifyingSigner를 변경하면 이 함수는 실패하게 된다.

따라서, 바로 verifyingSigner를 변경하도록 하지 말고 timelock을 이용하라고 제안했다.

Impact

front running을 통해 verifyingSigner를 변경하면 verifyingSigner를 이용하려 한 콜이 실패할 수 있다.

Mitigation

timelock을 이용하여 verifyingSigner를 변경하도록 한다.


tags: bughunting, smart contract, biconomy, account abstraction, erc4337, timelock, frontrunning, wallet, severity low