Проект 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



