اکسپلویت Polymarket: یک کلید لو رفته، نه باگ قرارداد

در ۲۲ مه ۲۰۲۶، محقق آنچین ZachXBT یک خروج غیرمجاز از یکی از کیفپولهای Polymarket را علامتگذاری کرد. برآوردهای اولیه حدود ۵۲۰ هزار دلار بود. تا زمانی که تیم جزئیات را تایید کرد، این رقم به ۶۶۰ تا ۷۰۰ هزار دلار رسیده بود. نه reentrancy بود، نه دستکاری اوراکل، نه هیچ کوریوگرافی هوشمندانهای از flash loan. فقط یک کلید خصوصی که به جایی رسید که نباید میرسید.
اکسپلویت Polymarket به آن بخشی از پشته که همه هزینه Trail of Bits و OpenZeppelin را میپردازند تا زیر ذرهبین بگذارند، دست نزد. به یک کیفپول داخلی top-up ضربه زد؛ یک حساب عملیاتی که برای تامین مالی پاداشها و روان نگه داشتن چرخهها استفاده میشد. از آن نوع کیفپولهایی که هیچوقت در محدوده آدیت قرار نمیگیرند، چون قرارداد نیستند. یک کلید است که روی زیرساخت کسی نشسته.
این ناراحتکننده است. بعد از سالی که تیتر اخبار درباره پلها و پیکربندیهای اشتباه DVN بود، پرسرمایهترین بازار پیشبینی جهان از طریق ابتداییترین حالت شکست ممکن تخلیه شد.
آنچه واقعاً در Polygon اتفاق افتاد
حساب تخلیهشده یک کیفپول عملیاتی بود، نه وجوه کاربران که در قراردادهای اصلی پروتکل نگهداری میشدند. طبق گزارش CoinDesk، ZachXBT حدود ۵۲۰ هزار دلار جابجایی را شناسایی کرد و تیم Polymarket اعلام کرد وجوه مشتریان در امان است. مهاجم POL و دیگر داراییها را از کیفپول در Polygon جاروب کرد و سپس همان کاری را کرد که مهاجمان همیشه میکنند؛ پل زد و متفرق شد، پیش از اینکه کسی بتواند چیزی را فریز کند.
Decrypt رقم را به حدود ۷۰۰ هزار دلار نزدیکتر دانست و مشخصاً آن را بهعنوان یک کیفپول داخلی top-up شناسایی کرد. اختلاف در اعداد در ۲۴ ساعت اول عادی است؛ اما مکانیزم اتفاق مورد مناقشه نیست. کسی به کلید دسترسی پیدا کرد.
این یک اکسپلویت Polygon POL است فقط به این معنا که POL داراییای بود که درون کیفپول نشسته بود. زنجیره شکست نخورد. قرارداد شکست نخورد. حضانت یک کلید عملیاتی شکست خورد.
چرا UMA CTF Adapter مشکل نبود
رزولوشن بازار Polymarket از طریق اوراکل خوشبینانه UMA و از مسیر UMA CTF Adapter انجام میشود؛ قراردادی که سوالها را ثبت میکند، اختلافات را مدیریت میکند و نتایج را تسویه میکند. این همان بخشی است که روی کاغذ بیشترین ریسک تهاجمی را دارد. مورد بررسی قرار گرفته. در هزاران بازار آزموده شده است.
و هیچ ربطی به این ماجرا نداشت.
فکر میکنم این جزئیاتی است که مردم از کنارش رد میشوند و نباید. لایه قرارداد هوشمند دوام آورد. اوراکل دوام آورد. چیزی که شکست یک کیف پول بود که یک انسان با کلیدی که یک انسان (یا یک pipeline سیآیدی، یا یک سرویس امضای آنلاین) به آن دسترسی دارد کنترل میکند. تمام بازار صعودی را صرف سختکردن بخشهایی کردیم که تأیید رسمی دارند و بخشهایی را که یک فایل .env دارند نادیده گرفتیم.
کلیدهای عملیاتی امروز سطح حمله واقعی هستند
این الگوی حوادث ۲۰۲۶ است. Solidity دارد بهتر میشود. حسابرسان کارشان را بلدند. روشهای رسمی باگهای reentrancy که قبلاً نه رقم پول را تخلیه میکردند را شناسایی میکنند. پس مهاجمان جابجا شدند.
به سمت بافت نرم رفتند:
- کیفپولهای آنلاین که برای پاداشها، شارژ گس و بازارگردانی استفاده میشوند.
- کلیدهای دپلویر که بعد از راهاندازی هرگز چرخش نداشتند.
- امضاکنندگان چندامضایی که از یک لپتاپ هم برای امضا هم برای مرور وب استفاده میکنند.
- اسرار CI/CD که میتوانند در محیط تولید تراکنش امضا کنند.
هیچکدام از اینها در گزارش حسابرسی نیست. وقتی امنیت یک صرافی تحت نظارت را بررسی میکنم، بازبینی قرارداد شاید یک سوم کار باشد. بقیهاش HSMها، جداسازی امضاکنندگان، مستندات مراسم کلید، و این سوال کسلکننده اما اساسی است که «چه کسی میتواند ساعت ۳ صبح پول جابجا کند و چه چیزی جلویش را میگیرد.» این آخری جایی است که اکثر تیمها در معرض خطر هستند.
این همان درس ماجرای ضرر LayerZero کلپ دائو است؛ ۲۹۲ میلیون دلار نه به خاطر باگ قرارداد بلکه از یک پیکربندی اشتباه در لایه عملیاتی از دست رفت. مکانیزم متفاوت، علت ریشهای یکسان: بخش کسلکنندهای که هیچکس حسابرسیاش نمیکند.
یک کیف پول عملیاتی ۶۶۰ هزار دلاری باید چه شکلی میبود
اگر یک کلید بتواند ۶۶۰ هزار دلار را جابهجا کند، این یک تصمیم طراحی است، نه بدشانسی. چند چیز وجود دارد که باید ملزومات اولیه هر کیف پول عملیاتی با ارزش قابل توجه باشد:
- محدودیت هزینه در خود منطق کیف پول. یک کیف پول شارژ پاداش هیچ دلیلی ندارد که بتواند کل موجودیش را در یک تراکنش بفرستد. آن را روی زنجیره محدود کنید.
- امضای آستانهای برای هر مبلغ بالاتر از یک حد پایه. پرداختهای خودکار کوچک میتوانند داغ بمانند. هر چیزی بالای، مثلاً، ۱۰ هزار دلار باید به یک امضاکننده دوم نیاز داشته باشد. چندامضایی Safe با آستانهای پایین برای انتقالهای بزرگ کار سختی نیست.
- جداسازی کلید از محیط برنامه. کلید امضای یک کیف پول عملیاتی هرگز نباید در جایی باشد که کد برنامه، وابستگیها، یا یک اجراکننده CI به خطر افتاده بتوانند آن را بخوانند.
- نظارتی که در صورت خروج غیرعادی وجوه، یک انسان را خبردار کند. ZachXBT این را پیش از اطلاعیهی تیم کشف کرد. سیستم هشداردهی خودتان باید از یک شخص ثالث که mempool را رصد میکند جلوتر باشد.
هیچکدام از اینها تازگی ندارند. اینها همان چیزهایی هستند که وقتی تیمی سریع در حال توسعه است و کیف پول «فقط برای پاداشهاست»، به تعویق میافتند.
شکاف در پشتهی حسابرسی که صاحبی ندارد
مشکل عمیقتر، از نظر حوزهی اختیار، درونی است. امنیت قراردادهای هوشمند مالک مشخصی دارد: شرکت حسابرسی. امنیت کلید عملیاتی... هر کسی که کیف پول را راهاندازی کرده، معمولاً زیر فشار ددلاین، و اغلب هرگز بازبینی نشده. در مورد این شکاف در زمینهی پشتهی حسابرسی شکسته DeFi نوشتم؛ گواهینامه قراردادها را پوشش میدهد و در مرز قرارداد متوقف میشود. همه چیز عملیاتی خارج از حوزه و خارج از ذهن است.
تا زمانی که یک نهاد نظارتی یا بیمهگر، امنیت عملیاتی را به یک ردیف بودجه با مالکیت مشخص تبدیل نکند، این اتفاقات تکرار خواهند شد. امنیت عملیاتی DeFi در سال ۲۰۲۶ تقریباً همانجایی است که امنیت قراردادهای هوشمند در سال ۲۰۱۹ بود: همه میدانند که مهم است، صاحبی ندارد، و آخرین جایی است که بودجهای به آن میرسد.
Polymarket سالم خواهد ماند. ۶۶۰ هزار دلار برای پلتفرمی در این ابعاد قابل تحمل است و جای تقدیر دارد که با سرعت و صراحت اطلاعرسانی کردند. اما شاید تیم بعدی که این اتفاق برایش بیفتد، آنقدر توان مالی نداشته باشد که چنین ضربهای را جذب کند. آن لحظه که یک کلید خصوصی لو میرود و نه کیف پول پاداش، بلکه خزانهای را تخلیه میکند در راه است و یک باگ Solidity نخواهد بود. یک کلید روی یک لپتاپ خواهد بود.