You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This document provides a STRIDE-style threat analysis for the Remitwise smart contracts, focusing on entrypoint-specific risks and mitigations. It's intended for contributors and reviewers to validate code against documented security expectations.
STRIDE Framework
Spoofing: Pretending to be someone else
Tampering: Modifying data or code without permission
Repudiation: Denying performing an action
Information Disclosure: Exposing private information
Denial of Service: Preventing legitimate use
Elevation of Privilege: Gaining unauthorized permissions
Entrypoint Threat Breakdown
1. Remittance Split Contract (remittance_split)
Entrypoint: initialize_split
Threat
Description
Mitigation
Spoofing
Attacker initializes split for someone else's address
owner.require_auth_for_args() with domain-separated payload including network_id and contract_addr
Tampering
Overwriting existing split config
Checks AlreadyInitialized before storing new config
Repudiation
Owner denies initializing split
Event emitted with owner address and timestamp
Information Disclosure
N/A
Config is public (necessary for split calculations)
Denial of Service
N/A
Single initialization per contract
Elevation of Privilege
N/A
Only owner can initialize
Entrypoint: distribute_usdc
Threat
Description
Mitigation
Spoofing
Attacker distributes from someone else's address
from.require_auth() + checks from == config.owner
Tampering
Using malicious token contract
Validates usdc_contract == config.usdc_contract
Tampering
Self-transfer to bloat audit logs
Rejects if any destination == from address
Repudiation
Sender denies distribution
Event emitted with all details
Information Disclosure
N/A
Transfers are public on blockchain
Denial of Service
Replay attacks
Nonce-based replay protection
Denial of Service
Deadline abuse
Validates deadline is not in past and within max window