Fluidkey is a protocol that automates operations on multiple blockchain networks. It uses a modular architecture enabling authorized relayers to trigger automated operations through a Safe module.
The system implements comprehensive security measures, including signature verification for transaction initiation and authorization checks for all operations. The protocol’s infrastructure is built to handle automated asset management tasks while maintaining strict security requirements.
METHODOLOGY
Our review process combined automated analysis using Wake and manual review of the codebase. For testing purposes, we utilized the Wake testing framework.
During the review, we paid special attention to:
- ensuring the arithmetic of the system is correct;
- detecting possible reentrancies in the code;
- ensuring access controls are not too relaxed or too strict;
- checking the signature verification;
- writing comprehensive unit tests using Wake framework;
- looking for common issues such as data validation
SCOPE
The first audit was performed on commit 6aca8f
and the scope was src/FluidkeyEarnModule.sol
The second review was done on the given commit 665108
. The Fluidkey team had fixed all issues reported in the previous revision.
FINDINGS
The classification of a security finding is determined by two ratings: impact and likelihood. This two-dimensional classification helps clarify the severity of individual issues. Issues which would be rated as medium severity, but which would be likely discovered only by the team, are typically decreased by the likelihood factor to the warning or informational severity ratings.
Our review resulted in 9 findings, ranging from Informational to High severity. The most severe was H1, which describes a possible replay attack on the protocol. M1 poses a risk of exceeding the MAX_TOKENS
limit potentially leading to unexpected behavior.
Critical severity
No critical severity issues were found.
High severity
H1: Cross-chain replay attack vulnerability
Medium severity
M1: MAX_TOKENS
limit bypass via setConfig
leads to unintended module persistence
Low severity
No low severity issues were found.
Warning severity
W1: Unchecked return value
W2: Module installation allows empty configuration
W3: Misleading event in deleteConfig
Informational severity
I1: Variable can be immutable
I2: Incorrect usage of immutable instead of constant
I3: Misleading documentation
I4: Unnecessary external call
TRUST MODEL
Users must trust the Safe module implementation to handle deposits securely and not contain vulnerabilities that could compromise funds. The protocol relies on authorized relayers to initiate automated deposits, requiring trust in their behavior and key management. The integrated ERC4626 vaults must be trusted to properly manage deposited assets.
CONCLUSION
Ackee Blockchain Security recommends Fluidkey to:
- fix the MAX_TOKENS validation in setConfig function;
- implement proper cleanup during module uninstallation;
- add chain ID to signature verification;
- address all other reported issues.
Ackee Blockchain Security’s full Fluidkey audit report can be found here.
We were delighted to audit Fluidkey and look forward to working with them again.