Under normal behavior, the fund_investor() function lets users invest ETH in exchange for shares, using a computed share_price that depends on company balance and debt.
The issue is that this calculation happens entirely on-chain at transaction execution time, with no guarantee that the price matches user expectations. Between the time a user submits the transaction and the time it is mined, the company_balance, issued_shares, or holding_debt can change, resulting in a different share_price.
This allows MEV bots or privileged actors to front-run investors, manipulate company balance, and cause users to receive fewer shares than expected.
Likelihood:
This occurs during normal operation whenever multiple investors interact in short time windows, or when the owner changes company balance.
It can be deliberately exploited by MEV actors monitoring the mempool for pending fund_investor() calls.
Impact:
Users can lose value by receiving fewer shares than they anticipated.
MEV actors or insiders can profit by momentarily manipulating company_balance before others’ transactions are executed.
Add slippage protection by allowing the investor to specify the minimum number of shares expected in the transaction.
If the actual number of shares to be issued falls below that threshold, the transaction should revert.
This mitigation gives users deterministic control over their investment outcome, ensuring the transaction fails if the on-chain price moves unfavorably between submission and execution.
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.