Summary
100% of all REPORTED Findings have been addressed
- 0Risk Accepted
- 2Acknowledged
- 2Solved
- 4All Findings
- Critical0
- High0
- Medium0
- Low0
- Informational4
- 2Ack.
- 2Solved
INTRODUCTION#
NUVA engaged Halborn to conduct a security assessment on their smart contracts beginning on October 27th, 2026 and ending on October 28th, 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. The final remediation commit is ffb3e005bd3dc4ba4456650f748bb01639334c3c (main).
The reviewed contracts are the changes to RemoteVault between v1.6.3 and v1.7.1-pre-audit, and to CustomToken between v1.1.0 and v1.7.1-pre-audit. RemoteVault is an AML-compliant vault that takes asset deposits locally or through Circle CCTP and mints CustomToken shares after off-chain settlement on Provenance. The new version adds a deposit cap that compares the Provenance vault TVL, reported by a ProvenanceVaultOracle, plus pending and recently minted deposits against a keeper-set ceiling. CustomToken moves from a fixed deployment to a UUPS-upgradeable ERC20 with Ownable2Step ownership, owner-managed minters, ERC-2612 permit, and EIP-3009 transfer-with-authorization.
ASSESSMENT SUMMARY#
Halborn was provided with 2 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:
Identify potential security vulnerabilities within the smart contracts.
Verify that the smart contract functionality operates as intended.
In summary, Halborn did not identify any significant security risks. However, some enhancements were recommended to improve the deposit cap and ownership controls, which were addressed or acknowledged by the NUVA team. The main recommendations were:
Make the deposit cap count every committed deposit. Count pending pre-upgrade tickets in
pendingDepositTotal, add a keeper path that closes an unminted ticket and subtracts it, and use one global figure for in-flight deposits when several deployments feed the same Provenance vault.Disable ownership renouncement on
CustomToken. OverriderenounceOwnership()andrenounceRole()to revert, as the other owner-administered contracts in the repository do.
The following trust assumptions apply to the reviewed design:
The deposit cap relies on the keeper investing each deposit on Provenance before it calls
mint(), and on each oracle snapshot reading Provenance no earlier than it writes the snapshot.The cap treats the Provenance vault TVL, reported in its USD-pegged underlying, as equal to asset token units after decimal rescaling.
The owner and the keeper are trusted. The keeper sets the deposit cap and prices share issuance off-chain, and depositors rely on the operator to issue shares or make them whole off-chain.
TEST APPROACH AND METHODOLOGY#
Halborn performed a combination of manual review of the code and automated security testing to balance efficiency, timeliness, practicality, and accuracy in regard to the scope of the smart contract assessment. While manual testing is recommended to uncover flaws in logic, process, and implementation; automated testing techniques help enhance coverage of smart contracts 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 and purpose of the in-scope contracts.
Manual code review and walkthrough of the in-scope contracts.
Manual assessment of critical Solidity variables and functions to identify potential vulnerability classes.
Manual testing using custom scripts.
Local deployment and testing with (Hardhat).
Risk Methodology#
4.1 EXPLOITABILITY
Attack Origin (AO):
Attack Cost (AC):
Attack Complexity (AX):
Metrics:
| EXPLOITABILITY METRIC () | METRIC VALUE | NUMERICAL VALUE |
|---|---|---|
| Attack Origin (AO) | Arbitrary (AO:A) | 1 |
| Specific (AO:S) | 0.2 | |
| Attack Cost (AC) | Low (AC:L) | 1 |
| Medium (AC:M) | 0.67 | |
| High (AC:H) | 0.33 | |
| Attack Complexity (AX) | Low (AX:L) | 1 |
| Medium (AX:M) | 0.67 | |
| High (AX:H) | 0.33 |
4.2 IMPACT
Confidentiality (C):
Integrity (I):
Availability (A):
Deposit (D):
Yield (Y):
Metrics:
| IMPACT METRIC () | METRIC VALUE | NUMERICAL VALUE |
|---|---|---|
| Confidentiality (C) | None (C:N) | 0 |
| Low (C:L) | 0.25 | |
| Medium (C:M) | 0.5 | |
| High (C:H) | 0.75 | |
| Critical (C:C) | 1 | |
| Integrity (I) | None (I:N) | 0 |
| Low (I:L) | 0.25 | |
| Medium (I:M) | 0.5 | |
| High (I:H) | 0.75 | |
| Critical (I:C) | 1 | |
| Availability (A) | None (A:N) | 0 |
| Low (A:L) | 0.25 | |
| Medium (A:M) | 0.5 | |
| High (A:H) | 0.75 | |
| Critical (A:C) | 1 | |
| Deposit (D) | None (D:N) | 0 |
| Low (D:L) | 0.25 | |
| Medium (D:M) | 0.5 | |
| High (D:H) | 0.75 | |
| Critical (D:C) | 1 | |
| Yield (Y) | None (Y:N) | 0 |
| Low (Y:L) | 0.25 | |
| Medium (Y:M) | 0.5 | |
| High (Y:H) | 0.75 | |
| Critical (Y:C) | 1 |
4.3 SEVERITY COEFFICIENT
Reversibility (R):
Scope (S):
Metrics:
| SEVERITY COEFFICIENT () | COEFFICIENT VALUE | NUMERICAL VALUE |
|---|---|---|
| Reversibility () | None (R:N) | 1 |
| Partial (R:P) | 0.5 | |
| Full (R:F) | 0.25 | |
| Scope () | Changed (S:C) | 1.25 |
| Unchanged (S:U) | 1 |
| Critical | High | Medium | Low | Informational |
| 9 - 10 | 7 - 8.9 | 4.5 - 6.9 | 2 - 4.4 | 0 - 1.9 |
Scope#
Assessment Summary & Findings Overview#
# | Title | Severity | Score | Status |
|---|---|---|---|---|
| RemoteVault deposit cap ignores in-flight deposits of other deployments that share the Provenance vault | Informational | 1.7 | Acknowledged10/28/2026 | |
| Ownership renouncement permanently disables CustomToken upgrades and minter management | Informational | 1.0 | Solved10/28/2026 | |
| Pre-upgrade pending deposits are not counted against the RemoteVault deposit cap | Informational | 0.8 | Acknowledged10/28/2026 | |
| Unminted deposit tickets permanently consume RemoteVault deposit cap capacity | Informational | 0.2 | Solved10/28/2026 |
Findings & Tech Details#
Description
Recommendation
Remediation Comment
Description
Recommendation
Description
Recommendation
Remediation Comment
Description
Recommendation
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.
