Зловреден код на уебсайта на пазара за прогнози Polymarket продаде позициите на някои вписани търговци и прехвърли средствата им към хакерите на 29 октомври. Кодът е заменил скрипт за измерване на скоростта на страниците, който сайтът е зареждал от външна компания.

От Polymarket казват, че възстановяват около 2,7 млн. долара на 726 засегнати портфейла. Записите в блокчейна показват, че криптовалута на стойност около 2,64 млн. долара е достигнала до портфейла на хакерите за по-малко от час.

Подмененият скрипт идва от DebugBear, чийто инструмент за наблюдение на реални потребители (RUM) измерва колко бързо се зареждат уеб страниците за действителните посетители.

Изследователи от Hudson Rock са изтеглили зловредния файл на 29 октомври от адреса, който сайтът на Polymarket е използвал за зареждане на скрипта на DebugBear. Те също така са открили промяна в кода на сайта на Polymarket, която премахва скрипта на DebugBear.

DNS записите на DebugBear са били компрометирани през регистратора на домейна, съобщи компанията в X. Първоначалните констатации сочат, че атаката е била насочена към уебсайта на един конкретен клиент. Компанията не е открила признаци на проникване в собствените си системи, въпреки че проверката продължава.

Изследователи от Ohey са установили, че различен сървър е отговарял за уеб адресите на DebugBear в 18:13 UTC, когато зловредният файл все още е бил онлайн. По-рано същия ден нормалният скрипт се е предоставял от Google Cloud Storage. Всеки клиент на DebugBear зарежда собствено копие на скрипта, а подмененият файл е бил този за Polymarket.

Как скриптът е откраднал парите

Кодът използва повторно достъпа, който вписаният търговец вече има в отворена страница на Polymarket, установиха от Hudson Rock, след като прегледаха файла, без да го стартират. Той чете детайли за профила, които Polymarket съхранява в браузъра, включително набор от API ключове за търговия.

Сами по себе си тези API ключове не могат да направят поръчка в Polymarket, тъй като поръчките изискват и подпис от портфейла. Hudson Rock не открива част от кода, която да изпраща ключовете, парола, сийд фраза (seed phrase) или частен ключ към сървъра, до който докладва.

Вместо това кодът търси в страницата частта от сайта на Polymarket, която прави поръчки, както и инструмента за подписване (signer), който одобрява трансакциите на профила.

След това поема по един от двата пътя. За профили, които се вписват със собствен крипто портфейл, той прехвърля позициите на търговеца директно към портфейла на хакерите. За профили, които се вписват чрез имейл, той продава позициите на все по-неизгодни цени и след това изтегля парите.

И по двата пътя кодът кара собствения инструмент за подписване на профила да подпише заявките му и ги предава на посредника (relayer) на Polymarket, който ги изпраща. От Hudson Rock посочиха, че сама по себе си заявката за подписване не доказва, че търговецът е подписал, без да види изскачащо прозорче. Доставчикът на портфейла все пак може да попита търговеца, да откаже или да приложи собствени правила за сесията.

Портфейлът, вписан в кода, е получил първите си средства в 17:10 UTC, а последните – в 18:02 UTC, според проследяването на блокчейна от Ohey. За това време той е събрал 28,6 милиона POL токена и позиции от 33 портфейла.

В 18:19 UTC тези 28,6 милиона POL са стрували около 2,64 млн. долара при цена от 0,0922 долара според DefiLlama, изчислиха от DefiPrime. Сумата обхваща само POL токените, но не и позициите.

Портфейлът е изпратил всичките 28,6 милиона POL към три други адреса между 18:28 и 18:38 UTC, показва историята на трансакциите му.

Реакцията на Polymarket и възстановяването на средствата

Polymarket публикува първото си съобщение за неоторизирана дейност в потребителски портфейли в 17:38 UTC. В 18:05 UTC компанията съобщи, че борсата ѝ е в режим само за отмяна на поръчки, а действията на посредника (relayer) са спрени на пауза.

Компанията заяви, че е премахнала скрипта „в рамките на един час“. Тя също така е изчистила целия кеш, нулирала е всички активни сесии за влизане и е спряла търговията, докато сайтът не бъде изчистен. Случаят е предаден на правоохранителните органи.

До 30 октомври средствата на 689 от 726-те засегнати портфейла са били възстановени напълно, а останалите 37 се изплащат след проверка. Polymarket също така изплаща 1,19 млн. долара на около 5500 портфейла, които са загубили пари по време на паузата в търговията или чиито позиции са били взети. Общо компанията връща 3,9 млн. долара на търговците.

Търговците не трябва да подават иск. Страницата със статуса на Polymarket съдържа връзка към формуляр за всеки, който смята, че сумата му е грешна или че е трябвало да получи плащане.

Какво могат да направят сайтовете и търговците

DebugBear е инструктирала клиентите на своя RUM продукт да премахнат вградения му код от своите уебсайтове. Адресът, който е обслужвал зловредния файл, cdn.debugbear[.]com, не е имал DNS запис при проверката на The Hacker News на 1 ноември.

От Polymarket заявиха, че връщат скриптовете на трети страни с допълнителни проверки, като по-строга Политика за сигурност на съдържанието (CSP), фиксирани версии и изпълнение в изолирана среда.

Съветите на Hudson Rock за сайтове, които зареждат външни скриптове:

  • Не допускайте ненужен код от трети страни на страници, където потребителите търгуват или подписват трансакции.
  • Където даден файл може да бъде фиксиран към конкретна версия, използвайте Subresource Integrity (SRI), което позволява на браузъра да отхвърли файла, ако съдържанието му се промени. Политика за сигурност, която просто разрешава доверена мрежа за доставка на съдържание (CDN), не проверява файловете, които тази мрежа предоставя.
  • Проверявайте какво може да поиска кодът на страница с вписан потребител от инструмента за подписване.

Съветът на Hudson Rock към търговците е да отхвърлят всяка заявка за подписване, която не са очаквали.