Vào ngày 3 tháng 11, giao thức Balancer V2 và các dự án fork của nó đã bị tấn công trên nhiều chuỗi, dẫn đến thiệt hại nghiêm trọng hơn $120M. BlockSec đã cảnh báo ngay lập tức [1] và đưa ra kết luận phân tích ban đầu [2]. Đây là một sự kiện tấn công rất phức tạp. Phân tích ban đầu của chúng tôi cho thấy nguyên nhân gốc rễ là do kẻ tấn công đã thao tác với các biến không đổi (invariant), từ đó bóp méo việc tính toán giá của BPT (Balancer Pool Token ) – cũng chính là LP token của pool – cho phép họ thu lợi nhuận từ một thao tác batchSwap trong một pool ổn định (stable pool).
Để thống nhất số chữ số thập phân của các mã thông báo khác nhau, hợp đồng Balancer sẽ:
Kết luận: Trong cùng một giao dịch, hướng làm tròn khác nhau ở các giai đoạn khác nhau không đối xứng, khi thực hiện lặp đi lặp lại trong bước rất nhỏ, sẽ tạo ra sai lệch vi mô hệ thống.
Những gì bị ảnh hưởng bởi cuộc tấn công lần này là Composable Stable Pool [3] của giao thức Balancer V2 và giao thức fork. Stable Pool được sử dụng cho những tài sản dự kiến có thể duy trì tỷ lệ trao đổi gần 1:1 (hoặc trao đổi với tỷ giá đã biết), cho phép thực hiện các giao dịch lớn mà không gây ra cú sốc giá đáng kể, từ đó nâng cao hiệu quả sử dụng vốn giữa các tài sản tương tự hoặc liên quan.

Từ công thức trên có thể thấy rằng nếu có thể làm cho D nhỏ hơn trên sổ sách (dù cho vốn thực tế không bị mất), thì giá BPT có thể rẻ hơn. BTP đại diện cho tỷ lệ phần trăm của Pool, được sử dụng để tính toán số lượng Reserve trong Pool mà có thể nhận được khi rút thanh khoản, do đó nếu kẻ tấn công có thể nhận được nhiều BPT hơn, cuối cùng khi rút thanh khoản sẽ có được lợi nhuận.
Lấy một giao dịch tấn công trên Arbitrum làm ví dụ, thao tác batchSwap có thể được chia thành ba giai đoạn:
Giai đoạn đầu tiên: Kẻ tấn công sẽ đổi BPT lấy tài sản cơ sở, nhằm điều chỉnh chính xác số dư của một loại token (cbETH) đến ngưỡng làm tròn (số lượng = 9). Bước này tạo điều kiện cho việc mất độ chính xác (precision loss) ở giai đoạn tiếp theo.
Giai đoạn hai: Kẻ tấn công sử dụng số lượng được xây dựng cẩn thận (= 8) để trao đổi giữa một loại tài sản cơ sở khác (wstETH) và cbETH. Do việc làm tròn xuống khi quy đổi số lượng token, Δx tính được hơi nhỏ (từ 8.918 biến thành 8), dẫn đến Δy bị đánh giá thấp và làm cho bất biến D (nguồn từ mô hình StableSwap của Curve) trở nên nhỏ hơn. Do giá BPT = D / totalSupply, giá BPT bị ép thấp.

Giai đoạn ba: Kẻ tấn công sẽ đổi ngược tài sản cơ bản trở lại BPT, đồng thời cân bằng trong hồ phục hồi, kiếm lợi từ giá BPT bị đè thấp – nhận được nhiều Token BPT hơn.
Cuối cùng, kẻ tấn công đã sử dụng một giao dịch có lợi khác để rút thanh khoản, từ đó tận dụng BPT đã thu được để kiếm lợi từ các tài sản cơ bản khác trong Pool là (cbETH và wstETH).
Tấn công giao dịch:
Giao dịch có lợi:
Tham khảo:
[1]
[2]
[3]