{"id":1020,"date":"2025-03-19T13:14:35","date_gmt":"2025-03-19T11:14:35","guid":{"rendered":"https:\/\/ackee.xyz\/blog\/?p=1020"},"modified":"2025-03-19T13:14:35","modified_gmt":"2025-03-19T11:14:35","slug":"fluidkey-earn-module-audit-summary","status":"publish","type":"post","link":"https:\/\/ackee.xyz\/blog\/fluidkey-earn-module-audit-summary\/","title":{"rendered":"Fluidkey Earn Module Audit Summary"},"content":{"rendered":"<p>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.<\/p>\n<p>The system implements comprehensive security measures, including signature verification for transaction initiation and authorization checks for all operations. The protocol\u2019s infrastructure is built to handle automated asset management tasks while maintaining strict security requirements.<\/p>\n<h2><span style=\"font-weight: 400;\">METHODOLOGY<\/span><\/h2>\n<p>Our review process combined automated analysis using <a href=\"https:\/\/getwake.io\">Wake<\/a> and manual review of the codebase. For testing purposes, we utilized the <a href=\"https:\/\/getwake.io\">Wake<\/a> testing framework.<\/p>\n<p>During the review, we paid special attention to:<\/p>\n<ul>\n<li>ensuring the arithmetic of the system is correct;<\/li>\n<li>detecting possible reentrancies in the code;<\/li>\n<li>ensuring access controls are not too relaxed or too strict;<\/li>\n<li>checking the signature verification;<\/li>\n<li>writing comprehensive unit tests using Wake framework;<\/li>\n<li>looking for common issues such as data validation<\/li>\n<\/ul>\n<h2><span style=\"font-weight: 400;\">SCOPE<\/span><\/h2>\n<p>The first audit was performed on commit <code class=\"codehl\">6aca8f<\/code> and the scope was <code>src\/FluidkeyEarnModule.sol<\/code><\/p>\n<p>The second review was done on the given commit <code class=\"codehl\">665108<\/code>. The Fluidkey team had fixed all issues reported in the previous revision.<\/p>\n<h2><span style=\"font-weight: 400;\">FINDINGS<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">The classification of a security finding is determined by two ratings: <\/span><b>impact<\/b><span style=\"font-weight: 400;\"> and <\/span><b>likelihood<\/b><span style=\"font-weight: 400;\">. This two-dimensional classification helps clarify the severity of individual issues. Issues which would be rated as <\/span><i><span style=\"font-weight: 400;\">medium<\/span><\/i><span style=\"font-weight: 400;\"> severity, but which would be likely discovered only by the team, are typically decreased by the likelihood factor to the <\/span><i><span style=\"font-weight: 400;\">warning<\/span><\/i><span style=\"font-weight: 400;\"> or <\/span><i><span style=\"font-weight: 400;\">informational<\/span><\/i><span style=\"font-weight: 400;\"> severity ratings.<\/span><\/p>\n<p>Our review resulted in <strong>9 findings<\/strong>, 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 <code class=\"codehl\">MAX_TOKENS<\/code> limit potentially leading to unexpected behavior.<\/p>\n<h3><span style=\"font-weight: 400;\">Critical severity<\/span><\/h3>\n<p>No critical severity issues were found.<\/p>\n<h3><span style=\"font-weight: 400;\">High severity<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">H1: Cross-chain replay attack vulnerability<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Medium severity<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">M1: <code class=\"codehl\">MAX_TOKENS<\/code> limit bypass via <code class=\"codehl\">setConfig<\/code> leads to unintended module persistence<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Low severity<\/span><\/h3>\n<p>No low severity issues were found.<\/p>\n<h3><span style=\"font-weight: 400;\">Warning severity<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">W1: Unchecked return value<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W2: Module installation allows empty configuration<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W3: Misleading event in <code class=\"codehl\">deleteConfig<\/code><\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Informational severity<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">I1: Variable can be immutable<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I2: Incorrect usage of immutable instead of constant<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I3: Misleading documentation<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I4: Unnecessary external call<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">TRUST MODEL<\/span><\/h2>\n<p>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.<\/p>\n<h2><span style=\"font-weight: 400;\">CONCLUSION<\/span><\/h2>\n<p><a href=\"https:\/\/ackee.xyz\">Ackee Blockchain Security<\/a> recommends Fluidkey to:<\/p>\n<ul>\n<li>fix the MAX_TOKENS validation in setConfig function;<\/li>\n<li>implement proper cleanup during module uninstallation;<\/li>\n<li>add chain ID to signature verification;<\/li>\n<li>address all other reported issues.<\/li>\n<\/ul>\n<p><b>Ackee Blockchain Security\u2019s full Fluidkey audit report can be found <\/b><a href=\"https:\/\/github.com\/Ackee-Blockchain\/public-audit-reports\/blob\/master\/2025\/ackee-blockchain-fluidkey-earn-module-report.pdf\"><b>here<\/b><\/a><b>.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">We were delighted to audit Fluidkey and look forward to working with them again.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u2019s infrastructure is built to handle automated asset management tasks while maintaining strict security requirements. METHODOLOGY&hellip;<\/p>\n","protected":false},"author":30,"featured_media":1022,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,10,103],"tags":[89,24,52],"class_list":["post-1020","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-audits","category-ethereum","category-wake","tag-audit-summary","tag-ethereum","tag-findings"],"aioseo_notices":[],"featured_image_src":"https:\/\/ackee.xyz\/blog\/wp-content\/uploads\/2025\/03\/FluidKey_X-600x400.png","featured_image_src_square":"https:\/\/ackee.xyz\/blog\/wp-content\/uploads\/2025\/03\/FluidKey_X-600x600.png","author_info":{"display_name":"Tom\u00e1\u0161 Kova\u0159\u00edk","author_link":"https:\/\/ackee.xyz\/blog\/author\/tomas-kovarik\/"},"_links":{"self":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts\/1020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/comments?post=1020"}],"version-history":[{"count":0,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts\/1020\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/media\/1022"}],"wp:attachment":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/media?parent=1020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/categories?post=1020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/tags?post=1020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}