Q3 2026 Security & Compliance$1.18B stolen across 107 incidents. Main drivers: supply chain, smart contracts, keys.
Get the report →

Audit name:

[SCA] Tortuga Estate | Canisters | Jun2026

Date:

Jul 26, 2026

Table of Content

→Introduction
→Audit Summary
→System Overview
→Potential Risks
→Findings
→Appendix 1. Definitions
→Appendix 2. Scope
→Appendix 3. Additional Valuables
→Disclaimer

Want a comprehensive audit report like this?

Introduction

We express our gratitude to the Tortuga Estate team for the collaborative engagement that enabled the execution of this Smart Contract Security Assessment.

Tortuga Estate is a cross-chain real-world-asset tokenization platform whose Internet Computer control plane maintains the canonical record of token holdings, holder identity, and compliance state, and signs the corresponding EVM transactions through threshold ECDSA. Token holders receive on-chain positions representing tokenized real estate, while mint, burn, forced-transfer, freeze, and recovery actions originate as authorized intents on the Internet Computer and are propagated to satellite EVM token contracts. The audit covered the Master Ledger control-plane canister and the EVM Connector Chain-Fusion effector canister that together comprise the ICP side of the platform.

Document

NameSmart Contract Code Review and Security Analysis Report for Tortuga Estate
Audited ByKerem Solmaz, Hamza Sajid, Tanuj Soni
Approved BySeher Saylik
Websitehttps://tortuga.estate/→
Changelog16/07/2026 - Preliminary Report
18/08/2026 - Final Report
PlatformInternet Computer
LanguageRust
TagsReal World Assets (RWA), Fungible Token, Bridge, Oracle, Centralization, Upgradable
Methodologyhttps://docs.hacken.io/methodologies/smart-contracts→
  • Document

    Name
    Smart Contract Code Review and Security Analysis Report for Tortuga Estate
    Audited By
    Kerem Solmaz, Hamza Sajid, Tanuj Soni
    Approved By
    Seher Saylik
    Changelog
    16/07/2026 - Preliminary Report
    18/08/2026 - Final Report
    Platform
    Internet Computer
    Language
    Rust
    Tags
    Real World Assets (RWA), Fungible Token, Bridge, Oracle, Centralization, Upgradable

Review Scope

Repositoryhttps://github.com/tortuga-estate/tortuga-canisters-hacken-clean→
Initial Commit841f88d
Final Commite4b4cce

Audit Summary

14Total Findings
7Resolved
7Accepted
0Mitigated

The system users should acknowledge all the risks summed up in the risks section of the report

Documentation quality

The project provides a repository README describing the workspace stack, layout, and build process, and references a dedicated architecture document. Inline rustdoc coverage is strong across state modules, pipelines, and entry points, and individual functions document their authorization gate, the preconditions they read, and their idempotency guarantees. The 14 mint preconditions and the burn preconditions are cross-referenced to the design specification sections, which aids traceability between the specification and the implementation.

Code quality

Code structure is well-organized and follows Rust and Internet Computer canister best practices generally. State is held entirely in stable structures, entry points apply deny-by-default role guards on their first line, and the evm_connector enforces a sole-caller relationship with the master_ledger. Several business logic and access-control issues, primarily around precondition evaluation, oracle ingestion, and reconciliation, were identified and reported.

Test coverage

Code coverage of the project can not be measured. However, project maintains PocketIC integration suites organized per flow, alongside access-control, fuzz, and upgrade tests, and tracks line coverage through the llvm-cov tooling wired into the build. Coverage of the primary mint, burn, and propagation flows is present. Extending negative-case and edge-case coverage for reconciliation divergence, oracle staleness boundaries, and retry paths is recommended.

System Overview

Tortuga Estate is a cross-chain real-world-asset tokenization platform in which the Internet Computer holds the authoritative state and the satellite EVM contracts execute the corresponding token actions. The audited workspace implements the ICP side of the system as two canisters that separate control from execution: the master_ledger control plane and the evm_connector Chain-Fusion effector.

The master_ledger canister is the canonical record of holdings, holder identity, and compliance for every tokenized property. It maintains per-property, per-chain, per-holder balances in stable storage, and it orchestrates state machines for minting, burning, and cross-chain propagation. Mint authorization runs through a set of fourteen preconditions defined by the design specification, covering signer quorum, timelock elapse, veto quorum, circuit-breaker status, attestation and price freshness, collateralization, supply cap, holder identity, wallet-to-holder binding, and the authorized-signer binding for the target chain. Burn authorization mirrors a subset of these checks, with a self-burn path in which the holder's own wallet signature on the satellite contract serves as the authorization and the canister records the burn rather than enforcing quorum and timelock. Operations are approved and vetoed under an N-of-M model whose signer and veto thresholds are supplied at initialization.

The master_ledger also holds the supporting control state that the preconditions read: a property registry describing each tokenized asset (its supply cap, supported chains, materiality and collateralization thresholds, and attestation and price freshness windows), an oracle store holding the latest price observation and collateral attestation per property, a holder identity and wallet-binding registry, a reconciliation engine that periodically compares canonical balances against on-chain balances, and per-scope circuit breakers that halt minting at the global, per-property, or per-chain level. A heartbeat drives periodic reconciliation polling on a fixed interval.

The evm_connector canister is the effector that turns an authorized intent into a signed and submitted EVM transaction. It accepts calls only from the configured master_ledger principal, derives per-chain signing addresses through Internet Computer threshold ECDSA over secp256k1, encodes the target calldata using the shared ABI encoders, reserves a nonce, signs the transaction, and submits it to the configured primary and backup RPC endpoints. It holds per-chain configuration including the chain identifier, derivation path, derived address, target token and identity-registry contract addresses, RPC endpoints, and finality depth.

The two canisters interact through typed inter-canister calls: the master_ledger dispatches signing and submission requests to the evm_connector for mint, burn, forced-transfer, freeze, identity, and recovery operations, and it reads back the connector's derived address during onboarding so a precondition can verify it matches the authorized signer declared for the chain.

Privileged Roles

  • Signer (master_ledger): The Signer role forms the multi-signature quorum for mint and burn dispatch. The set of principals holding this role constitutes the signer quorum that satisfies precondition #1, and Signers also drive the approve and veto transitions. Signers additionally administer the control state the mint preconditions read: registering and updating properties in the registry, setting the oracle price and collateral attestation for a property, binding holder identities and wallets, recording the connector's derived signer address, and configuring snapshot endpoints. Compromise of enough Signer principals to reach quorum would allow authorizing mints and burns and manipulating the property, oracle, and identity state those authorizations depend on.

  • Pauser (master_ledger): The Pauser role manually activates and deactivates circuit breakers at the global, per-property, or per-chain scope, halting minting for the affected scope. Misuse would allow denial of service by halting minting, or premature deactivation of a breaker that was tripped automatically by the reconciliation or invariant checks.

  • Operations (master_ledger): The Operations role ingests price observations from the price-oracle vendor and collateral attestations from the custodian or attestor, which feed the freshness and collateralization preconditions. Several state-mutating entry points accept either Operations or Signer. Compromise of an Operations principal would allow feeding price and collateral values into the mint preconditions.

  • Executor (master_ledger): The Executor role drives dispatch outcomes, including flagging a dispatched mint or burn as failed when the connector observes an on-chain revert, so the retry path can reissue with a fresh nonce. Misuse would allow manipulating the recorded outcome of in-flight operations.

  • ComplianceOfficer (master_ledger): The ComplianceOfficer role participates, alongside Operations and Signer, in the compliance operations that freeze, unfreeze, and manage holder state. Compromise would allow freezing or unfreezing holders and altering compliance state.

  • ComplianceWebhook (master_ledger): The ComplianceWebhook role is accepted by the ingress inspection gate for specific compliance ingestion paths. Misuse would allow submitting compliance events under the identity of the webhook integration.

  • Master Ledger principal (evm_connector): The evm_connector accepts calls only from the single configured master_ledger principal, set at initialization. This sole-caller principal is the only entity that can request signing and submission of EVM transactions. Compromise of this relationship, or of the master_ledger itself, would grant control over every signed cross-chain action.

  • Canister controllers (both canisters): The Internet Computer controllers of the two canisters hold upgrade authority over the deployed WebAssembly modules. The audited scope does not include a timelock or on-chain governance over the controller set. Compromise of the controllers would allow replacing canister logic, including the authorization and signing paths.

Potential Risks

Scope Definition and Security Guarantees: The audit covers the master ledger and EVM Connector canisters that implement the Internet Computer side of Tortuga Estate. The satellite ERC-3643 token, identity-registry, and compliance contracts in the sibling trwa-contracts repository execute the mint, burn, transfer, freeze, identity, and recovery calldata that these canisters sign and submit, and those contracts are outside this review. The yield distributor canister in the same workspace is likewise out of scope. Defects in the satellites, or a mismatch between the ABI encoders pinned in tortuga-types and the deployed selectors, would affect the integrity of the cross-chain flow even when canister-side logic is correct.

Dependency on External Logic for Implemented Logic: Dispatch, finality polling, reconciliation reads, and snapshot publication depend on Internet Computer threshold ECDSA via the management canister and on HTTP outcalls to operator-configured primary and backup RPC endpoints plus an HSM signing service. The connector stores those RPC, token, and registry addresses as configuration supplied by the master ledger. A compromised, stale, or incorrect RPC or HSM endpoint can delay confirmation, report a false finality outcome to the control plane, or fail to publish a recovery snapshot, even though the ledger's local state machines continue.

System Reliance on External Contracts: Canonical balances are treated as the source of record, yet economic effect occurs only when the satellite token contracts execute the signed transactions. Forced-transfer and recovery paths update canonical supply or wallet bindings before the on-chain leg is confirmed, so a reverted or delayed satellite transaction leaves the Internet Computer ledger ahead of on-chain balances until retry or manual reconciliation. Reconciliation compares aggregate satellite total supply against canonical totals and does not prove per-holder attribution. Any flaw in the external token contracts, or a sustained split between canonical and on-chain balances, undermines the guarantee that the canister-side record matches reality.

Centralized Control of Minting Process: Issuance is not a permissionless user action. Operations or Signer principals submit mints, Signer quorum authorizes them, and the same control plane dispatches threshold-signed satellite mint transactions. Signer principals also set the property supply cap, daily ceiling, and oracle inputs that the mint preconditions evaluate. Compromise or misuse of those roles can authorize issuance against the declared economic controls, or can halt issuance by activating breakers and vetoes.

Centralized Oracles as Data Sources: Mint collateralization and freshness preconditions read price observations and collateral attestations stored in the master ledger. Operations ingest those values through the price and attestation ingest methods, and Signer principals may override them through the administrative oracle setter. Ingest records a source signature for audit and enforces a strictly monotonic observation timestamp, and it does not cryptographically verify the vendor payload. A forged or erroneous price or a zero price fed through this path can satisfy or disable the collateralization gate while other preconditions still pass.

Administrative Key Control Risks: Signer, Operations, Pauser, ComplianceOfficer, and Executor principals concentrate authorization, oracle inputs, circuit breakers, compliance seizures, and dispatch outcomes in role-held keys. Forced-transfer and recovery-address methods allow a ComplianceOfficer to move holder balances and reassign wallets. Property registry, oracle override, exception resolution, and breaker deactivation allow a Signer to change the values the mint preconditions evaluate and to resume operations after a halt. The audited canisters do not place these principals behind an on-canister multisig wallet, hardware-enforced custody check, or administrative timelock beyond the role guards themselves.

Insufficient Multi-signature Controls for Critical Functions: Mint and burn dispatch require an N-of-M Signer quorum and a per-operation timelock. Freeze, unfreeze, forced transfer, wallet recovery, property registry updates, oracle overrides, snapshot publication, and breaker deactivation execute on a single authorized principal of the relevant role. Compromise of one ComplianceOfficer or one Signer key is therefore sufficient to seize balances, rewrite identity bindings, alter the economic parameters the preconditions read, or re-enable minting after a reconciliation halt, without the quorum that gates issuance.

Single Points of Failure and Control: The EVM Connector accepts signing and submission requests only from the single configured master ledger principal, and the threshold-ECDSA derived addresses are the sole authorized signers registered on the satellite contracts. That concentrates cross-chain signing capability behind one control-plane canister and one derived address per chain. Compromise of the master ledger, of the sole-caller configuration, or of the Internet Computer threshold-ECDSA key name would grant control over every signed EVM action across supported chains.

Absence of Time-lock Mechanisms for Critical Operations: The mint and protocol-burn pipelines enforce a per-operation timelock between quorum and dispatch. Administrative entry points that configure the system, including property registry updates, oracle ingest and override, identity binding, snapshot endpoint configuration, breaker deactivation, and exception resolution, take effect immediately when called by an authorized role. There is no review or waiting window on those configuration changes, so a compromised privileged principal can alter the control state the preconditions read and have the change apply to the next operation without delay.

Flexibility and Risk in Contract Upgrades: Both canisters are upgradable through the Internet Computer controller mechanism, which replaces deployed WebAssembly at any time. All ledger state lives in stable memory, and the master ledger re-runs canonical invariants after upgrade and traps on violation, which protects against serving a corrupted migration. No timelock, announcement period, or on-chain governance constrains who may perform an upgrade. A compromised or malicious controller could deploy logic that bypasses authorization and signing. In-flight connector heartbeats and HTTP outcalls use guaranteed-response inter-canister calls with no caller-side deadline, so a stop issued during dispatch or finality polling is deferred until that work drains.

Absence of Upgrade Window Constraints: Canister upgrades execute as soon as the controller submits them. Holders and operators have no on-canister opportunity to review proposed WebAssembly or to complete in-flight mints, burns, or propagation legs before new logic takes effect. Combined with the local-first compliance mutations and the connector's outstanding call contexts, an immediate upgrade can land while canonical and satellite state are still converging.

Findings

F-2026-1795Precondition Checks In Mint Dispatch Use Confirmed Supply Only, Leading To Supply Cap And Collateral Limit Bypass
Status
fixed
Severity

Medium
F-2026-1794Missing Zero-Address Validation In EVM Address Checks
Status
fixed
Severity

Low
F-2026-1792Missing Validation Of Signer And Veto Thresholds Can Disable Mint And Burn Quorum Enforcement
Status
fixed
Severity

Low
F-2026-1802Self-Burn Recording Lacks Transaction Hash Deduplication
Status
fixed
Severity

Low
F-2026-1796Missing Wallet-to-Holder Binding Check In Force Transfer Can Diverge Canonical Ledger From On-Chain Balances
Status
fixed
Severity

Low
F-2026-1794Local-First Ledger Mutation In Force Transfer Can Diverge From On-Chain Balances
Status
accepted
Severity

Low
F-2026-1794Oracle Ingest Accepts Unverified Values, Allows Forged Price And Collateral Attestations
Status
accepted
Severity

Low
F-2026-1793Missing Operator Retry Path For Failed Mint And Burn Leaves Authorized Intent Stranded
Status
fixed
Severity

Low
F-2026-1793Zero Oracle Price In Collateralization Precondition Allows Undercollateralized Mint Authorization
Status
fixed
Severity

Low
F-2026-1805Missing In-Flight Guard in Connector Heartbeat Multiplies Outcalls and Callbacks
Status
accepted
Severity

Low
Code
―
Title
Status
Severity
F-2026-1795Precondition Checks In Mint Dispatch Use Confirmed Supply Only, Leading To Supply Cap And Collateral Limit Bypass
fixed

Medium
F-2026-1794Missing Zero-Address Validation In EVM Address Checks
fixed

Low
F-2026-1792Missing Validation Of Signer And Veto Thresholds Can Disable Mint And Burn Quorum Enforcement
fixed

Low
F-2026-1802Self-Burn Recording Lacks Transaction Hash Deduplication
fixed

Low
F-2026-1796Missing Wallet-to-Holder Binding Check In Force Transfer Can Diverge Canonical Ledger From On-Chain Balances
fixed

Low
F-2026-1794Local-First Ledger Mutation In Force Transfer Can Diverge From On-Chain Balances
accepted

Low
F-2026-1794Oracle Ingest Accepts Unverified Values, Allows Forged Price And Collateral Attestations
accepted

Low
F-2026-1793Missing Operator Retry Path For Failed Mint And Burn Leaves Authorized Intent Stranded
fixed

Low
F-2026-1793Zero Oracle Price In Collateralization Precondition Allows Undercollateralized Mint Authorization
fixed

Low
F-2026-1805Missing In-Flight Guard in Connector Heartbeat Multiplies Outcalls and Callbacks
accepted

Low
1-10 of 14 findings

Identify vulnerabilities in your smart contracts.

Appendix 1. Definitions

Severities

When auditing smart contracts, Hacken is using a risk-based approach that considers Likelihood, Impact, Exploitability and Complexity metrics to evaluate findings and score severities.

Reference on how risk scoring is done is available through the repository in our Github organization:

Severity

Description

Critical
Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation.

High
High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation.

Medium
Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category.

Low
Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution.
  • Severity

    Critical

    Description

    Critical vulnerabilities are usually straightforward to exploit and can lead to the loss of user funds or contract state manipulation.

    Severity

    High

    Description

    High vulnerabilities are usually harder to exploit, requiring specific conditions, or have a more limited scope, but can still lead to the loss of user funds or contract state manipulation.

    Severity

    Medium

    Description

    Medium vulnerabilities are usually limited to state manipulations and, in most cases, cannot lead to asset loss. Contradictions and requirements violations. Major deviations from best practices are also in this category.

    Severity

    Low

    Description

    Major deviations from best practices or major Gas inefficiency. These issues will not have a significant impact on code execution.

Potential Risks

The "Potential Risks" section identifies issues that are not direct security vulnerabilities but could still affect the project’s performance, reliability, or user trust. These risks arise from design choices, architectural decisions, or operational practices that, while not immediately exploitable, may lead to problems under certain conditions. Additionally, potential risks can impact the quality of the audit itself, as they may involve external factors or components beyond the scope of the audit, leading to incomplete assessments or oversight of key areas. This section aims to provide a broader perspective on factors that could affect the project's long-term security, functionality, and the comprehensiveness of the audit findings.

Appendix 2. Scope

The scope of the project includes the following smart contracts from the provided repository:

Scope Details

Repositoryhttps://github.com/tortuga-estate/tortuga-canisters-hacken-clean→
Initial Commit841f88dae97a410eaa2a98a3c1ddc9699b6451c7
Final Commite4b4cce4a740b0ca6e086ee4df5778708e435732
Whitepaper-
RequirementsREADME.md
Technical RequirementsREADME.md, APIREFERENCE.md, ARCHITECTURE.md, COVERAGE.md, SECURITY.md, TESTGUIDE.md

Assets in Scope

crates
evm_connector
src
api_types.rs - crates › evm_connector › src › api_types.rs
callback.rs - crates › evm_connector › src › callback.rs
config.rs - crates › evm_connector › src › config.rs
connector_config.rs - crates › evm_connector › src › connector_config.rs
dispatch.rs - crates › evm_connector › src › dispatch.rs
finality.rs - crates › evm_connector › src › finality.rs
lib.rs - crates › evm_connector › src › lib.rs
memory.rs - crates › evm_connector › src › memory.rs
nonce.rs - crates › evm_connector › src › nonce.rs
rand.rs - crates › evm_connector › src › rand.rs
rpc.rs - crates › evm_connector › src › rpc.rs
signer.rs - crates › evm_connector › src › signer.rs
submit.rs - crates › evm_connector › src › submit.rs
tx.rs - crates › evm_connector › src › tx.rs
master_ledger
src
api_types.rs - crates › master_ledger › src › api_types.rs
auth.rs - crates › master_ledger › src › auth.rs
config.rs - crates › master_ledger › src › config.rs

Appendix 3. Additional Valuables

Additional Recommendations

The smart contracts in the scope of this audit could benefit from the introduction of automatic emergency actions for critical activities, such as unauthorized operations like ownership changes or proxy upgrades, as well as unexpected fund manipulations, including large withdrawals or minting events. Adding such mechanisms would enable the protocol to react automatically to unusual activity, ensuring that the contract remains secure and functions as intended.

To improve functionality, these emergency actions could be designed to trigger under specific conditions, such as:

  • Detecting changes to ownership or critical permissions.

  • Monitoring large or unexpected transactions and minting events.

  • Pausing operations when irregularities are identified.

These enhancements would provide an added layer of security, making the contract more robust and better equipped to handle unexpected situations while maintaining smooth operations.

Frameworks and Methodologies

This security assessment was conducted in alignment with recognised penetration testing standards, methodologies and guidelines, including the NIST SP 800-115 – Technical Guide to Information Security Testing and Assessment →, and the Penetration Testing Execution Standard (PTES) →, These assets provide a structured foundation for planning, executing, and documenting technical evaluations such as vulnerability assessments, exploitation activities, and security code reviews. Hacken’s internal penetration testing methodology extends these principles to Web2 and Web3 environments to ensure consistency, repeatability, and verifiable outcomes.

Disclaimer