anticsdecoded|Portfolio
SEC|2026
/audits / JUPITER_LEND.rs
cat /audits/JUPITER_LEND.rs
NODE: CONTEST

Lending protocol

// engagement
protocolJupiter Lend
categoryLending protocol
kindcontest · Code4rena
date2026-02
duration3 weeks
languageRust / Anchor
chainsSolana
nSLOC1,200
// findingsNODE: 1 FND
critical0
high0
medium0
low1
info0
gas0
// summary

Code4rena competition review of Jupiter Lend, a Solana (Anchor/Rust) lending protocol, focused on the liquidity layer's flashloan borrow/payback raw-debt accounting. Submission S-423, validated Low.

// methodology
  • Manual review
  • PoC development
  • Rounding/invariant analysis
// scope
pathnsloc
programs/liquidity/src/state/user_borrow_position.rs300
programs/liquidity/src/*900
total1,200
// findings
L-01lowacknowledged

Flashloan deactivation lacks a zero-debt invariant; residual raw-debt dust accumulates to `BorrowLimitReached` DoS

Flashloan borrow rounds raw debt up (`safe_div_ceil`) while payback rounds down (`safe_div`), and `flashloan_payback` always deactivates without a zero-debt invariant, so each exact cycle leaves about 1 raw unit of residual debt on the shared per-mint position; permissionless repetition accumulates it until `BorrowLimitReached` blocks all further flashloan borrows for that mint — a liveness DoS with no funds lost.