RustFund

First Flight #36
Beginner FriendlyRust
100 EXP
View results
Submission Details
Severity: high
Invalid

Inconsistent State Managment

Summary

The withdraw function doesn't properly validate state conditions

Vulnerability Details

Missing checks for:

  • Campaign completion status

  • Deadline conditions

  • Contribution refunds

Impact

Could allow unauthorized withdrawals or fund loss

Proof Of Concept

// Example of unauthorized withdrawal
// 1. Campaign deadline passes
// 2. Some contributors request refunds
// 3. Creator withdraws remaining funds
// Result: Contributors lose money

Tools Used

Manual review

Recommendations

Implement comprehensive state validation:

pub fn withdraw(ctx: Context<FundWithdraw>) -> Result<()> {
let fund = &ctx.accounts.fund;
require_keys!(
fund.amount_raised > 0,
ErrorCode::InvalidState,
"No funds to withdraw"
);
require_keys!(
fund.deadline == 0 || fund.deadline < Clock::get().unwrap().unix_timestamp as u64,
ErrorCode::InvalidState,
"Deadline not reached"
);
// ... rest of function
}
Updates

Appeal created

bube Lead Judge 5 months ago
Submission Judgement Published
Invalidated
Reason: Too generic

Support

FAQs

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