DeFiHardhatFoundry
250,000 USDC
View results
Submission Details
Severity: medium
Invalid

Contracts `PauseFacet`, `TokenSupportFacet`, `ApprovalFacet`, `EnrootFacet`, `L2ContractMigrationFacet` that lock Ether

Summary

Contract with a payable function, but without a withdrawal capacity.

Vulnerability Details

Contract locking ether found:
Contract PauseFacet (contracts/beanstalk/diamond/PauseFacet.sol#15-44) has payable functions:
- PauseFacet.pause() (contracts/beanstalk/diamond/PauseFacet.sol#27-33)
- PauseFacet.unpause() (contracts/beanstalk/diamond/PauseFacet.sol#35-43)
But does not have a function to withdraw the ether
Contract locking ether found:
Contract TokenSupportFacet (contracts/beanstalk/farm/TokenSupportFacet.sol#21-106) has payable functions:
- TokenSupportFacet.permitERC20(IERC20Permit,address,address,uint256,uint256,uint8,bytes32,bytes32) (contracts/beanstalk/farm/TokenSupportFacet.sol#30-41)
- TokenSupportFacet.transferERC721(IERC721,address,uint256) (contracts/beanstalk/farm/TokenSupportFacet.sol#53-59)
- TokenSupportFacet.permitERC721(IERC4494,address,uint256,uint256,bytes) (contracts/beanstalk/farm/TokenSupportFacet.sol#65-73)
- TokenSupportFacet.transferERC1155(IERC1155,address,uint256,uint256) (contracts/beanstalk/farm/TokenSupportFacet.sol#85-92)
- TokenSupportFacet.batchTransferERC1155(IERC1155,address,uint256[],uint256[]) (contracts/beanstalk/farm/TokenSupportFacet.sol#98-105)
But does not have a function to withdraw the ether
Contract locking ether found:
Contract ApprovalFacet (contracts/beanstalk/silo/ApprovalFacet.sol#22-200) has payable functions:
- ApprovalFacet.approveDeposit(address,address,uint256) (contracts/beanstalk/silo/ApprovalFacet.sol#44-52)
- ApprovalFacet.permitDeposits(address,address,address[],uint256[],uint256,uint8,bytes32,bytes32) (contracts/beanstalk/silo/ApprovalFacet.sol#118-132)
- ApprovalFacet.permitDeposit(address,address,address,uint256,uint256,uint8,bytes32,bytes32) (contracts/beanstalk/silo/ApprovalFacet.sol#146-158)
But does not have a function to withdraw the ether
Contract locking ether found:
Contract EnrootFacet (contracts/beanstalk/silo/EnrootFacet.sol#18-260) has payable functions:
- EnrootFacet.enrootDeposit(address,int96,uint256) (contracts/beanstalk/silo/EnrootFacet.sol#75-123)
- EnrootFacet.enrootDeposits(address,int96[],uint256[]) (contracts/beanstalk/silo/EnrootFacet.sol#138-206)
But does not have a function to withdraw the ether
Contract locking ether found:
Contract L2ContractMigrationFacet (contracts/beanstalk/silo/L2ContractMigrationFacet.sol#19-242) has payable functions:
- L2ContractMigrationFacet.redeemDepositsAndInternalBalances(address,address,L2ContractMigrationFacet.AccountDepositData[],L2ContractMigrationFacet.AccountInternalBalance[],uint256,bytes32[],uint256,bytes) (contracts/beanstalk/silo/L2ContractMigrationFacet.sol#88-114)
But does not have a function to withdraw the ether

Impact

No ability to withdraw tokens within the functions eventually lock the protocol.

Tools Used

Slither

Recommendations

Remove the payable attribute or add a withdraw function.

Updates

Lead Judging Commences

inallhonesty Lead Judge about 1 year ago
Submission Judgement Published
Invalidated
Reason: Design choice

Support

FAQs

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