Prepared by:
HALBORN
Last Updated 09/19/2025
Date of Engagement: July 29th, 2025 - August 4th, 2025
100% of all REPORTED Findings have been addressed
All findings
10
Critical
2
High
0
Medium
2
Low
3
Informational
3
Smithii engaged Halborn to conduct a security assessment of the RECC programs from 29th July to 4th August, 2025. The security assessment was scoped to the smart contracts provided in the GitHub repository recc-program, commit hashes and further details can be found in the Scope section of this report.
The RECC Program is a Real World Asset (RWA) investment platform that enables investors to participate in real estate opportunities. Anyone can list projects on the platform, and investors can contribute funds to these projects in exchange for earnings once the business is completed in the real world. The platform also supports the creation of external markets, allowing investors to exit their positions early.
Halborn was provided 5 days for the engagement and assigned 1 full-time security engineers to review the security of the Solana Programs in scope. The engineers are blockchain and smart contract security experts with advanced smart contract hacking skills, and deep knowledge of multiple blockchain protocols.
The purpose of the assessment is to:
Identify potential security issues within the Solana Program.
Ensure that smart contract functionality operates as intended.
In summary, Halborn identified some improvements to reduce the likelihood and impact of risks, which were mostly addressed by the Smithii team. The main ones were the following:
Store the contribution token mint in the 'fundraise' PDA during 'create_fundraise', and add a check in 'contribute' to ensure the supplied 'contribution_mint' matches the one stored in the fundraise account.
Validate that 'clmm_program' passed in 'migrate' instruction matches raydium CLMM Program ID.
Move the initial Raydium CLMM pool creation and initialization logic to the 'create_fundraise' instruction.
Remove the current balance check 'is_vault_ata_credited' in claim instruction.
Ensure that the 'project' account provided in the 'claim' instruction matches the 'project' key stored in the 'fundraise' PDA.
Utilize CreateV1CpiBuilder from the 'mpl-token-metadata' provided by the Metaplex Token Metadata program. Additionally, the program should validate that the 'contribution_mint' does not have the TransferFee extension enabled.
Halborn performed a combination of a manual review of the source code and automated security testing to balance efficiency, timeliness, practicality, and accuracy in regard to the scope of the program assessment. While manual testing is recommended to uncover flaws in business logic, processes, and implementation; automated testing techniques help enhance coverage of programs and can quickly identify items that do not follow security best practices.
The following phases and associated tools were used throughout the term of the assessment:
Research into the architecture, purpose, and use of the platform.
Manual program source code review to identify business logic issues.
Mapping out possible attack vectors.
Thorough assessment of safety and usage of critical Rust variables and functions in scope that could lead to arithmetic vulnerabilities.
Scanning dependencies for known vulnerabilities (cargo audit).
Local runtime testing (anchor test).
| EXPLOITABILITY METRIC () | METRIC VALUE | NUMERICAL VALUE |
|---|---|---|
| Attack Origin (AO) | Arbitrary (AO:A) Specific (AO:S) | 1 0.2 |
| Attack Cost (AC) | Low (AC:L) Medium (AC:M) High (AC:H) | 1 0.67 0.33 |
| Attack Complexity (AX) | Low (AX:L) Medium (AX:M) High (AX:H) | 1 0.67 0.33 |
| IMPACT METRIC () | METRIC VALUE | NUMERICAL VALUE |
|---|---|---|
| Confidentiality (C) | None (C:N) Low (C:L) Medium (C:M) High (C:H) Critical (C:C) | 0 0.25 0.5 0.75 1 |
| Integrity (I) | None (I:N) Low (I:L) Medium (I:M) High (I:H) Critical (I:C) | 0 0.25 0.5 0.75 1 |
| Availability (A) | None (A:N) Low (A:L) Medium (A:M) High (A:H) Critical (A:C) | 0 0.25 0.5 0.75 1 |
| Deposit (D) | None (D:N) Low (D:L) Medium (D:M) High (D:H) Critical (D:C) | 0 0.25 0.5 0.75 1 |
| Yield (Y) | None (Y:N) Low (Y:L) Medium (Y:M) High (Y:H) Critical (Y:C) | 0 0.25 0.5 0.75 1 |
| SEVERITY COEFFICIENT () | COEFFICIENT VALUE | NUMERICAL VALUE |
|---|---|---|
| Reversibility () | None (R:N) Partial (R:P) Full (R:F) | 1 0.5 0.25 |
| Scope () | Changed (S:C) Unchanged (S:U) | 1.25 1 |
| Severity | Score Value Range |
|---|---|
| Critical | 9 - 10 |
| High | 7 - 8.9 |
| Medium | 4.5 - 6.9 |
| Low | 2 - 4.4 |
| Informational | 0 - 1.9 |
Critical
2
High
0
Medium
2
Low
3
Informational
3
| Security analysis | Risk level | Remediation Date |
|---|---|---|
| Missing Validation on Contribution Mint Enables Vault Drain and Raydium LP Theft | Critical | Solved - 07/31/2025 |
| Missing Validation on clmm_program Allows Fundraise Vault Drain | Critical | Solved - 09/08/2025 |
| Unrestricted migrate Invocation Before Target Reached Causes Fund Misallocation | Medium | Solved - 09/08/2025 |
| First Claim Can Block All Subsequent Claims | Medium | Solved - 09/06/2025 |
| Missing validation in claim instruction allow pre-mature withdraw of locked funds | Low | Solved - 07/31/2025 |
| Pool Front-Running Blocks External Market Creation | Low | Solved - 09/08/2025 |
| Token-2022 LP Mint and Transfer Fee Extension Not Properly Supported | Low | Solved - 09/08/2025 |
| Missing Validation in Multiple Instructions | Informational | Partially Solved - 09/08/2025 |
| Users Can Bypass Protocol Fees by Claiming Small Amounts | Informational | Solved - 09/08/2025 |
| Unused Accounts and Redundant PDA Derivations | Informational | Solved - 09/08/2025 |
//
//
//
//
//
//
//
//
//
//
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.
// Download the full report
RECC
* Use Google Chrome for best results
** Check "Background Graphics" in the print settings if needed