Как взломанный скрипт DebugBear помог похитить у трейдеров Polymarket около $2,7 млн?

29 октября вредоносный файл, подменивший скрипт DebugBear на сайте Polymarket, использовал возможности открытых сессий вошедших в систему трейдеров. Код мог перемещать их позиции или продавать их, а затем переводить средства. Polymarket сообщил, что вернёт пострадавшим в общей сложности $3,9 млн.
Как взломанный скрипт DebugBear помог похитить у трейдеров Polymarket около $2,7 млн?
Изображение носит иллюстративный характер

DebugBear предоставляет инструмент real user monitoring (RUM), который измеряет скорость загрузки страниц у реальных посетителей. Polymarket подключал его через внешний скрипт. Исследователи Hudson Rock скачали вредоносный файл 29 октября по адресу, откуда сайт загружал скрипт DebugBear; они также обнаружили, что код сайта Polymarket впоследствии изменили, удалив эту загрузку.
DebugBear сообщил в X, что злоумышленники получили контроль над DNS-записями компании через регистратора домена. По предварительным данным, целью был сайт одного клиента. Компания не нашла свидетельств взлома собственных систем, но продолжила расследование. Исследователи Ohey установили, что в 18:13 UTC на запросы к веб-адресам DebugBear отвечал другой сервер. Ранее в тот же день штатный скрипт поставлялся из Google Cloud Storage. Для каждого клиента DebugBear создаёт отдельную копию, и подменили именно файл Polymarket.
Hudson Rock изучила вредоносный код, не запуская его. Тот использовал доступ, уже имевшийся у трейдера с открытой сессией Polymarket, читал сохранённые в браузере данные аккаунта, включая торговые API-ключи, а также искал на странице код выставления ордеров и signer — механизм, который подтверждает транзакции аккаунта. Одних API-ключей для сделок недостаточно: ордеру нужна подпись кошелька. Исследователи не нашли кода, который отправлял бы на сервер злоумышленников API-ключи, пароль, seed-фразу или приватный ключ.
Дальнейшие действия зависели от способа входа. Если пользователь подключался через собственный криптокошелёк, код перемещал его позиции на кошелёк хакеров. При входе по электронной почте позиции постепенно распродавались по всё менее выгодным ценам, после чего деньги выводились. В обоих случаях код обращался к signer аккаунта, а затем передавал запросы relayer Polymarket, который отправляет их на исполнение. Само наличие запроса на подпись не доказывает, что пользователь подписал его, не увидев предупреждения: кошелёк мог запросить подтверждение, отклонить действие или применить собственные правила сессии.
По данным блокчейн-анализа Ohey, кошелёк, адрес которого был встроен в код, получил первые средства в 17:10 UTC, последние — в 18:02. За это время туда поступили 28,6 млн POL и позиции с 33 кошельков. В 18:19, согласно оценке DefiPrime на основе цены DefiLlama в $0,0922 за токен, одни только POL стоили около $2,64 млн; стоимость позиций в эту сумму не включена. С 18:28 до 18:38 кошелёк отправил все 28,6 млн POL на три других адреса.
Polymarket впервые сообщил о несанкционированной активности в пользовательских кошельках в 17:38 UTC. В 18:05 площадка перешла в режим cancel-only, приостановив операции relayer. Компания заявила, что удалила скрипт «в течение часа», очистила кэши, сбросила активные сессии входа, остановила торговлю до проверки сайта и передала дело правоохранительным органам.
К 30 октября Polymarket полностью возместил потери 689 из 726 пострадавших кошельков; выплаты оставшимся 37 проводились по мере проверки. Кроме того, площадка выделила $1,19 млн примерно для 5 500 кошельков, владельцы которых потеряли деньги во время остановки торгов или лишились позиций. Общая сумма возвратов, по данным Polymarket, составляет $3,9 млн. Подавать заявку на возмещение не требуется. Если трейдер считает сумму выплаты неверной или полагает, что ему тоже полагается компенсация, на странице статуса Polymarket доступна форма обращения.
DebugBear рекомендовала клиентам, использующим RUM, удалить её код со своих сайтов. Когда The Hacker News проверило адрес cdn.debugbear[.]com 1 ноября, у него уже не было DNS-записи. Polymarket сообщил, что возвращает сторонние скрипты с дополнительной защитой: усиленной политикой безопасности контента (CSP), закреплёнными версиями файлов и изоляцией в песочнице.
Hudson Rock советует владельцам сайтов не загружать лишний сторонний код на страницы, где пользователи торгуют или подписывают транзакции. Если версию файла можно закрепить, стоит применять Subresource Integrity (SRI): браузер тогда сможет отклонить изменённый файл. Разрешение доверенному CDN в CSP само по себе не подтверждает, что он выдаёт именно проверенный код. Нужно также выяснять, какие скрипты на странице с активной сессией могут обращаться к signer. Трейдерам следует отклонять неожиданные запросы на подпись.


Новое на сайте

Ссылка