Summary
100% of all REPORTED Findings have been addressed
- 3Acknowledged
- 5Risk Accepted
- 108Solved
- 116All Findings
- Critical0
- High2
- 2Solved
- Medium17
- 15Solved
- 2Risk A.
- Low63
- 61Solved
- 2Risk A.
- Informational34
- 30Solved
- 3Ack.
- 1Risk A.
INTRODUCTION#
The project team engaged Halborn to conduct a security assessment of the Casper <> EVM bridge ("cspr-bridge"). The assessment covered both on-chain contracts (Solidity on EVM chains and Rust on Casper) and the off-chain bridge infrastructure (relayer/CLI, P2P coordination, API/indexers, and the MySQL-backed persistence layer). Because bridge systems combine externally sourced chain data, threshold authorization, and funds-moving execution across multiple environments, the security boundary includes both cryptographic correctness and operational reliability.
At a high level, cspr-bridge implements two primary cross-chain directions:
EVM to Casper: observe EVM lock/burn events and submit Casper-side mint/unlock actions (with MPT proof verification of EVM data on the relayer side).
Casper to EVM: observe Casper events (often via CSPR.cloud WebSocket) and submit EVM-side unlock/mint actions authorized by M-of-N relayer signatures.
The overall design also includes a public REST API and database indexing layer intended for observability and integration, plus an authenticated P2P network used for relayer coordination.
Key themes observed across findings#
Domain separation and replay protection for relayer signatures/attestations (contract + relayer hashing must be chain- and deployment-bound).
Cross-chain correctness in multi-chain deployments, including chain-scoped event identifiers and correlation keys to prevent mis-attribution or suppression.
Event verification gaps (e.g., ensuring expected topics/fields are validated, ensuring receipt/log inclusion checks are complete where required).
Finality and reorg safety, especially where indexing/relaying relies on near-head chain data or lacks reorg reconciliation.
Token registry/mapping lifecycle safety (updates, reverse mappings, uniqueness, and sentinel-value pitfalls).
DoS/performance amplification risks (heavy endpoints, missing hard timeouts, unbounded in-memory sets/queues, and DB hot paths).
Operational security (configuration/secrets handling, logging/metrics exposure, and reliability of third-party event sources like CSPR.cloud).
Main recommendations#
Bind all relayer-signed payloads to a strict domain: incorporate chainId and contract deployment (address(this) or EIP-712 verifyingContract) into all attestation hashes verified by the EVM locker and ensure Casper-side hashing/ID rules are consistent with off-chain logic. This prevents cross-chain and cross-deployment signature replay.
Harden replay protection and event identity across both chains: ensure deduplication/correlation keys include chain context and stable deposit identifiers (avoid collisions from (blockNumber, txIndex, logIndex)-style keys in multi-chain deployments).
Make the Casper to EVM trust model explicit and hardened: since this direction typically lacks cryptographic state proofs, enforce stronger operational controls (conservative finality assumptions, robust peer authentication, strict relayer set governance, and clear incident/backfill procedures).
Improve correctness of event verification: validate all required event fields/topics for lock/burn/processed checks, and ensure proof/receipt verification logic matches the intended security model.
Add/clarify recovery semantics for partial failures: avoid "commit then hope" flows where one chain finalizes state changes but the destination execution can fail without a protocol-level resolution path; ensure admin/recovery mechanisms are explicit, auditable, and safe.
Reduce DoS amplification and improve long-term liveness: add caching/rate limiting to expensive read endpoints, enforce hard timeouts and bounded retries, cap in-memory collections, and ensure persistence/replay guards are robust across restarts and multi-process deployments.
Strengthen token mapping lifecycle invariants: ensure mapping updates clear stale reverse mappings, enforce uniqueness constraints where required, and avoid sentinel-value patterns that cause ambiguous "registered/unregistered" states.
SYSTEM ARCHITECTURE#
The system is a two-direction cross-chain bridge between EVM chains and the Casper network, with an off-chain relayer that observes events, produces/collects attestations, and submits transactions to the destination chain. An API + database provide indexing and observability.
Main components#
EVM Chains (source/destination)
Run the MultiSigERC20Locker contracts.
Emit Lock/Burn events (for EVM > Casper flows).
Accept Unlock/Mint submissions (for Casper > EVM flows) when presented with enough valid relayer signatures.
CLI / RELAYER (bridge-cli)
The "bridge brain." It has two core workers and shared infrastructure:
Evm2Casper Worker
Polls EVM logs for lock/burn events.
Builds attestations from observed on-chain data.
Uses MPT proof verification for EVM data paths (stronger cryptographic verification).
Submits Casper-side actions (mint/unlock) once attestation rules are satisfied.
Casper2Evm Worker
Observes Casper events (commonly via CSPR.cloud WebSocket).
Builds attestations for Casper > EVM actions.
Submits EVM-side unlock/mint calls once enough relayer signatures are collected.
SignatureCoordinator (M-of-N threshold signing)
Collects signatures from authorized relayers and enforces the configured threshold.
Provides coordination/guardrails to reduce duplicate submissions and handle retries.
Crypto Layer
Defines the exact hashing/signing scheme (Keccak256 + signing) and verification logic.
Must match the on-chain verifier logic exactly; otherwise signatures/attestations can fail or be replayable.
P2P Server
Relayers communicate over P2P for coordination and signature exchange.
Uses authentication mechanisms (mTLS/challenge-response/message auth) to prevent unauthorized peers from participating.
Casper Network
Runs two key contracts:
EthClient
Stores/checks EVM block header data used by bridge flows.
TokenFactory
Executes Casper-side mint/burn/unlock logic based on the bridge rules and relayer inputs.
API (bridge-api) + MySQL
Indexers
EVM Indexer: polls per chain and stores observed bridge activity.
Casper Indexer: consumes Casper events (often via CSPR.cloud WS) and stores activity.
REST API (Express)
Exposes read-only endpoints like /tokens, /txs, /stats, /chains for explorers, dashboards, and integrations.
MySQL Database
Persists transactions, token metadata/mappings, per-chain info, and sync cursors.
The two bridge directions#
1) EVM to Casper
Observe: EVM lock/burn event appears on an EVM chain.
Verify: relayer fetches logs/receipts and (in the stronger path) verifies inclusion using MPT proofs.
Attest: relayer builds an attestation describing the event.
Submit: relayer submits a Casper-side action to TokenFactory (mint/unlock).
2) Casper to EVM
Observe: Casper-side event is detected (often through CSPR.cloud).
Attest + Sign: relayers collectively sign an attestation (M-of-N).
Submit: relayer submits the attestation + signatures to the EVM locker to execute unlock/mint.
Trust Boundaries#
EVM RPC <> Relayer: if an RPC lies or is misconfigured, the relayer can ingest wrong chain data.
CSPR.cloud <> Relayer/API: centralized event feed; without state proofs, correctness depends on relayer assumptions.
Relayer <> Relayer (P2P): if auth/binding is weak, an attacker can spam/suppress/forge coordination messages.
Relayer <> Contracts: signatures/attestations are an authorization mechanism, domain separation and replay protection are critical.
Public API <> Internet: DoS or data poisoning can degrade observability and sometimes impact shared DB resources.
Key architectural asymmetry#
EVM to Casper can use cryptographic inclusion proofs (MPT verification).
Casper to EVM typically relies on M-of-N relayer consensus rather than Casper state proofs.
This asymmetry is important because it means Casper > EVM safety depends more heavily on relayer key security, threshold configuration, and operational controls, while EVM > Casper has a stronger path when proofs are verified correctly.
TEST METHODOLOGY AND APPROACH#
Halborn performed a combination of manual and targeted security testing to balance practicality, accuracy, and coverage. Manual review was used to uncover logic and design flaws; targeted pattern searches and test-suite review were used to validate assumptions, identify best-practice gaps, and ensure the findings map cleanly to reachable code paths.
The following phases were performed:
Architecture and flow review: end-to-end mapping of EVM<->Casper flows, trust boundaries, and failure modes.
Contract security review (EVM + Casper): authorization boundaries, replay resistance/domain separation, mapping/accounting invariants, pause/admin semantics, and cross-contract/cross-chain assumptions.
Cryptography and attestation review: verification of hash construction, signing, verification, and consistency between relayer and on-chain logic.
Event verification and finality review: evaluation of confirmation handling, reorg exposure, topic/field validation, and asymmetric verification across directions.
Relayer coordination review: analysis of M-of-N signature collection, idempotency/double-submit protections, persistence/cleanup logic, and recovery/reset paths.
P2P security review: authentication and message integrity assumptions (mTLS, signature binding, discovery behavior, replay windows).
API and database review: input validation, DoS surfaces, query patterns, schema/migration safety, integrity constraints, and operational defaults.
Operational security review: configuration/secrets handling, logging hygiene, and exposure of metrics/logs endpoints.
REMEDIATION REVIEW#
Review coverage#
Halborn re-reviewed all 116 findings against origin/master across three passes. The initial remediation review was performed at 91cbce7ffa59ed7f096fab9baf9c94e39e0e211e; the eight findings still open after that round were re-verified at 44e2aa739e7e1bed176c632740d8ec10dcf20ef4 (2026-08-06); and the three residuals remaining after that pass, together with a new configuration-layer observation raised in it, were re-verified at 8b01aa3de58e5362ea36d736801b9c45ab9e7b20 (2026-08-07). Verification was performed against those revisions rather than against the remediation merges alone, so the dispositions below also account for the commits that landed afterwards.
Current disposition and residuals#
- Live finding state: 108 Solved; 5 Risk Accepted; 3 Acknowledged. No finding remains partially remediated.
- Closed in the second pass:
HAL-013(plaintext bare-IP public node list removed; verification quorum defaults to two and fails closed on unset, with non-HTTPS public sources dropped under the production flag the image itself bakes in),HAL-024(brace-expansionpinned to a backport carrying the ReDoS cap, both production closures audit clean),HAL-068(P2P_ALLOW_PRIVATE_PEER_ENDPOINTSremoved from every template and ignored in code, replaced by a fail-closed CIDR allowlist, with announce identity bound to the authenticated signer),HAL-076(both documented metadata call sites timeout-bounded and length-capped, including the one feeding Prometheus labels) andHAL-077(deployed database enforcesrequire_secure_transport=ONwith a pinned CA, superseding the earlier acceptance with a full fix). - Closed in the third pass:
HAL-070,fetchDeploysPagenow throws on request failure on both the API indexer and the relayer REST fallback, so a transient error can no longer be mistaken for a drained backlog; the drain predicate excludes failure, the cursor is held and the failed page is retried, and the accompanying tests are genuine failure-path regressions rather than restatements of the fixed behaviour.HAL-079, the fifth call site is bounded with a ten-second abort and/rpcnormalization is applied at all five named sites through a canonical helper, so the built-in default no longer yields a doubled suffix; the related unbounded CSPR.cloud REST fetches are bounded on both sides.HAL-110, the thirteenth destructive Casper admin command is gated by the confirmation helper with a-y/--yesflag and covered in the prompt, abort and bypass test matrix. - Configuration-layer theme: the most durable observation of the engagement, and the one most worth carrying forward operationally. All three instances have now been addressed:
HAL-068andHAL-077at the configuration layer, and the third, a Helm/Kubernetes surface shippingP2P_TLS_ENABLED: "false", in code.validateConfig()now raises a fatal error whenNODE_ENV=productionand P2P TLS is disabled, and because the image bakes that environment in, a deployment surface that merely disables TLS will refuse to boot rather than silently removing the mTLS compensating control thatHAL-016andHAL-038rely on. One residual is recorded against both of those findings: theP2P_ALLOW_PLAINTEXT=trueescape hatch is evaluated independently of environment, so it suppresses the guard in production as well, no runtime warning fires while it is active, and in the shipped dev values it sits directly beneath the disabled-TLS line, so copying that block to a production values file carries the bypass with it. Scoping the bypass to non-production and warning whenever plaintext P2P is active would complete the closure; as it stands the control can no longer be disabled implicitly, only explicitly. - Risk decisions: Risk Accepted are
HAL-004andHAL-010(no on-chain refund, expiry, or user cancellation; recovery is operator mediated),HAL-034(signing key held as a process-lifetime string with no remote signer or zeroization),HAL-062(duplicate submission under partition remains reachable but is bounded to gas by the on-chain processed-event guards), andHAL-100(casperStateRootremains a zero placeholder, with safety resting on the threshold attestation model). Acknowledged areHAL-088,HAL-094, andHAL-103; theHAL-094rationale has been updated because the single-EVM assumption no longer holds against the current multi-chain relayer configuration. - Post-report disclosure (2026-08-06): the client disclosed a shared AWS IAM policy/instance profile that had briefly let any single compromised host (including the API host and the WireGuard concentrator) read all relayer signing keys, narrowing the M-of-N threshold that
HAL-100's risk acceptance relies on toward 1-of-N for the period it existed. This was an infrastructure/IAM-configuration exposure, not visible from source and outside this engagement's review scope; it is not a separate Halborn finding. It has since been remediated with one IAM role/instance profile per host and a verified, re-runnable isolation probe. Recorded on theHAL-100finding for traceability; the underlying risk-acceptance rationale is otherwise unchanged. - Reference corrections: 45 of the 105 client-supplied commit hashes are not ancestors of current master, reflecting squash and rebase during merge rather than missing work; landed equivalents were substituted where identified. The same applies to the second follow-up round, where the supplied hashes did not resolve in the published history. All verdicts therefore rest on the state of the head revision reviewed in each pass rather than on the cited commits.
- Follow-up attack surface: code introduced after the remediation rounds was not part of the original assessment and merits separate review, specifically the EVM WebSocket log listener added for fast chains, the Arbitrum Orbit chain onboarding with its CREATE2 deployment path and schema migrations, the codified security group definitions, and the Helm/Kubernetes deployment surface under
infra/values/, which introduces a second deployment path alongside Ansible with its own configuration posture.
Risk Methodology#
5.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 |
5.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 |
5.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 |
|---|---|---|---|---|
| Cross-chain replay: missing chain/domain separation in relayer attestations (unlock + wrapped mint) (Relayer) | High | 8.4 | Solved07/19/2026 | |
| Signatures can be replayed across deployments due to missing domain separation | High | 7.5 | Solved07/19/2026 | |
| Relayer container builds are non-deterministic (floating dependency resolution) (Relayer) | Medium | 6.7 | Solved07/19/2026 | |
| Casper to EVM Bridge Flows Lack Any On-Chain Recovery Or Refund Path For Failed Destination Execution (Casper) | Medium | 6.3 | Risk Accepted07/30/2026 | |
| Bridge Amounts Lack Decimal Normalization, Risking Systematic Over/Under-Crediting (Casper) | Medium | 5.9 | Solved07/24/2026 | |
| Partial pause state incorrectly satisfies full pause requirement | Medium | 5.6 | Solved07/19/2026 | |
| Zero-value burnWrapped calls enable relayer exhaustion | Medium | 5.6 | Solved07/30/2026 | |
| Attestation Hash Schema Mismatch Across Bridge Layers | Medium | 5.2 | Solved07/19/2026 | |
| Bridge fee overpayment is not refunded | Medium | 5.0 | Solved07/19/2026 | |
| No handling or recovery path for failed bridge executions | Medium | 5.0 | Risk Accepted07/30/2026 | |
| Cross-chain accounting risk from mismatched token decimals | Medium | 5.0 | Solved07/30/2026 | |
| MPT lock-event verification does not validate indexed token topic (Relayer) | Medium | 5.0 | Solved07/19/2026 | |
| Casper to EVM direction performs no cryptographic verification of Casper events (Relayer) | Medium | 5.0 | Solved08/06/2026 | |
| RELAYER_THRESHOLD defaults to 1 and lacks majority validation/warnings (Relayer) | Medium | 5.0 | Solved07/19/2026 | |
| RPC URLs (often containing API keys) are logged in plaintext (Relayer) | Medium | 5.0 | Solved07/30/2026 | |
| P2P ingress hardening gaps (unauth challenge floods, no rate limiting, replay within window, brittle canonicalization, authz split) (Relayer) | Medium | 5.0 | Solved07/24/2026 | |
| Stale Reverse Mapping Enables Redemption of Deprecated Wrapped Tokens After Mapping Update (Casper) | Medium | 4.7 | Solved07/19/2026 | |
| Finality model uses confirmation count (not true L1 finality for L2s) (Relayer) | Medium | 4.5 | Solved07/30/2026 | |
| AWS Secrets Manager configured but failures fall back to file/env key sources (Relayer) | Medium | 4.5 | Solved07/19/2026 | |
| CLI (relayer) prod dependency closure contains a critical fast-xml-parser advisory chain (Relayer) | Low | 4.2 | Solved07/19/2026 | |
| Invalid EVM addresses are silently accepted and stored by API normalization (Relayer) | Low | 4.2 | Solved07/19/2026 | |
| clearCollection() does not clear the submitted-key guard (Relayer) | Low | 4.2 | Solved07/19/2026 | |
| Service installer can default to running relayer as root; lacks systemd hardening (Relayer) | Low | 4.2 | Solved07/19/2026 | |
| Verified npm audit findings in production dependency closures (API + CLI) (Relayer) | Low | 4.2 | Solved08/06/2026 | |
| DB/data-model integrity footguns (nullable UNIQUE, BIGINT precision, destructive seeds) (Relayer) | Low | 4.2 | Solved07/19/2026 | |
| Token TOML export is injection-prone via unescaped token metadata (Relayer) | Low | 3.8 | Solved07/19/2026 | |
| Token Mapping Unregistration Leaves Sentinel Values That Break Option Semantics And Mislead Integrators (Casper) | Low | 3.4 | Solved07/19/2026 | |
| deploy_token Unconditionally Resets Total-Bridged Counter Using Chain-Agnostic Key (Casper) | Low | 3.4 | Solved07/19/2026 | |
| Casper2Evm processedEvents set grows unbounded (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Casper event payloads are type-cast without runtime validation (CSPR.cloud + WebSocket) (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| targetChainId from Casper events is not validated against enabled/configured chains (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Block-header cleanup computes coordinator key using zero hashes (no-op cleanup) (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Parallel event processing lacks explicit mutual exclusion (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Private key held as JS string in worker instance (Relayer) | Low | 3.4 | Risk Accepted07/30/2026 | |
| Hardcoded finality configs may drift from chain reality over time (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| No rate limiting/backpressure on P2P signature request broadcasting (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Silent downgrade to HTTP when TLS is enabled but certs are missing (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Gossip announce messages intentionally bypass mTLS sender/cert binding (Relayer) | Low | 3.4 | Solved07/24/2026 | |
| “Discovery complete” is signaled on fixed timeout, not actual completion (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| CORS defaults to wildcard origin (*) (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| /stats executes many heavy SQL queries per request (DoS risk) (Relayer) | Low | 3.4 | Solved07/30/2026 | |
| Unlimited connection queue (queueLimit: 0) enables unbounded memory growth under load (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Casper indexer logs full WebSocket messages at INFO (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Backfill script updates live DB records without transactional safety (Relayer) | Low | 3.4 | Solved07/30/2026 | |
| API migration runner can apply “empty” migrations (comment-filter bug) and still records them as applied (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Outbound P2P sends have no hard timeouts and broadcast is sequential (liveness DoS) (Relayer) | Low | 3.4 | Solved07/19/2026 | |
| Internal locked balance accounting breaks for fee-on-transfer tokens | Low | 3.1 | Solved07/19/2026 | |
| Relayer threshold configuration allows single-signer authorization | Low | 3.1 | Solved07/19/2026 | |
| Upgradeable parent contract lacks storage gap protection | Low | 3.1 | Solved07/19/2026 | |
| Lock Replay Key Omits Source Chain ID Enabling Cross-Chain Deposit Collision (Casper) | Low | 3.1 | Solved07/19/2026 | |
| Discovery registers peers even when not authorized on-chain (Relayer) | Low | 3.1 | Solved07/30/2026 | |
| Upgrades Do Not Disable Older Contract Versions Allowing Calls to Patched Vulnerabilities (Casper) | Low | 2.9 | Solved07/19/2026 | |
| Relayer Set Management Allows Duplicate Entries And Misleading Threshold Validation (Casper) | Low | 2.7 | Solved07/19/2026 | |
| Configured erc20_locker Is Not Bound Into Lock Attestation Verification (Casper) | Low | 2.6 | Solved07/19/2026 | |
| Locker contract uses non-upgradeable reentrancy guard base | Low | 2.5 | Solved07/19/2026 | |
| Lock and burn events lack chain id | Low | 2.5 | Solved07/19/2026 | |
| Emergency withdrawal does not synchronize locked balance accounting | Low | 2.5 | Solved07/19/2026 | |
| Bridge operations accept a zero destination recipient identifier | Low | 2.5 | Solved07/19/2026 | |
| Casper address/hash normalization lacks strict length validation (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| Spoofable event_processed P2P notifications can suppress legitimate events (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| CSPR.cloud WebSocket reconnection has no max retry/backoff (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| Backup failover timing can cause duplicates under network partitions (Relayer) | Low | 2.5 | Risk Accepted07/30/2026 | |
| Multi-chain registry refresh lacks concurrent deduplication (RPC amplification) (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| Relayer registry RPC failures return empty sets (availability partitioning) (Relayer) | Low | 2.5 | Solved07/24/2026 | |
| MySQL port 3306 is published to the host by default (compose) (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| proxy_caller.wasm executed without provenance/hash verification (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| Amount formatting falls back to 18 decimals for unknown tokens (display integrity) (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| P2P discovery is vulnerable to endpoint spoofing and SSRF via self-reported endpoints (Relayer) | Low | 2.5 | Solved08/06/2026 | |
| API endpoints lack systematic runtime validation/normalization for user-controlled identifiers (Relayer) | Low | 2.5 | Solved07/19/2026 | |
| API indexer can mis-correlate or permanently skip Casper events in multi-chain/high-activity scenarios (Relayer) | Low | 2.5 | Solved08/07/2026 | |
| Fee Collection Transfers The Entire Attached Amount (Casper) | Low | 2.5 | Solved07/19/2026 | |
| Contract Schemas Omit Error Definitions And Events In Multiple Modules (Casper) | Low | 2.5 | Solved07/30/2026 | |
| Packed Nonce Increment Can Overflow And Corrupt Bridging Nonces (Casper) | Low | 2.5 | Solved07/19/2026 | |
| Relayer Attestations Missing Deployment Domain Separation Enable Cross-Deployment Replay (Casper) | Low | 2.3 | Solved07/19/2026 | |
| Leader election depends on transient P2P connectivity (race/duplication risk) (Relayer) | Low | 2.1 | Solved07/19/2026 | |
| ERC-20 metadata is fetched from untrusted token contracts without bounds checks (Relayer) | Low | 2.1 | Solved08/06/2026 | |
| No TLS/SSL configuration for DB connections (app code) (Relayer) | Low | 2.1 | Solved08/06/2026 | |
| File-based persistence uses non-atomic writes (crash corruption risk) (Relayer) | Low | 2.1 | Solved07/19/2026 | |
| Casper client URL handling and network calls lack consistent timeout/normalization (/rpc suffixing) (Relayer) | Low | 2.1 | Solved08/07/2026 | |
| Exposed CSPR.cloud API Token in Repository | Low | 2.1 | Solved07/24/2026 | |
| Admin Role Transfer Is Single-Step And Can Irreversibly Lose Control (Casper) | Low | 2.0 | Solved07/19/2026 | |
| Lock Replay Protection Not Keyed By Stable Deposit Identifier Enabling Potential Double-Mint (Casper) | Low | 1.9 | Solved07/24/2026 | |
| Transaction.nonce uses JS number (precision risk above \(2^{53}-1\)) (Relayer) | Informational | 1.9 | Solved07/19/2026 | |
| Signature verification helpers swallow exceptions silently (Relayer) | Informational | 1.7 | Solved07/19/2026 | |
| Address auto-detection prioritizes EVM for 40-hex-char inputs (Relayer) | Informational | 1.7 | Solved07/19/2026 | |
| Casper RPC responses parsed without schema validation in liquidity service (Relayer) | Informational | 1.7 | Solved07/30/2026 | |
| Seed migration deletes all tokens unconditionally (Relayer) | Informational | 1.7 | Solved07/19/2026 | |
| Persistence trims processedEvents to last 10k entries (reprocessing after restart) (Relayer) | Informational | 1.7 | Acknowledged07/30/2026 | |
| Hardcoded third-party RPC credential (Infura project ID) committed in repo scripts (Relayer) | Informational | 1.7 | Solved07/24/2026 | |
| Non-Rotatable Minter May Strand Bridged Tokens During TokenFactory Migration (Casper) | Informational | 1.7 | Solved07/19/2026 | |
| Block timestamp cache returns 0 on miss (epoch timestamps) (Relayer) | Informational | 1.6 | Solved07/19/2026 | |
| Misleading APIs and Undocumented Native Token Storage (Casper) | Informational | 1.3 | Solved07/19/2026 | |
| BlockHeaderSubmitted Event Omits chain_id, Reducing Multi-Chain Auditability (Casper) | Informational | 1.3 | Solved07/19/2026 | |
| Single Global Relayer Set Shared Across All Chain IDs Creates Cross-Chain Trust Coupling (Casper) | Informational | 1.2 | Acknowledged07/30/2026 | |
| Relayer set configuration permits zero address entries | Informational | 1.1 | Solved07/19/2026 | |
| Multiple ERC-20 tokens can reference the same Casper hash | Informational | 1.0 | Solved07/19/2026 | |
| Receipt parsing relies on unsafe type assertions (no runtime schema validation) (Relayer) | Informational | 1.0 | Solved07/30/2026 | |
| Authorized relayers default to “self only” when unset (Relayer) | Informational | 1.0 | Solved07/30/2026 | |
| Same insertId ambiguity in token_addresses upsert (Relayer) | Informational | 1.0 | Solved07/19/2026 | |
| Casper to EVM uses dummy casperStateRoot (no state-proof binding) (Relayer) | Informational | 0.8 | Risk Accepted07/30/2026 | |
| Backfill script contains hardcoded contract addresses and defaults (Relayer) | Informational | 0.8 | Solved07/19/2026 | |
| Bridge Accounting Decrements Can Silently Skip When Invariants Are Broken (Casper) | Informational | 0.8 | Solved07/19/2026 | |
| Address Truncation in Native Totals Key Creates Collision Risk in Locked Total Accounting (Casper) | Informational | 0.8 | Acknowledged07/30/2026 | |
| Wrapped burn verification does not use full MPT receipt proof verification (Relayer) | Informational | 0.7 | Solved07/19/2026 | |
| Casper mint correlation can be dropped permanently if EVM side not yet indexed (Relayer) | Informational | 0.7 | Solved07/19/2026 | |
| Routes use console.error instead of structured logger (Relayer) | Informational | 0.6 | Solved07/30/2026 | |
| Admin Configuration And Registration Entry Points Lack Address Validation Guardrails (Casper) | Informational | 0.6 | Solved07/19/2026 | |
| Bridge fee can be enabled while fee recipient is unset | Informational | 0.5 | Solved07/19/2026 | |
| Zero Casper hash registration can silently break token registration logic | Informational | 0.5 | Solved07/19/2026 | |
| No interactive confirmation prompts for destructive admin operations (Relayer) | Informational | 0.5 | Solved08/07/2026 | |
| set_threshold Allows No-Op Updates And Emits Misleading Events (Casper) | Informational | 0.5 | Solved07/19/2026 | |
| Release Builds Omit Overflow Checks, Increasing Risk Of Silent Integer Wraparound (Casper) | Informational | 0.4 | Solved07/19/2026 | |
| Native Token Mapping Updates Do Not Emit An Update Event (Casper) | Informational | 0.3 | Solved07/19/2026 | |
| Contradictory Admin Fallback Logic for Zero Threshold and Empty Relayer Set (Casper) | Informational | 0.1 | Solved07/19/2026 | |
| Missing event emission for minimum lock updates | Informational | 0.0 | Solved07/19/2026 | |
| Incorrect error semantics for pending-admin validation | Informational | 0.0 | Solved07/19/2026 |
Findings & Tech Details#
Description
Recommendation
Description
Proof of Concept
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Proof of Concept
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Remediation Comment
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Remediation Comment
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Remediation Comment
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
Description
Recommendation
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.
