Summary
100% of all REPORTED Findings have been addressed
- 2Acknowledged
- 1Risk Accepted
- 30Solved
- 33All Findings
- Critical0
- High0
- Medium3
- 3Solved
- Low15
- 14Solved
- 1Risk A.
- Informational15
- 13Solved
- 2Ack.
INTRODUCTION#
Memora engaged Halborn to conduct a security assessment on their Solana-Canton token bridge implemented in DAML beginning on August 26, 2026 and ending on September 3, 2026. The security assessment was scoped to the repository listed with commit hash, and further details in the Scope section of this report.
This protocol implements a bi-directional bridge between Solana and the Canton ledger, wrapping native SOL as CIP-56 cSOLwSOL Holding contracts.
An operator (a relayer process) drives all bridge actions, recording attested Solana deposits, minting the corresponding Canton holdings, and processing redemptions back to Solana, while a decentralized registrar co-signs every payout authorization as a required second authority.
A configurable quorum of independent attestors must agree on the facts of each Solana deposit or expired-deposit refund before any mint or refund proceeds, and end users interact only with standard CIP-56 registry contracts, never becoming informees of the bridge package itself.
Redemptions can be driven either through a transfer-and-burn flow or a burn-offer-and-claim flow, each producing a signed payout authorization that a relayer uses to release the corresponding SOL from the Solana vault.
ASSESSMENT SUMMARY#
The team at Halborn assigned one full-time security engineer to verify the security of the smart contracts. The security engineer is a blockchain and smart contract security expert with advanced penetration testing and smart contract hacking skills, and deep knowledge of multiple blockchain protocols.
The purpose of the assessment is to:
Identify potential security issues within the different smart contracts and services.
Ensure that smart contract and services functionality operates as intended.
In summary, Halborn identified some improvements to reduce the likelihood and impact of risks, which were mostly addressed by the Memora team. The main recommendations were:
Add a defensive branch in ClaimBurnForRedemption to handle a missing ExecutedBurn receipt without aborting the entire redemption transaction.Measure the burn claim window from ExecutedBurn creation rather than offer creation, and add an escalation path for claims that miss the window.Replace the exact depositTime equality check in quorum validation with a bounded-delta comparison to tolerate normal RPC clock skew across attestors.Fetch the mint binding and enforce amount representability before the burn executes in AcceptTransferAndBurn, and add the same check to OfferUserBurn, which omits it entirely.Replace the base58 shape-only address check with a real decode, byte-length, and curve-point validation before allowing a burn.Require attestor-set overlap or a delayed two-phase rotation in RotateConfig, and record an on-ledger rotation receipt.
Scope#
Findings Overview#
# | Title | Severity | Score | Status |
|---|---|---|---|---|
HAL-01 | Claim Window Anchored At Offer Creation Strands Late-Accepted Burns | Medium | 6.3 | Solved09/05/2026 |
HAL-02 | Exact DepositTime Equality Silently Splits Quorum and Strands Deposits | Medium | 5.4 | Solved09/05/2026 |
HAL-03 | ClaimBurnForRedemption Aborts Permanently When The Registry Suppresses The ExecutedBurn Receipt | Medium | 5.0 | Solved09/05/2026 |
HAL-04 | Representability Guard Absent At Transfer-Burn And Burn-Offer Sites | Low | 3.4 | Solved09/05/2026 |
HAL-05 | Base58 Shape Check Allows Unpayable Burn Destinations Past On-Ledger Validation | Low | 3.4 | Solved09/05/2026 |
HAL-06 | RotateConfig Permits Wholesale Attestor Replacement With No Overlap Requirement | Low | 3.1 | Solved09/05/2026 |
HAL-07 | setupWith Omits Party Distinctness Checks, Collapsing Payout-Forgery Protection | Low | 2.8 | Solved09/05/2026 |
HAL-08 | Pause Gate Incomplete Across Bridge And RedemptionService, With No Registrar Override | Low | 2.7 | Solved09/07/2026 |
HAL-09 | Registrar Can Mint Tokens Bypassing Bridge Attestor Quorum | Low | 2.7 | Risk Accepted09/10/2026 |
HAL-10 | Absence of Mint Cap Allows Unbounded Supply on Quorum Compromise | Low | 2.7 | Solved09/05/2026 |
HAL-11 | Operator Withdraw Authority Enables Deposit Delivery Hijack | Low | 2.7 | Solved09/07/2026 |
HAL-12 | BurnRedemptionRequest Omits Attestor Observers, Enabling Blind Attestation | Low | 2.5 | Solved09/05/2026 |
HAL-13 | Self-Transfer Deposits Bypass PendingMint Tracking in mintDeposit's Wildcard Branch | Low | 2.5 | Solved09/05/2026 |
HAL-14 | Lowered Threshold Retroactively Validates Stale Attestation Sets | Low | 2.3 | Solved09/05/2026 |
HAL-15 | Fulfill Choices Archive Payout Obligations on Unverified Operator Assertion | Low | 2.2 | Solved09/06/2026 |
HAL-16 | Replay-Guard Seed Omission Enables Double-Payout Across Lineage Reset | Low | 2.0 | Solved09/06/2026 |
HAL-17 | Single-Bridge-Per-Instrument Invariant Has No On-Ledger Enforcement | Low | 2.0 | Solved09/06/2026 |
HAL-18 | Operator Retains Unilateral Archive Authority Over Contracts Other Parties Rely On | Low | 2.0 | Solved09/06/2026 |
HAL-19 | Duplicate Attestors Pass Ensure Validation But Brick Runtime Quorum | Informational | 1.9 | Solved09/06/2026 |
HAL-20 | ProcessedArchive Contracts Accumulate Unboundedly In The ACS | Informational | 1.7 | Solved09/06/2026 |
HAL-21 | Contradictory SolanaSender Docstring Directs Native-SOL Refunds to Closed Account | Informational | 1.5 | Solved09/06/2026 |
HAL-22 | Batch Dedupe Against Post-Prune Map Enables Double Mint | Informational | 1.5 | Solved09/06/2026 |
HAL-23 | setupWith Accepts And Reuses Configuration Inputs Without Adequate Validation | Informational | 1.2 | Solved09/06/2026 |
HAL-24 | RecordExpiredRefund Omits Guards Present On Every Sibling Solana-Facing Choice | Informational | 1.1 | Solved09/06/2026 |
HAL-25 | PendingMint Cannot Recover Once Its Stored Registry Handles Are Superseded | Informational | 1.0 | Solved09/07/2026 |
HAL-26 | mkExtraArgs Always Passes Empty Credential Lists To Registry | Informational | 0.8 | Solved09/06/2026 |
HAL-27 | Quorum-Agreed Wrong Owner Permanently Strands Deposited Principal | Informational | 0.8 | Solved09/06/2026 |
HAL-28 | ClaimBurnForRedemption Lacks A Structural Burn-Origin Marker | Informational | 0.8 | Solved09/06/2026 |
HAL-29 | RecordDeposit And RecordDepositBatch Divulge Solana Attestation Metadata To The Registrar | Informational | 0.7 | Acknowledged09/06/2026 |
HAL-30 | RedemptionService Attestor Set Stale After Bridge Rotation | Informational | 0.6 | Solved09/06/2026 |
HAL-31 | Mint-Delivery Transfer Carries No Deposit Correlation Metadata | Informational | 0.3 | Solved09/06/2026 |
HAL-32 | Order-Sensitive Attestor Comparison Blocks Idempotent Setup Reruns | Informational | 0.3 | Solved09/06/2026 |
HAL-33 | Attestation Template Lacks Ensure Clause Enabling ACS Spam | Informational | 0.3 | Acknowledged09/13/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.
