Balancer.fi EuroDNS Social-Engineering Nameserver Hijack / Approval Drain (2023-09-20)
- Name: Balancer.fi EuroDNS social-engineering nameserver hijack / approval drain
- Date: 2023-09-20
- Protocol: Balancer
- Chain: Multi-chain EVM (Ethereum, Avalanche, Arbitrum, Polygon)
- Category: front-end compromise / registrar social engineering / nameserver hijack / approval phishing / permit phishing / wallet-permission drain
- Loss: community tracking later estimated about
$364k, while Balancer’s later restitution process validated7claimant wallets totaling about$330,521.91at attack-time prices - Summary: Balancer’s pools and Vault contracts were not exploited directly. Instead, on
2023-09-20at about00:42 CET, an attacker used social engineering against EuroDNS—the registrar managing thebalancer.fidomain—to change the domain’s nameservers. Visitors to the realbalancer.fihostname were then served a phishing frontend forked from the real Balancer app. That clone prompted users to approve or sign permissions for attacker-controlled spend paths, including a conspicuous allowance target0x00006deacd9ad19db3d81f8410ea2b45ea570000. Balancer’s later postmortem said the attacker mixed token approvals, permit signatures, and Permit2 transactions depending on the wallet and token set they encountered. Community reports and Balancer DAO reimbursement proposals later tied the incident to at least seven verified damaged wallets across Ethereum, Avalanche, Arbitrum, and Polygon. - Trigger / entry point:
- Balancer’s official postmortem said the incident began when a hacker updated the nameservers for
balancer.fithrough a successful social-engineering attack on EuroDNS, the registrar used for the.fidomain. - The malicious site was a fork of Balancer’s actual frontend, so the surrounding UX, branding, and transaction flow still looked plausibly genuine.
- Users noticed suspicious prompts asking them to
Allow tokens to use our new protocol, with one highlighted spender address padded with zeros at both ends:0x00006deacd9ad19db3d81f8410ea2b45ea570000. - Balancer’s postmortem explicitly said no one on the frontend team or elsewhere in the Balancer ecosystem had lost credentials or been infected with malware; the decisive failure lived at the registrar / naming layer instead.
- Balancer’s official postmortem said the incident began when a hacker updated the nameservers for
- Root cause:
- The decisive failure was not in Balancer’s Solidity or Vault accounting. It was in the web2 naming control plane users relied on to reach the real Balancer interface.
- Once EuroDNS accepted the attacker’s social-engineered registrar changes,
balancer.fistopped proving that the browser was still reaching Balancer-controlled infrastructure. - Because Balancer’s frontend is signer-authority infrastructure in practice, nameserver control became wallet-prompt control: whoever decided what
balancer.firesolved to also decided what spender or permit target users were asked to trust. - The preserved invariant is
the canonical Balancer domain must never ask a wallet to grant authority outside the intended Balancer route. The registrar compromise broke that invariant before any interaction reached Balancer’s contracts. - This case is also a clean boundary marker against third-party runtime allowance and integrity pinning: Balancer did not first fail because one still-legitimate Balancer page loaded the wrong third-party script; it failed earlier, because the naming layer stopped proving the browser had even reached Balancer-controlled delivery.
- Exploit path:
- At roughly
00:42 CETon2023-09-20, the attacker changed the nameservers forbalancer.fiafter socially engineering EuroDNS. - The attacker served a phishing frontend forked from the genuine Balancer app under the real
balancer.fidomain. - The malicious app presented signer prompts that could vary by wallet and token set, including ordinary ERC-20 approvals, permit signatures, and Permit2 flows.
- One reported allowance target was
0x00006deacd9ad19db3d81f8410ea2b45ea570000, which the fake UI presented as part of a plausible Balancer interaction flow. - Victims signed because the domain, branding, and product context still looked canonical.
- Community members reported suspicious behavior quickly; Balancer posted a Discord warning at about
01:43 CETand publicly warned users not to trust the frontend while the issue was being investigated. - EuroDNS did not respond until about
08:30 CET, and Balancer said control over the domain was not restored until about10:30 CET. - Cloudflare and MetaMask added
balancer.fito phishing / malicious-site blocklists during the active incident window, which Balancer later credited as important damage containment. - Even after control returned, already granted approvals and signed permit-style permissions remained dangerous until users revoked them or migrated funds.
- Balancer later documented and reimbursed seven verified claimant wallets through DAO proposals
BIP-443,BIP-455, andBIP-535, preserving a reasonably concrete public record of the exploit’s realized damage.
- At roughly
- What the attacker needed to be true:
- EuroDNS support and recovery channels had to accept a socially engineered registrar-side change to the nameserver configuration for the real domain.
- Users had to keep trusting
balancer.fias the canonical Balancer interface during the compromise window. - The fake frontend had to stay close enough to legitimate Balancer UX that approval / permit / Permit2 prompts looked routine rather than obviously foreign.
- Victims needed to hold transferable assets on routes the attacker’s prompt logic could monetize across supported EVM chains.
- Registrar response, DNS propagation, and anti-phishing blocklist rollout had to be slow enough that at least a handful of victims signed before the warnings dominated.
- Technical anatomy worth remembering:
- This was not a contract exploit. Onchain, users signed ordinary-looking approvals or permit-style authorities and the attacker later exercised them.
- Balancer’s postmortem is especially useful because it preserves a mixed authority-harvest shape: the malicious frontend did not rely on one single spender primitive, but selected among approvals, permits, and Permit2 depending on the victim’s wallet state.
- The incident is a useful cousin to Curve Finance DNS hijack, but Balancer’s public record is sharper about the registrar-side social-engineering ingress and about later restitution accounting for concrete victim wallets.
- It is also a useful contrast to BadgerDAO. Badger preserved
same real site, different edge-served bytes; Balancer preservedsame real site label, different registrar-controlled answer, where the browser no longer reached Balancer-controlled delivery at all. - The later DAO reimbursement proposals also preserve an unusual operational lesson: once users lose funds through signer-surface compromise, restitution, proof-of-wallet ownership, and attacker/fraud-claim filtering become part of the incident surface too.
- Representative transactions and addresses:
- Malicious approval target highlighted by Balancer:
0x00006deacd9ad19db3d81f8410ea2b45ea570000 - Verified heavily impacted claimant wallet in
BIP-443(auramaxi.eth):0xD14f076044414C255D2E82cceB1CB00fb1bBA64c - Additional verified claimant wallets later reimbursed in
BIP-455andBIP-535:0x1511e7Fe2e06BBc75Eb4CeeE7c7dC5f9af6bb781,0x5d119666CD68dDD9b3b3b5Ee7552EEdeD6843918,0x3056b7039deb4347ca9ab2abd7b5785fcdcc0ebf,0xa7A13659692239c143daE313a0116D5b5C18d26C,0xde5cbe25c58c49ee7635216de6998f8dacd63b96,0xc4f95f674b393a49410ace864833abe836848526 - Later Balancer-validated claimant-loss totals:
7wallets, about$330,521.91at attack-time prices
- Malicious approval target highlighted by Balancer:
- Response / mitigation:
- Balancer warned users via Discord and social channels not to interact with the frontend while the attack was live.
- Cloudflare and MetaMask blocked or flagged the compromised domain during the incident, which Balancer later cited as important containment.
- After control of
balancer.fireturned and propagation stabilized, Balancer announced recovery of the domain path. - Balancer’s postmortem told affected users to revoke suspicious approvals immediately and to treat accounts that had signed malicious messages as compromised enough to justify moving funds to a fresh account.
- The Balancer team said it was evaluating more secure registrar options for the
.fidomain and even reconsidering a move back to.financeif that produced a stronger registrar-security posture. - The Balancer DAO later reimbursed verified victims through
BIP-443,BIP-455, andBIP-535, paying75%of accepted loss amounts while preserving onchain ownership proofs and claimant attestations.
Pattern tags
- frontend-compromise-approval-phishing
- Same canonical domain, different registrar-controlled answer:
balancer.fistill looked like the right destination, but the registrar-induced nameserver answer no longer routed browsers to Balancer-controlled infrastructure - Mixed wallet-authority harvest rather than one single prompt type: Balancer’s own postmortem said the phishing frontend used ordinary approvals, permit signatures, and Permit2 transactions depending on each victim’s wallet state
- Domain recovery and approval recovery were separate jobs: regaining
balancer.fidid not retract already granted spender rights or already signed permit-style authorities - Restitution itself became a secondary control surface: verifying which losses really came from the Balancer frontend, rather than from the same drainer family elsewhere, required wallet-ownership proofs and human review
Why the exploit worked
- Balancer’s strongest user trust signal — the canonical
balancer.fidomain — remained recognizable while the registrar / nameserver path underneath it stopped proving that the browser was still reaching Balancer-controlled infrastructure. - The phishing frontend looked close enough to the real Balancer app that users were still willing to sign authorities in a familiar DeFi interaction flow.
- The attacker did not need one single approval primitive. By mixing direct approvals, permit signatures, and Permit2-style authorities, the malicious frontend could adapt to different wallet states and token surfaces.
- Balancer’s contracts being safe did not matter for already signed permissions. Once a victim granted or signed transferable authority, the attacker no longer needed a bug in Balancer itself.
- Registrar response latency mattered. Community detection was relatively fast, but EuroDNS response and safe re-propagation still left enough time for real losses to accumulate.
- The postmortem also shows why incident closure is wider than
site restored: users had to revoke approvals, migrate compromised accounts, and later prove claim legitimacy in restitution flows because the same drainer family was still active elsewhere.
Three signer-authority promotions this incident collapsed
-
A canonical signer-facing domain still existed
- Users were still going to
balancer.fi, which remained the socially recognized Balancer destination even after the attacker changed the nameservers at EuroDNS. - The weak first claim therefore still held in users’ heads:
this is the real Balancer domain label I normally trust when I decide whether to sign.
- Users were still going to
-
That registrar-controlled answer was still treated as canonical Balancer prompt truth
- Once the nameserver answer stopped routing browsers to Balancer-controlled infrastructure, the fetched phishing frontend was no longer Balancer-authored wallet-prompt truth even though the hostname still looked right.
- The dangerous promotion was from
the browser is at balancer.fitothe spender, permit, and Permit2 objects this page is showing must still be Balancer's intended authority objects for this exact route.
-
Those accepted prompts still inherited live wallet authority after recovery
- Victims did not just view a fake site; they signed approvals, permits, and Permit2 transactions that remained economically live after the registrar state was fixed.
- That is why domain recovery and user recovery were separate jobs: the accepted prompt had already become durable spender authority in user wallets, so restoring
balancer.fidid not retract what the attacker had already harvested.
Detection and audit pivots
- Inventory every authority that could change where
balancer.firesolves: registrar staff workflows, account-recovery paths, nameserver delegation, TLD-specific vendor policies, and emergency failover procedures. - Monitor for signer prompts from the canonical domain that introduce fresh spender addresses, permit targets, or Permit2 flows outside the reviewed Balancer route set.
- Treat mixed prompt drift as an expected attacker tactic. If the malicious frontend can choose between approvals, permits, and Permit2 based on wallet state, looking only for one suspicious approval pattern is too narrow.
- Ask whether the protocol can independently publish and machine-check the currently expected spender / permit targets for the live frontend, instead of asking users to trust the domain name alone.
- Rehearse the
domain compromised, but contracts safemessage path together with exact revoke and migration guidance. In wallet-drainer incidents, the second message often limits more damage than the first. - Preserve claimant-quality evidence early. If restitution or user triage later matters, responders should already know what onchain signatures, domain-window timing, and drain-address correlations will distinguish real victims from unrelated drainer losses.
Failure-prevention checklist
- Treat registrar, TLD-provider support flows, nameserver delegation, recovery email, and registrar-human escalation paths as signer-critical custody infrastructure.
- Minimize the authority the canonical domain can request by default: exact approvals, bounded permits, short expiries, and route-specific authority should be preferred over broad standing permissions.
- Pin or machine-verify spender destinations, permit domains, Permit2 targets, and router families so a recovered domain cannot silently continue to ask for fresh attacker authority after apparent restoration.
- Build emergency routing and public-proof workflows before the next incident: who can prove the domain is safe again, how users verify that proof, and which alternate read-only or safer routes remain available during containment.
- Continuously reconcile live signer-target inventory against onchain approval / permit telemetry so
canonical domain, wrong authority objectbecomes visible within minutes. - Coordinate fast with wallet vendors, phishing blocklists, and browser security partners; Balancer’s postmortem preserved how much MetaMask and Cloudflare intervention mattered during the active window.
- Prepare revoke / migrate guidance for all relevant authority types, not just ERC-20 approvals. Permit and Permit2 compromise should trigger the same seriousness as an onchain
approve(). - If restitution is part of the playbook, predefine evidence standards and claimant-review procedures before the incident rather than improvising them once public pressure is high.
Audit prompts
- Which exact humans, vendors, and recovery channels can change where
balancer.firesolves today, and which of those paths still depend on social-engineering-prone support workflows? - If the canonical Balancer domain were malicious for one hour, what largest authority could it realistically harvest now: unlimited ERC-20 approvals, Permit2 blanket permissions, one-shot permits with reusable scope, or broader wallet-session authority?
- What independent control proves that the live Balancer frontend is asking for one of Balancer’s intended spender / permit targets rather than a fresh address or unauthorized Permit2 flow?
- Which alerts would fire first if the attack repeated right now: nameserver-change alerts, spender-inventory drift, permit-domain drift, suspicious approval clustering, or only later drain transactions?
- How quickly can Balancer both stop new signatures and help already exposed users revoke or outrun previously signed permissions?
- If affected users later seek reimbursement, what exact evidence distinguishes
loss from the Balancer frontend compromise windowfromloss to the same drainer family through some unrelated site? - Does Balancer still rely on any signer-critical trust assumption tied to one registrar or one TLD support process that could be replaced with a higher-friction, more auditable control path?
- After recovery, what exact combination of registrar state, DNS answers, frontend-bundle provenance, and spender / permit allowlists justifies telling users
balancer.fi is safe again?
Lessons that should already be standard
- The canonical domain is custody infrastructure once users trust it to prepare wallet permissions.
- Registrar social engineering is not a web-ops footnote. If registrar staff can be tricked into changing nameservers, they can indirectly become wallet-policy administrators.
Contracts are safeis not enough when the real user loss path iswallet signed the wrong authority from the right-looking domain.- Mixed approval surfaces matter. A frontend drainer may not rely on only
approve(); it can pivot among approvals, permits, and Permit2 depending on what the wallet exposes. - Restoring the domain is only half the response. The other half is unwinding or outrunning the permissions users already granted while the domain was malicious.
- Anti-phishing vendors and wallet blocklists are part of real containment for signer-surface incidents; Balancer’s case preserved how much those outside controls can cut the active window.
- Restitution quality depends on evidence quality. If the same drainer family is active elsewhere, post-incident claims need more than a generic statement that funds were lost around the same time.
- The real reviewer question is not only
does balancer.fi resolve?butwhat proves the currently resolving site is still the exact wallet-authority surface Balancer intended users to trust?
Why this incident matters
- It preserves a high-signal
real domain, wrong authority objectincident where the decisive ingress sat in registrar social engineering rather than in a Solidity bug or a downstream package compromise. - It adds an especially useful bridge case between Curve Finance and BadgerDAO: Curve preserved generic DNS / nameserver hijack, Badger preserved compromised edge-served bytes, and Balancer preserved a registrar-social-engineering path with a mixed approval / permit / Permit2 wallet-harvest profile.
- It is also a sharp exemplar for canonical-domain runtime-byte integrity: the canonical domain label stopped proving that the fetched frontend still belonged to Balancer at all.
- It also clarifies where third-party runtime allowance and integrity pinning starts too late. Before asking which third-party code the real Balancer page should have been allowed to execute, users first needed the domain to keep resolving to Balancer-controlled delivery.
- It preserves an unusually concrete aftermath trail through
BIP-443,BIP-455, andBIP-535, which makes the incident useful not only for exploit mechanics but also for understanding how frontend-drainer restitution and claimant verification become part of the governance and ops surface. - It also helps the corpus keep front-end compromise families distinct from software supply-chain compromise and release-provenance failure: the decisive compromise did not first live in a shared package ecosystem or loader-selected runtime, but in Balancer’s own domain-control path.
Internal linkages
- Core recurring pattern: frontend-compromise-approval-phishing.
- Positive-design companion: canonical-domain-runtime-byte-integrity — the sharper architecture question here is what the canonical Balancer domain should have proved about registrar control, nameserver state, frontend provenance, and the exact wallet-authority bytes users fetched before any signer prompt was trusted.
- Boundary-setting browser-policy companion: third-party-runtime-allowance-and-integrity-pinning — useful partly because Balancer shows where that narrower question begins too late; here the browser had already left Balancer-controlled delivery before runtime script-allowance policy on the intended page could matter.
- Adjacent positive-design companion: signer-intent-truth-security-object — the user-facing lesson is that the human intent object broke before chain execution, because the domain-level trust cue no longer corresponded to Balancer’s intended spender / permit meaning.
- Boundary note: software-supply-chain-compromise and release-provenance-failure — useful contrasts for broader
wrong bytes reached the userincidents, but Balancer stays on the registrar / naming-layer compromise branch. - Useful comparison case: malicious approval drain (2022-08-09).
- Useful comparison case: BadgerDAO Cloudflare Worker injected approval drain (2021-12-02).
Control surface
-
The decisive leverage sat in EuroDNS registrar controls, nameserver delegation for
balancer.fi, public proof of safe frontend recovery, and the spender / permit / Permit2 targets the canonical domain was allowed to present to wallets. -
The note is useful as a classifier boundary because the compromise happened before the narrower
which remote scripts may this real page execute?question. Once the naming layer stopped routing users to Balancer-controlled infrastructure, script policy on the intended page was already moot. -
Balancer’s pools and Vault contracts could remain perfectly safe while the real user security boundary still failed completely at the domain-control layer.
-
The preserved design question is not only
how do we restore balancer.fi?buthow do we prove that the restored domain once again maps to the exact wallet-authority surface Balancer intends users to trust right now? -
Sources:
- https://medium.com/balancer-protocol/dns-security-incident-post-mortem-1b1feb735aca
- https://forum.balancer.fi/t/bip-443-restore-brand-trust-in-balancer-by-assisting-dns-hack-users/5218.json
- https://forum.balancer.fi/t/bip-455-assisting-dns-hack-victims/5259.json
- https://forum.balancer.fi/t/bip-535-assisting-dns-hack-victims-final-batch-payment/5507.json
- https://etherscan.io/address/0x00006deacd9ad19db3d81f8410ea2b45ea570000
- https://etherscan.io/address/auramaxi.eth
-
Last reviewed: 2026-08-01 UTC