The 'contribute' function fails to properly validate the user-provided fund account, allowing malicious actors to divert contributions to arbitrary accounts
In the contribute
function context(FundContribute
), the protocol accepts a fund account as input without verifying. Unlike other functioins in the protocol (Such as withdraw
), there is no PDA validation constraint to ensure the fund account was created by the protocol.
An Attacker could exploit this vulnerability as follows:
A legitimate user (User A) creates a fund through the fund_create
function with proper PDA derivation.
A malicious actor (Attacker B) creates a fake fund account or uses an existing account they control.
When the User calls the contribute
function by using the fake fund account. The protocol transfer the funds from the user account to the fake funds account(which is controlled by the User) and the fund.amount_raised
will be increaed although the funds were not received to the Original Fund Account.
High
Manual Review
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.