Back to Blog

[Не все токены одинаково полезны] Краткий анализ атаки на Paraluni

Code Auditing
March 13, 2022
3 min read

Проект Paraluni подвергся атаке утром 13 марта (по времени UTC +8). Злоумышленник использовал две уязвимости для атаки на протокол. Первая уязвимость — отсутствие проверки переданных токенов, а вторая — классический реентранси (reentrancy). Атакующий совершил несколько транзакций нападения. Ниже мы разберем одну из них 0xf2bba649019ce40a67f0fb74e5e800257d359d9094b6ba6faea14ffa4d3446b1, чтобы проиллюстрировать весь процесс атаки.

Шаг I: добавление liquidity (ликвидности) в paraRouter

Злоумышленник вызвал addLiquidity для пула BTCB-WBNB (индекс = 9), и пул выпустил LP-токен на адрес UBT (токен, созданный атакующим). После этой операции токен UBT владеет LP-токеном пула. Заметим, что BTCB и WBNB были взяты через мгновенный заем (flash loan).

Шаг II: вызов depositByAddLiquidity в MasterChef Атакующий вызвал depositByAddLiquidity, указав _pid равным 9 и используя токены UGT и UBT в качестве параметров. Однако функция не проверяет, равны ли резервные токены пула переданным токенам (UGT и UBT).

Затем функция вызывает depositByAddLiquidityInternal, которая, в свою очередь, вызывает addLiquidity в paraRouter. Эта функция вызывает функцию transferFrom токенов UGT и UBT. Однако эти два токена контролируются злоумышленником. В функции transferFrom токена UBT атакующий вызвал функцию deposit контракта MasterChef, чтобы внести LP-токен, полученный на первом шаге, в контракт MasterChef.

К сожалению, из-за изменения баланса в функции deposit, значение newBalance после addLiquidity оказывается намного больше, чем oldBalance. Таким образом, атакующий получил двойное зачисление в контракте MasterChef.

Шаг III: получение прибыли

В конечном итоге злоумышленник вызвал UBT.withdrawAsset и MasterChef.withdraw, чтобы обменять LP-токены на BTCB и WBNB. Поскольку объем ликвидности оказался больше, чем должен был быть у атакующего, он получил прибыль.

Уроки

Помимо проблемы реентранси, одной из первопричин стало отсутствие проверки переданных токенов. Мы уже наблюдали подобные случаи ранее, например, в инцидентах с Visor и Coin98.

О компании BlockSec

BlockSec — это передовая компания в сфере безопасности блокчейнов, основанная в 2021 году группой всемирно признанных экспертов по безопасности. Компания стремится повысить безопасность и удобство использования развивающегося мира Web3, чтобы способствовать его массовому внедрению. Для этого BlockSec предоставляет услуги аудита безопасности смарт-контрактов и EVM-цепей, платформу Phalcon для разработки систем безопасности и проактивного блокирования угроз, платформу MetaSleuth для отслеживания и расследования транзакций, а также расширение MetaSuites для эффективной работы разработчиков Web3 в криптомире.

На сегодняшний день компания обслужила более 300 уважаемых клиентов, таких как MetaMask, Uniswap Foundation, Compound, Forta и PancakeSwap, а также привлекла десятки миллионов долларов США в двух раундах финансирования от ведущих инвесторов, включая Matrix Partners, Vitalbridge Capital и Fenbushi Capital.

Официальный сайт: https://blocksec.com/

Официальный аккаунт в Twitter: https://twitter.com/BlockSecTeam

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit