Missing access control on approve
allows any user to enable moving funds from the CapitalPool
through the TokenManager
functions.
There are no checks to ensure that the caller is authorized to approve
a token.
The @notice
hints that the caller must be the token manager, but this is not implemented:
https://github.com/Cyfrin/2024-08-tadle/blob/main/src/core/CapitalPool.sol#L28
Impact: Medium (Funds are indirectly at risk because attackers can enable the withdrawals of any token, and the CapitalPool
acts as a vault for every market token)
Likelihood: High (Anyone can do it without preconditions)
Risk: Medium
Manual review
In CapitalPool
, ensure that the caller is the tokenManager
:
This is at most low severity, even though giving max approvals shouldn't be permisionless, the respective tokenManager address is retrieved from the TadleFactory contract whereby the trusted guardian role is responsible for deploying such contracts as seen [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/factory/TadleFactory.sol#L68). Since the user still has to go through the PreMarkets/DeliveryPlace contracts to perform market actions, this max approval cannot be exploited.
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.