OAK — OnChain Attack Knowledge

Worked example · 2023-08

Balancer V2 Boosted Pools exploitation — Ethereum + multi-chain — 2023-08-22

Loss
approximately $2.1M extracted across multiple Balancer V2 Boosted Pools deployments after a pre-disclosure-public-warning + insufficient-mitigation-window operating-failure pattern.
OAK Techniques observed
OAK-T9.005 (Reentrancy / arithmetic precision-loss class, Balancer-Boosted-Pools-rate-providing-flow subclass) + OAK-T9.002 (flash-loan precondition).
Attribution
pseudonymous; no recovery; the realised loss was a small fraction of total Boosted-Pools TVL because the pre-disclosure-public-warning gave the majority of LPs an opportunity to withdraw before the exploitation window closed.
Key teaching point
Pre-disclosure-public-warning followed by insufficient-mitigation-window is a structural recurring pattern. Balancer Labs disclosed the Boosted-Pools vulnerability publicly on August 22, 2023 along with explicit "withdraw your funds" guidance; an attacker exploited the cohort of LPs who did not withdraw within the disclosure-window. The pattern recurs across Wintermute Sep 2022 (examples/2022-09-wintermute.md) — Profanity disclosure 5 days before the headline incident — and across the broader "publicly-known-vulnerability-not-fully-mitigated" cohort. Balancer V2 August 2023 is the canonical 2023 worked example for the cohort-of-LPs-who-did-not-act-on-warning failure mode.

Summary

Balancer V2's Boosted Pools (introduced 2022) wrap underlying yield-bearing assets like Aave aTokens and Compound cTokens, providing depositors with composite exposure to the underlying yield while presenting the wrapped position as a standard Balancer LP token. The Boosted-Pools rate-providing flow contained a vulnerability discovered by Balancer's internal security team in mid-August 2023; the team performed an internal review, prepared a fix, and on August 22, 2023 simultaneously disclosed the vulnerability publicly + deployed the fix to the affected pools + explicitly recommended that LPs withdraw from the affected pools.

The disclosure-and-warning was a reasoned operator-side decision: the team judged that public disclosure with explicit withdraw-your-funds guidance would produce a smaller realised loss than continued silence-and-mitigation-without-public-warning, given the constraint that the fix could not be deployed atomically across all Balancer V2 deployments simultaneously. An attacker observed the public disclosure, identified the cohort of LPs who had not withdrawn within the disclosure window (approximately 0.4% of total Boosted-Pools TVL), and extracted approximately $2.1M from those positions before the per-pool fix was completed.

The case is structurally important as the canonical 2023 worked example of the disclosure-window-too-short failure mode and pairs with Wintermute September 2022 (Profanity disclosure 5 days before the headline incident) as the two foundational cases for OAK contributors articulating the public-disclosure-vs-silent-mitigation tradeoff.

Timeline (UTC)

When Event OAK ref
2023-08-mid Balancer Labs internal security team identifies the Boosted-Pools rate-providing-flow vulnerability (pre-disclosure internal-review)
2023-08-22 Balancer Labs publicly discloses the vulnerability + deploys the fix to most Boosted-Pools + recommends LPs withdraw from remaining affected pools (disclosure event)
2023-08-22 (same day onwards) LPs withdraw at varying speeds; majority withdraw within hours; minority do not respond to warning (cohort response)
2023-08-27 onwards Attacker exploits the residual cohort of non-withdrawn positions; extracts ~$2.1M T9.005 + T9.002 (extraction)
2023-08 to 2023-09 Industry forensic posts publish on-chain trace + retrospective analysis of the disclosure-window timing (forensic record)

What defenders observed

  • Pre-disclosure (no public-record indication of impending vulnerability). The pre-disclosure period was internal to Balancer Labs; no public-record signal would have allowed external defenders to act before the August 22 disclosure.
  • At-disclosure (operator-side public-warning + fix-deployment). Balancer's August 22 disclosure-and-mitigation event was operationally well-executed in the sense that the public warning was clear and the fix was deployed to most pools immediately; the residual non-withdrawn LP cohort represented the unavoidable disclosure-window-too-short loss surface.
  • Post-exploitation (limited realised loss vs total TVL). The realised $2.1M loss is approximately 0.4% of total Boosted-Pools TVL at the disclosure date; the disclosure-and-warning approach substantially limited the realised loss compared to a hypothetical no-public-disclosure approach.

What this example tells contributors writing future Technique pages

  • Disclosure-window-too-short is a recurring framework-level pattern. Future T9.005 / T9.x contributions should explicitly enumerate disclosure-window-too-short as a discrete failure-mode subclass alongside known-vulnerability-not-fixed (Onyx Sep 2024) and rotate-on-disclosure-not-applied (Wintermute Sep 2022). The three failure-mode subclasses are structurally distinct: (a) the protocol team is not aware of the vulnerability (general-class T9.x); (b) the protocol team is aware and disclosed publicly + provided guidance, but a cohort of users did not act in time (Balancer V2 August 2023); (c) the protocol team is aware and silent (the silent-mitigation alternative which Balancer's team explicitly considered and rejected).
  • The public-disclosure-vs-silent-mitigation tradeoff is operator-decision-context-dependent. Balancer's August 2023 decision to publicly disclose was reasoned given the multi-deployment constraint that prevented atomic fix-deployment; for cases where atomic fix-deployment is feasible, silent mitigation may produce a smaller realised loss. Future Technique contributions should treat operator-disclosure-decisions as a load-bearing variable rather than a default.
  • Cohort-of-LPs-who-did-not-act-on-warning is itself a measurable variable. Defenders writing operator-side incident-response playbooks should treat the post-disclosure-cohort-response-rate as a measurable variable that informs subsequent incident-disclosure-strategy decisions.

Public references

  • Balancer Labs operator-side disclosure and post-incident analysis — [balancerdisclosure2023].
  • PeckShield on-chain trace — [peckshieldbalancer2023].
  • BlockSec function-level walkthrough — [blocksecbalancer2023].
  • Halborn defender-oriented post-mortem — [halbornbalancer2023].

Citations

  • [balancerdisclosure2023] — Balancer Labs August 2023 vulnerability disclosure + post-incident analysis.
  • [peckshieldbalancer2023] — PeckShield on-chain trace.
  • [blocksecbalancer2023] — BlockSec function-level walkthrough.
  • [halbornbalancer2023] — Halborn defender-oriented post-mortem.
  • [1inchprofanity2022] — 1inch Profanity disclosure (Sep 2022); cross-reference for the foundational disclosure-window-too-short case.
  • [halbornwintermute2022] — Halborn Wintermute writeup; cross-reference for the canonical pre-2023 disclosure-window-too-short worked example.

Discussion

Balancer V2 August 2023 is the canonical 2023 worked example for the disclosure-window-too-short failure-mode subclass and is structurally important for OAK because it demonstrates that public-disclosure-with-explicit-warning is itself a mitigation strategy with a measurable realised-loss outcome. The case validates Balancer's reasoned operator-side decision to publicly disclose rather than silently mitigate, given the multi-deployment constraint; future contributors writing similar cases should treat the disclose-vs-silent decision as an explicit variable.

The cohort framing with Wintermute September 2022 (Profanity disclosure 5 days before headline incident) is the foundational two-case set for the disclosure-window-too-short pattern; subsequent cases (Onyx Sep 2024 cohort, ZKLend Feb 2025 cohort) extend the pattern into the post-2023 period. Future Technique-page contributions documenting this pattern should treat the cohort as a multi-year recurring observation rather than per-incident-isolated framing.

The mitigation surface composes across multiple OAK-M classes: OAK-M22 rotate-on-disclosure discipline at the user-side (LPs should respond rapidly to operator-side disclosures), OAK-M34 emergency-pause at the operator-side (protocols should be able to deploy emergency-pause atomically across all deployments rather than per-deployment), and OAK-M39 cross-protocol watcher network at the third-party side (industry watcher networks should be tuned to detect post-disclosure-window exploitation events with high-priority alerts).

Techniques demonstrated (2)