The executeTransactionFromOutside function allows external entities to initiate transactions from the wallet owner's account. For this to happen, the owner's signature must be validated. Signature validation is handled by the internal _validateTransaction function. The _validateTransaction function returns a 4 byte IAccount.validateTransaction.selector value if the owner has signed the transaction, otherwise 0. However, the current implementation of the executeTransactionFromOutside function does not check if the valid selector is returned (meaning the transaction signer is the owner), and as a result, in case the transaction signer is NOT the owner, it does not revert the transaction before the actual transfer of the funds takes place.
The described vulnerability would allow an attacker to easily transfer funds from the owner's wallet, effectively draining the smart contract's wallet.
Manual review, vscode
Consider making the following change to the executeTransactionFromOutside function:
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.