Повідомлення про те, що «Вільний туман» щойно розкрив кейс атаки на старий пул Balancer V1, спровокували втрати приблизно на 234 тис. доларів США.
Цікаво, що цього разу це не типовий підроблений підпис або повторний виклик (reentrancy). Причина — «дірка» в обробці точності (precision) у контракті V1 BPool для функції joinswapPoolAmountOut. Зловмисник спочатку зменшує резерви пулу
$WBTC майже до нуля, а потім, використавши близько 1 «сходинки/одиниці» WBTC, чеканить величезну кількість $BPT. Далі він масово виходить із пулу, пропорційно конвертує BPT, і виводить разом DPI, USDC, WETH та WBTC із пулу.
Кілька моментів, на які варто звернути увагу:
1. V1 — застаріла версія, яку було оголошено неактуальною ще у 2022 році, але кошти все ще лежать на ланцюжку, а безпека фактично відсутня.
2. Баги, пов’язані з точністю, у Curve та Balancer (так звані «AMM на основі ваг», weight-based) — класичні пастки: при введенні дуже малих значень легко отримати цілочисельне обрізання (integer truncation).
3. Поки пул залишається доступним, будь-який «схожий на недоторканий старий контракт» може бути знайдений і «розкопаний» автоматизованими сканувальними скриптами.
Нагадування власникам токенів/LP: позиції в LP-кошарах старих версій протоколу слід або якнайшвидше вивести, або переконатися, що контракт перенесено, а код пройшов аудит. Не варто заспокоюватися лише через високий TVL.
Нагадування розробникам: у функціях, пов’язаних із join/swap, обов’язково використовуйте фіксовану точність або спочатку збільшуйте (scale), а потім округлюйте. У тестах проганяйте граничні значення — зокрема вводьте «1 одиницю».
#DeFi #Security