Atak na Polymarket: wyciek klucza, nie błąd kontraktu

22 maja 2026 roku on-chain investigator ZachXBT zgłosił odpływ środków z jednego z portfeli Polymarket. Wstępne szacunki wskazywały na około 520 tys. dolarów. Zanim zespół potwierdził szczegóły, liczba zbliżyła się do 660-700 tys. dolarów. Bez reentrancy. Bez manipulacji wyroczniami. Bez pomysłowego choreografowania flash loanów. Tylko klucz prywatny, który trafił tam, gdzie nie powinien.
Exploit na Polymarket nie dotknął tej części stosu, za której przeglądanie płaci się Trail of Bits i OpenZeppelin. Uderzył w wewnętrzny portfel do doładowań, konto operacyjne używane do finansowania nagród i utrzymania ciągłości działania. Portfel, który nigdy nie pojawia się w zakresie audytu, bo nie jest kontraktem. To klucz leżący w czyjejś infrastrukturze.
To jest właśnie niekomfortowa część. Po roku, w którym nagłówki zdominowały ataki na mosty i błędne konfiguracje DVN, najbardziej dofinansowany rynek predykcji na świecie został opróżniony przez najbardziej podstawowy wektor ataku w historii tej branży.
Co tak naprawdę wydarzyło się na Polygon
Opróżnione konto było portfelem operacyjnym, a nie środkami użytkowników przechowywanymi w podstawowych kontraktach protokołu. Zgodnie z doniesieniami CoinDesk, ZachXBT zauważył wypływ około 520 tys. dolarów, a zespół Polymarket zapewnił, że środki klientów są bezpieczne. Atakujący wyczyścił POL i inne aktywa z portfela na Polygon, a następnie zrobił to, co zawsze robią napastnicy: przebridżował i rozproszył środki, zanim ktokolwiek zdążył czegokolwiek zamrozić.
Decrypt oszacował stratę bliżej 700 tys. dolarów i zidentyfikował ją konkretnie jako wewnętrzny portfel do doładowań. Rozbieżność w liczbach jest normalna w pierwszych 24 godzinach; mechanizm nie jest przedmiotem sporu. Ktoś zdobył klucz.
To exploit na Polygon POL tylko w tym sensie, że POL był aktywem przechowywanym w portfelu. Sieć nie zawiodła. Kontrakt nie zawiodła. Zawiodło przechowywanie jednego operacyjnego klucza.
Dlaczego adapter UMA CTF nie był problemem
Mechanizm rozstrzygania rynków Polymarket opiera się na optymistycznej wyroczni UMA za pośrednictwem UMA CTF Adapter, kontraktu, który publikuje pytania, obsługuje spory i rozlicza wyniki. To ten element, przynajmniej teoretycznie, niesie największe ryzyko ataku. Był audytowany. Został przetestowany w boju na tysiącach rynków.
I nie miał z tym nic wspólnego.
Myślę, że to jest ten szczegół, który ludzie zbagatelizują, a nie powinni. Warstwa smart kontraktów wytrzymała. Wyrocznia wytrzymała. To, co się złamało, to portfel, który kontroluje człowiek za pomocą klucza, do którego człowiek (albo pipeline CI, albo gorący serwis podpisujący) ma dostęp. Przez hossę utwardzaliśmy elementy, które mają formalną weryfikację, ignorując te, które mają plik .env.
Klucze operacyjne są teraz prawdziwą powierzchnią ataku
Oto wzorzec widoczny w incydentach z 2026 roku. Solidity staje się coraz lepszy. Audytorzy dobrze wykonują swoją pracę. Metody formalne wychwytują błędy reentrancy, które kiedyś opróżniały dziewięciocyfrowe sumy. Więc atakujący zmienili kurs.
Przenieśli się na miękkie miejsca:
- Gorące portfele używane do nagród, doładowań gazu i market-makingu.
- Klucze deployera, które nigdy nie zostały zrotowane po uruchomieniu.
- Sygnatariusze multisig, którzy używają tego samego laptopa do podpisywania transakcji i przeglądania internetu.
- Sekrety CI/CD, które mogą podpisywać transakcje w środowisku produkcyjnym.
Nic z tego nie pojawia się w raporcie z audytu. Kiedy oceniam bezpieczeństwo w regulowanej giełdzie, przegląd kontraktów to może jedna trzecia pracy. Reszta to HSM-y, segregacja sygnatariuszy, dokumentacja ceremonii kluczy i głęboko nieefektowne pytanie: "kto może przenosić środki o 3 w nocy i co mogłoby go powstrzymać". To właśnie w tym ostatnim obszarze większość zespołów jest narażona.
To ta sama lekcja co w przypadku straty Kelp DAO LayerZero: 292 miliony dolarów zniknęły nie z powodu błędu w kontrakcie, ale z powodu błędnej konfiguracji w warstwie operacyjnej. Inny mechanizm, ta sama przyczyna źródłowa: nudna część, której nikt nie audytuje.
Jak powinien wyglądać portfel operacyjny na 660 tys. dolarów
Jeśli jeden klucz może przenieść 660 tys. dolarów, to decyzja projektowa, a nie pech. Kilka rzeczy, które powinny być absolutnym minimum dla każdego portfela operacyjnego przechowującego znaczącą wartość:
- Limity wydatków w samej logice portfela. Portfel do doładowywania nagród nie powinien mieć możliwości wysłania całego salda w jednej transakcji. Ogranicz to na poziomie łańcucha.
- Podpisywanie progowe dla kwot powyżej ustalonego minimum. Małe automatyczne wypłaty mogą być gorące. Cokolwiek powyżej, powiedzmy, 10 tys. dolarów powinno wymagać drugiego sygnatariusza. Safe multisig z niskim progiem dla dużych transferów to nie jest nic skomplikowanego.
- Izolacja klucza od środowiska aplikacji. Klucz podpisujący portfela operacyjnego nigdy nie powinien znajdować się tam, gdzie kod aplikacji, zależności lub przejęty runner CI mogą go odczytać.
- Monitoring, który powiadamia człowieka o anomalnym odpływie środków. ZachXBT wykrył to zanim zespół zdążył ogłosić. Twoje własne alerty powinny wyprzedzać osoby trzecie obserwujące mempool.
Żadna z tych rzeczy nie jest nowością. To właśnie te elementy są odcinane, gdy zespół szybko wypuszcza produkt, a portfel to "tylko do nagród".
Luka w stosie audytowym, której nikt nie jest właścicielem
Głębszy problem jest wewnętrzny i jurysdykcyjny. Bezpieczeństwo inteligentnych kontraktów ma wyraźnego właściciela: firmę audytową. Bezpieczeństwo kluczy operacyjnych ma... tego, kto skonfigurował portfel, zazwyczaj pod presją terminu i często nigdy więcej do tego nie wróconego. Pisałem o tej luce w kontekście zepsutego stosu audytowego DeFi: certyfikacja obejmuje kontrakty i kończy się na granicy kontraktu. Wszystko, co operacyjne, pozostaje poza zakresem i poza uwagą.
Dopóki regulator lub ubezpieczyciel nie zmusi do traktowania bezpieczeństwa operacyjnego jako osobnej pozycji z wyznaczonym właścicielem, to będzie się powtarzać. Bezpieczeństwo operacyjne DeFi w 2026 roku jest mniej więcej tam, gdzie bezpieczeństwo inteligentnych kontraktów było w 2019 roku: wiadomo, że jest ważne, nikt go nie posiada, finansowane jest na końcu.
Polymarket wyjdzie z tego cało. $660 tys. to kwota do przeżycia dla platformy tej wielkości, a trzeba przyznać, że zareagowali szybko i komunikowali się jasno. Kolejny zespół, który znajdzie się w takiej sytuacji, może jednak nie mieć zasobów, by to wchłonąć. Kompromitacja klucza, która opróżni skarbiec, a nie portfel nagród, już nadchodzi i nie będzie to błąd w Solidity. To będzie klucz na laptopie.