Exactly Protocol — disclosed vulnerability reports and payouts
Every publicly disclosed and closed bug bounty report we hold for Exactly Protocol, with our own summary of each finding and a link to the original disclosure.
- Reports indexed
- 16
- Total paid
- $0
- Critical
- 0
- Largest payout
- $0
This page collects the 16 closed, publicly disclosed Exactly Protocol reports indexed on CoinBuggie. Nothing here is active or unpatched — every entry was published by the programme or the researcher after remediation.
The findings concentrate in Logic error, Front-running / MEV, across EVM-Solidity. Reading a single protocol end to end is the fastest way to see which assumptions its codebase repeatedly gets wrong, which is usually a better predictor of where the next finding lives than the category alone.
Use the vulnerability class links below to compare these findings against the same bug class in other protocols.
What reviewers look for
- Logic error findings disclosed against Exactly Protocol
- Front-running / MEV findings disclosed against Exactly Protocol
Curated highlights
The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.
Exactly Protocol: Profitable liquidations and accumulation of bad debt due to earnings accumulator not being triggered before liquidating
Exactly Protocol's liquidation flow previews a borrower's collateral against totalAssets() before the earnings accumulator is accrued and converted into floating assets. Because a liquidatee's existing floating market shares are entitled to a pro-rata share of newly settled lender assets and expired-maturity penalty-rate debt, the actual collateral seized is smaller than intended. In one scenario this leaves the liquidatee with a net profit (undermining any incentive to repay), and in another it strands residual dust collateral alongside debt that Auditor::handleBadDebt() can never fully clear, causing losses to accumulate. The judge upheld this as medium severity after an escalation from the reporter's high-severity claim, citing likelihood and the availability of same-block double liquidations as mitigations.
Exactly Protocol: Utilization rates are 0 when average assets are 0, which may be used to game maturity borrows / deposits / withdrawals
Exactly Protocol's interest-rate model returns a utilization ratio of 0 whenever the average floating assets are 0, including the first-block state after a market is deployed when the exponential average dampening factor has not yet kicked in. Combined with floatingAssetsAverage starting at 0, a user can deposit and borrow in the same block (or whenever assets sit at zero) and obtain a fixed-rate loan at the lowest possible interest even while the market is at its highest utilization. The fixed fees owed end up unassigned and later convert to floating assets, effectively letting the borrower pay far less than lenders are owed. Sherlock accepted the reporter's escalation and adjudicated the issue as Medium severity.
Exactly Protocol: When bad debts are cleared, there will be some untracked funds
Exactly Protocol's fixed-rate lending markets track all funds through floatingAssets, floatingDebt, floatingBackupBorrowed and the earningsAccumulator. When a borrower's bad debt is cleared, clearBadDebt repays the loan principal out of floatingBackupBorrowed but deducts the full principal-plus-fee from the earningsAccumulator, even though the fee portion had already been booked into the maturity pool's unassignedEarnings. If the liquidated borrower is the last holder of that maturity pool, there is no code path that converts the stranded unassignedEarnings back into tracked funds, so real tokens remain in the contract but are never accounted for. The report demonstrates the divergence with a reproduction test that seeds the accumulator via a late-repayment penalty, borrows under a manufactured DAI/WETH price, liquidates after dropping the price, and shows actual token balance exceeding the tracked balance by exactly the uncleared fee. The protocol remediated the issue by sweeping a cleared pool's unassignedEarnings into the earningsAccumulator when its last borrow is cleared.
Exactly Protocol: Unassigned pool earnings can be stolen when a maturity borrow is liquidated by depositing at maturity with 1 principal
In Exactly Protocol's fixed-rate market, liquidating a borrower's maturity loan calls noTransferRepayAtMaturity() with canDiscount=false, so unassigned pool earnings are not folded into the earningsAccumulator and subtracted from the repay. Those earnings later accrue to floatingAssets and are claimable by the next maturity depositor. An attacker can deposit 1 wei principal, borrow 1 wei at maturity to make floatingBackupBorrowed exceed supply, and then deposit 1 wei at maturity to capture the entire unassigned earnings of the liquidated pool (shown reaching ~6.657e18 token value). The team fixed this by converting unassigned earnings to the time-based earningsAccumulator during liquidation, and the fix was signed off by the Lead Senior Watson.
Exactly Protocol: Theft of unassigned earnings from a fixed pool
Exactly Protocol's fixed-rate markets calculate the upfront borrow fee with mulDivDown rounding, so a dust-sized principal rounds the fee to zero. An attacker who repeats such dust borrows on a single fixed pool accumulates a large principal carrying no fee, then repays early to receive a discount derived from the pool's unassigned earnings, ultimately repaying less than borrowed. The difference is drawn from the pool's unassigned earnings and scales with those earnings; the economics only favor the attacker on very low-gas L2s. The finding was confirmed as Medium severity by the Sherlock lead judge and fixed via PR #726.
Exactly Protocol: Fixed interest rates can be manipulated by a whale borrower
Exactly Protocol's fixed-rate market computes borrow rates from current floating debt rather than a time-averaged floating-debt figure, while the supply side is averaged precisely to resist single-block manipulation. A whale can repay a very large floating loan and then take a fixed-rate loan in the same block at a heavily suppressed rate, then re-borrow the repaid funds, leaving their economic position unchanged. A mainnet-fork test on Optimism shows the fixed-rate fee on a 1e18 borrow dropping from ~58% to ~1% of principal. This lets a borrower obtain fixed-rate credit far below the market rate, transferring value away from lenders.
All reports in this group
- Exactly Protocol: The Rounding Done in Protocol's Favor Can Be Weaponized to Drain the ProtocolLogic error$0
- Exactly Protocol: Manipulation of the floating debt by updating `floatingBackupBorrowed`Logic error$0
- Exactly Protocol: `Market::liquidate()` will not work when most of the liquidity is borrowed due to wrong liquidator `transferFrom()` orderLogic error$0
- Exactly Protocol: Liquidation does not prioritize lowest LTV tokensLogic error$0
- Exactly Protocol: Bad debt isn't cleared when `earningsAccumulator` is lower than a fixed-pool bad debtLogic error$0
- Exactly Protocol: The claimable rewards amount for borrowers decreases over timeLogic error$0
- Exactly Protocol: borrow() maliciously let others to enter marketLogic error$0
- Exactly Protocol: `rewardData.releaseRate` is incorrectly calculated on `RewardsController::config()` when `block.timestamp > start` and `rewardData.lastConfig != rewardData.start`Logic error$0
- Exactly Protocol: DoS on liquidations when utilization rate is highFront-running / MEV$0
- Exactly Protocol: Expired maturities longer than `FixedLib.INTERVAL` with unaccrued earnings may be arbitraged and/or might lead to significant bad debt creationLogic error$0