DxSale держит локеры ликвидности в BNB Chain: команды токенов блокируют там свои LP-токены, чтобы показать покупателям, что ликвидность нельзя забрать. В конце мая 2026 года эти локеры опустошили. По подсчёту Rekt, из основного локера ушло $7,3 млн из более чем 1 400 пулов1. PeckShield проследил около 2 958 BNB, примерно $1,87 млн, до двух кошельков атакующего2.
Вывод был быстрым. Предупреждение — нет. Владелец локеров сменился почти за два дня до этого, тремя публичными транзакциями. Этот пост показывает хронологию и что дал бы алерт на эту смену.
Как управлялись локеры
Каждый локер — контракт Ownable. Его владелец может вызывать админ-функции, а они могли переместить заблокированные LP-токены1.
- Основной локер:
0xEb3a…e449 - Локер 2:
0x2D04…E677 - Локер 3:
0x81E0…334d - Прежний владелец:
0x47BA…B78b
SlowMist относит причину к утечке приватного ключа3. DxSale винила атомарные транзакции BSC, Rekt это оспаривает1. DxSale не опубликовала разбор инцидента. Как утёк ключ, мы не гадаем.
Атака по шагам
Время — UTC. Время блока каждой транзакции ниже мы прочитали сами через публичный RPC BNB Chain4.
26 мая, 01:08:21 — у локера 2 новый владелец
Прежний владелец вызвал transferOwnership на локере 2 и передал его адресу 0xC457…FA69 (0xeb24…57a0).
Это первый сигнал в сети.
01:08:56 — основной локер
Через 35 секунд то же самое с основным локером (0x23e3…8d41).
01:14:21 — локер 3
Ещё через шесть минут — локер 3 (0xdfda…19f3).
Три смены владельца на трёх локерах за шесть минут, на один и тот же новый адрес без истории, в час ночи по UTC. Невинного объяснения у этого нет.
27 мая, 20:57:54 — новый владелец получает газ
Новый владелец получил BNB на газ (0xffc7…b72a). По словам Rekt, деньги пришли с Bybit1; источник мы не проверяли. Кошелёк, который 43 часа держал три локера и не двигался, теперь имел газ.
27 мая, с 22:37:45 — вывод
Новый владелец начал вытаскивать LP-токены из локеров. Пример: 0xb107…5fe9. Снятие ликвидности шло всю ночь, например в 04:26:05 28 мая (0xb0ee…4459). Какая транзакция была самым первым выводом, мы не установили, поэтому приводим эти как примеры.
Первое публичное предупреждение дал исследователь в сети в ранние часы 28 мая5, когда вывод уже начался. Первое заявление DxSale появилось 29 мая6.
От первой смены владельца до примера вывода прошло 45 часов 29 минут.
Кто ещё мог это увидеть
Владение локерами публично. Любая команда, чьи LP-токены лежали в DxSale, могла следить за OwnershipTransferred на том локере, где они хранятся, без разрешения DxSale. Монитор на чужом контракте законен, когда в нём лежат ваши деньги.
Что не изменило бы ни одно правило
Как поставить такие правила в SmartAlert
- Добавьте каждый контракт с владельцем, который может двигать средства: локеры, хранилища, казначейства, мосты.
- Создайте на каждом правило «Смена владельца», любое событие, Критично.
- Если ваши LP или токены лежат в чужом локере, добавьте и этот локер. Чтобы следить за публичным контрактом, доказывать владение не нужно.
- Добавьте правило «Перевод больше суммы в $» с
from= локер, для самого вывода. - Заранее договоритесь, кто объявляет о взломе и по какому каналу. Алерты дают время, а план его использует.
См. все рецепты алертов и чек-лист после аудита.
Источники
- 1.Rekt, DxSale — Rekt: локеры, смена владельца, выведено $7,3 млн, финансирование с Bybit, спор с версией DxSale. ↩
- 2.PeckShield в X, трассировка 2 958 BNB. ↩
- 3.GoPlus в X, заметка об инциденте; ExVul в X, заметка об инциденте. Классификация SlowMist — по цитате Rekt. ↩
- 4.Проверено SmartAlert в сети: время блоков, отправители и адресаты всех транзакций в этом посте, через публичный RPC BNB Chain. ↩
- 5.Tahax в X, первое публичное предупреждение. ↩
- 6.DxSale в X, заявления от 29 мая и 30 мая. ↩