Fluid 🌊 (@0xfluid): Security Incident, May 27th
Estimated coin impact
Scores are not price-change percentages. High impact means a score of +70 or more, or -70 or less.
Impact unavailable
Security Incident, May 27th We recently identified and contained a security incident affecting one of our backend systems. This post mortem serves to disclose the details of the incident. No user funds, wallets or accounts were at risk or compromised. The protocol, smart contracts and risk parameters were never at risk or compromised. The incident was confined to our backend automation infrastructure, which executes automated tasks including the Merkle rewards distribution. The attacker drained roughly 163.7k FLUID and 49.5k GHO - the team will cover this loss in full. The Incident Our Merkle-based system included a monitoring dashboard built with server-side component rendering, which was susceptible to remote code execution. It was based on an internally ported Livewire library — the framework recently disclosed a critical security issue (CVE-2025-54068) which has since been fixed upstream, but was not reflected in our ported version. This vulnerability allowed a request to the dashboard to be manipulated so that an attacker’s own instructions could be executed on the backend server. This enabled them to access the system’s operational secrets, including those used by the Merkle rewards automation. The attacker was able to submit and approve a fraudulent Merkle root, granting access to the funds the distributor was holding at that time. Only a small subset of automation related operational keys were exposed in this system. The protocol remained fully secure and is governed by governance and the 7/14 team multisig. The Impact Surface The reach of the compromise was limited to: The Merkle Distributor which only held enough funds to cover pending reward claims. The bulk of reward funds sit on the team’s multisig which tops up funds based on thresholds and distribution schedule. Operational bots such as our liquidator and rebalancer bot. These bots mostly trigger public, permissionless functions that anyone can call (for example, to liquidate unhealthy positions). The rebalancer bot occasionally calls permissioned chore tasks; however, these cannot move or cause risk to user deposits, funds or protocol risk parameters. The Fluid protocol and smart contracts were never compromised or at risk. The Fluid UI also lives in a separate environment and functions normally. The affected system did not have access to any path which could impact user funds. Further Attempts The attacker attempted to gain further access to other systems to no avail, except a GitHub token belonging to our automation bot. Security Controls on our GitHub repository and deployment pipelines meant the attacker could not push or deploy any malicious code or alter our repositories in any way. Detection and Response As soon as the activity was detected, we moved quickly: Rotated addresses that had access to the Merkle system. Withdrew all remaining balances to the team multisig. Removed the vulnerable component from the affected surface and isolated our monitoring and internal tooling. Rotated all secrets and deployed a new fresh state Reviewed the full scope of access to confirm the blast radius was limited to the automation keys described above, and continued monitoring for abnormal behaviour. The attacker drained 163,706 FLUID and 49,526 GHO (plus ~0.0068 cbBTC of dust) from the distributor. We are actively engaging the relevant parties to recover them, regardless of the outcome the team will cover this loss in full so that reward balances are made whole. What was not affected To be completely explicit: No user funds were lost or ever at risk. No user accounts were compromised. The Fluid Protocol was never compromised and continued working as expected. fluid.io (our frontend) ran normally and sits in a fully separate environment. No team members were compromised in any capacity What we're changing We’re continuing to harden our systems by: Reducing dependencies Making the system more distributed Ensuring further isolation of code and secrets. Tightening our dependency review process Merkle reward distribution The lost reward funds will be covered in full by the team, and we are actively working with the relevant parties to recover them. We expect to bring Merkle reward claims back live in under 10 days. In the meantime, rewards continue to accrue retroactively — no one will miss out on rewards for this period. No user action is required.