Summary
100% of all REPORTED Findings have been addressed
- 2Acknowledged
- 1Risk Accepted
- 27Solved
- 30All Findings
- Critical0
- High0
- Medium2
- 2Solved
- Low6
- 5Solved
- 1Risk A.
- Informational22
- 20Solved
- 2Ack.
Introduction#
Craftt engaged Halborn to conduct a security assessment on their smart contracts beginning on June 23rd, 2026 and ending on July 9th, 2026. The assessment scope was limited to the smart contracts provided to Halborn. Commit hashes and additional details are available in the Scope section of this report.
Following the initial assessment, the Craftt team submitted remediation updates for all identified findings. Halborn reviewed the final remediated code at commit 52e10a82d64c156904a9d227382f8ec0c18c5cff, which represents the final remediation commit for this assessment.
The reviewed contracts are an upgradeable, pending-interest lending pool for off-chain-collateralized lending. Investors deposit an ERC-20 payment token through LendingPool and receive a KYC-gated ERC20Votes share token (PoolShares), while a privileged admin transfers funds to off-chain borrowers and funds accrued interest back into investor-redeemable balances over time through partial distribute() calls. Interest accrues continuously into a separate RAY-precision pending index and is settled lazily per user via distribution epochs. The scope covers the core pool and its extensions, the share token (PoolShares), the RAY and accrual-matrix math libraries, the ERC-7201 namespaced storage layouts, the transparent-proxy factory (LendingPoolFactory), and the shared access-control, identity-registry, and ERC-2771 meta-transaction infrastructure that gate roles, KYC, and gas-relayed calls.
ASSESSMENT SUMMARY#
Halborn was provided with 13 days for this engagement and assigned a full-time security engineer to assess the security of the smart contracts in scope. The assigned engineer possesses deep expertise in blockchain and smart contract security, including hands-on experience with multiple blockchain protocols.
The objective of this assessment is to:
Understand how the protocol works end to end and identify security issues that could affect users or pool operations.
Follow the full investor journey, from KYC approval and deposits through interest accrual, share transfers, redemptions, and withdrawals.
Review how defaults, writedowns, recoveries, wallet migrations, and administrative reclaims are handled.
Confirm that balances, shares, borrowed funds, fees, yield deposits, and recovery funds remain correctly accounted for throughout the pool lifecycle.
Assess administrative permissions, emergency controls, configuration changes, and contract upgrades.
Test integrations such as meta-transactions, hooks, identity checks, reward distribution, and ERC-20 transfers.
Challenge the system with rounding, timing, repeated-default, batch-processing, gas, and multi-epoch edge cases.
In summary, Halborn identified several areas for improvement to reduce the likelihood and impact of security risks, which were addressed by the Craftt team. The main recommendations were:
Calculate recovery entitlements from historical economic balances rather than delegated voting power.Reject share transfers that move shares without funded value and safely handle zero-funded share-supply states.Block share transfers while a redemption request is outstanding or migrate the request with the position.Use balance snapshots or deposit cutoffs for principal distributions.Replace cumulative-writedown-factor flooring with a reset or guard that preserves accounting consistency.Use the same loss-bearing population for writedowns and subsequent recoveries.Retain sufficient tier history to calculate reward accrual accurately.Block cancellations during active redemption epochs or update the epoch denominator accordingly.
Scope#
Findings Overview#
# | Title | Severity | Score | Status |
|---|---|---|---|---|
HAL-01 | vote delegation redirects recovery claims | Medium | 5.0 | Solved07/23/2026 |
HAL-02 | rounded share transfers create recovery-bearing ghost shares | Medium | 5.0 | Solved07/23/2026 |
HAL-03 | share transfers detach queued redemptions from their backing | Low | 3.8 | Solved07/23/2026 |
HAL-04 | depositors can sandwich public principal distributions | Low | 3.4 | Risk Accepted07/23/2026 |
HAL-05 | writedown-factor flooring lets old holders drain new deposits | Low | 2.5 | Solved07/23/2026 |
HAL-06 | exited investors remain entitled to later recoveries | Low | 2.5 | Solved07/23/2026 |
HAL-07 | truncated tier history misprices reward accrual | Low | 2.5 | Solved07/23/2026 |
HAL-08 | mid-epoch cancellations strand redemption capacity | Low | 2.5 | Solved07/23/2026 |
HAL-09 | one sub-threshold redemption reverts the entire settlement batch | Informational | 1.3 | Solved07/23/2026 |
HAL-10 | forward request field order conflicts with the eip-712 type hash | Informational | 1.3 | Solved07/23/2026 |
HAL-11 | a single reserve admin controls every pool outflow | Informational | 1.3 | Solved07/23/2026 |
HAL-12 | forwarder return-data handling breaks batch isolation and gas checks | Informational | 1.3 | Solved07/23/2026 |
HAL-13 | lost-wallet migration leaves an inter-transaction theft window | Informational | 1.0 | Solved07/23/2026 |
HAL-14 | zero recovery lockout permits immediate admin reclaim | Informational | 0.8 | Solved07/23/2026 |
HAL-15 | flat redemption fees can consume the entire payout | Informational | 0.8 | Solved07/23/2026 |
HAL-16 | zero allocations delete funded redemption requests | Informational | 0.8 | Solved07/23/2026 |
HAL-17 | a self-reclaimer configuration traps recovery funds | Informational | 0.8 | Solved07/23/2026 |
HAL-18 | yield-wallet losses cannot be recorded on-chain | Informational | 0.5 | Solved07/23/2026 |
HAL-19 | stale aml/kyc timestamps create immediately expired approvals | Informational | 0.4 | Acknowledged |
HAL-20 | global aml/kyc duration changes retroactively alter wallet validity | Informational | 0.4 | Acknowledged |
HAL-21 | withdrawal fee increases can brick existing soft-lock exits | Informational | 0.4 | Solved07/23/2026 |
HAL-22 | unbounded hook return data can exhaust operation gas | Informational | 0.3 | Solved07/23/2026 |
HAL-23 | contract admins can disable aml/kyc checks without governance | Informational | 0.3 | Solved07/23/2026 |
HAL-24 | share and admin-controller proxies lack factory upgrade helpers | Informational | 0.1 | Solved07/23/2026 |
HAL-25 | reward funding credits tokens that were never received | Informational | 0.1 | Solved07/23/2026 |
HAL-26 | setting the pool as yield wallet blocks final wind-down | Informational | 0.1 | Solved07/23/2026 |
HAL-27 | oversized upgrade batches can exceed the block gas limit | Informational | 0.1 | Solved07/23/2026 |
HAL-28 | investor migration resets the withdrawal throttle | Informational | 0.1 | Solved07/23/2026 |
HAL-29 | partial distributions can overflow the accrual matrix | Informational | 0.0 | Solved07/23/2026 |
HAL-30 | factory deployments permit a zero implementation update delay | Informational | 0.0 | Solved07/23/2026 |
Disclaimer#
Halborn strongly recommends conducting a follow-up assessment of the project either within six months or immediately following any material changes to the codebase, whichever comes first. This approach is crucial for maintaining the project’s integrity and addressing potential vulnerabilities introduced by code modifications.
