اگر شما هم خرید و فروشهای زیادی روی بازارگاه OpenSea، که مکانی برای خرید و فروش NFTهاست، انجام داده باشید، حتماً متوجه این موضوع شدید که هرازچندگاهی براتون هدیههایی از طرف افراد ناشناسی ارسال میشه که قیمت چندانی ندارن و در تعداد زیاد مینت و برای بقیه ارسال شدن.
آیا تمام این داستان یک لطف بدون منت از جانب یک دوست ناشناسه که فقط میخواد بهخاطر تراکنشهای زیاد شما روی یک پلتفرم از شما قدردانی کنه؟
در جواب باید بگیم که در اکثر مواقع اینجوریه که آدرس فرستنده فقط قصد داره با این کار به بیشتر دیدهشدن اثری که تولید کرده کمک بکنه [احتمالاً لطفی در کار نیست و هیچکس محض رضای خدا قرار نیست بهتون پاداش بده] و با این روش بازار کوچیکی برای اثر خودش ایجاد کنه. بهنوعی یک ایردراپ خیلی کوچیک محلی در حدواندازههای کار خودش برگزار کنه، اما داستان از اونجایی ترسناک میشه که اپنسی به تولیدکنندهی اثر اجازه میده که فایلهای SVG رو بهعنوان یک دارایی غیرقابلمعاوضه مینت کنه.
خب فایل SVG چیه؟
در واقع SVG یکی از انواع فرمتهای ذخیرهسازی فایلهای تصویری برداریه که براساس XML توسعه داده شده. بهعبارت دیگه، اساس SVG نشونهگذاریهای رایج توی زبون نشونهگذاری XML هست، که بهکمک این ساختار شما میتونین بردارهای داخل تصویرتون رو ایجاد و درنهایت با بصریکردن اونها یک تصویر داشته باشین.
SVG: Scalable Vector Graphics
XML: Extensible Markup Language
به مثال زیر توجه کنید که در اون برای اختصار، بخشی از متن فایل SVG ما حذف شده.
<?xml version="1.0" encoding="iso-8859-1"?> <!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> <g> <path d="M146.399,308.226c-12.495-11.005-16.691-28.407-18.399-44.136c-3.594-59.768,36.743-117.805,95.264-132.624 c14.507-3.156,32.062-8.927,45.36,0.322c15.055,14.318-14.613,33.608-25.247,41.311c-36.547,27.262-134.197,79.888-96.765,134.829 C146.541,308.028,146.47,308.127,146.399,308.226z"/> . . . <path d="M205.834,372.707c-0.065,0.08-0.131,0.16-0.196,0.24c-0.154-0.269,0.113-0.175,0.203-0.233 C205.842,372.715,205.834,372.707,205.834,372.707z"/> </g> </svg>
اگر دقت کنید میشه فهمید که فایل ما یهتعدادی tag داره که درواقع نمایندههایی هستن برای توصیف اینکه فایل ما از چه جنسیه و از چه اجزایی تشکیل شده. بهطور مثال، اینجا ما تگ Path رو داریم که یکی از انواع وکتورهای مورداستفاده برای ساخت یک فایل SVG هست و توی اون اطلاعاتی از جانمایی نقاط سازندهی یک مسیر نوشته شده. از اونجایی که این اطلاعات خارج از بحث اصلی این پسته، ازشون میگذریم و میریم سراغ ادامهی ماجرا.
خروجی اون فایل، البته اگر کامل میبود، چیزی شبیه به این تصویر میشد:
این به این زیبایی؛ کجاش میتونه خطرناک باشه؟
این فایل وقتی خطرناک میشه که وسط-مسطای اون نشونهگذاریا، جایی که کسی حواسش نیست بیای و اسکریپت جاوا-اسکریپت (یکی از زبونهای برنامهنویسی که ازقضا بهشدت هم خودش رو با Web3 منطبق کرده) مخفی کنی. کافیه خروجی این فایل، که در ظاهر یک تصویره، روی یک صفحهی وب قرار بگیره و حالا با لود شدنش توی صفحه، اون اسکریپت هم توی Document وب ما تزریق میشه و خب اینجاست که میفهمیم اپنسی چه سوراخ امنیتی بزرگی رو پر نکرده.
اپنسی خیلی راحت این فایل رو از مینتکننده قبول میکرده، [احتمالاً] بدون هیچگونه تبدیلی به فرمتهای تصویری دیگه، اون رو توی وبسایتش نمایش میداده و اینجوری هرکسی میتونسته هر کدی رو به مرورگر کاربر نهایی برسونه و کافی بوده که کاربر روی تصویری که درواقع یک فایل SVG بوده کلیک کنه تا اون اسکریپت اجرا بشه و مراحل بعدی اتفاق بیفته که در ادامهی متن به بررسی اونها میپردازیم.
Source: Critical bugs on the OpenSea allowed to steal user funds
یکی از رایجترین چیزهایی که توی اپنسی ممکنه بهش بربخورین، اینه که برای انواع کارها، ازجمله لایک کردن یک اثر، خرید یک اثر، و ... از شما امضا میخواد. اینه که عموماً کاربرهای اپنسی خیلی کمدقت درمورد این امضاها رفتار میکنن و سعی میکنن خیلی سریع پاپآپی که مثلاً توی متامسک براشون آورده شده رو امضا کنن.
البته عموم کاربرا همهجا خیلی بیدقت این کار رو انجام میدن و این امضا کردن بدون بررسی، مختص OpenSea نیست متاسفانه. ???
دزد نامحترم هم که هم از این رفتار ناخودآگاه کاربرا و هم از باگ امنیتی اپنسی آگاهی داره، دستبهکار میشه و کاری میکنه که شما چیزی رو امضا کنین که حکم عهدنامهی ترکمانچای رو توی کریپتو داره.
القصه، شما وقتی روی یک تصویر آلوده روی اپنسی (بخوانید: یک فایل SVG که داخل اون کدهای مخرب جاوا-اسکریپتی و ... گنجونده شده) کلیک میکنین، بهترتیب ازتون چندتا امضا میگیره، و از اونجایی که اصالت درخواستکننده به OpenSea (OpenSea.io) یا Storage اون برمیگرده شما خیلی هم ممکنه شک نکنین و درخواستهای امضا رو قبول کنین. البته یهنکتهای که تا اینجای کار برای این مدل از دزدی شکبرانگیزه و افراد رو باید یهخورده مشکوک کنه، اینه که با کلیک روی تصویر یک تب جدید (با ادرس Storage اپنسی) توی مرورگر باز میشه و ازتون درخواست امضا میکنه و خب این تفاوت این نوع امضا کردن با امضاهای فراوون و مرسومیه که شما توی اپنسی میکنین.
نمیدونم برای شما هم این اتفاق افتاد یا نه، ولی روی پروفایل اپنسی من چندتا از انافتیهایی از همین جنس، که بهصورت هدیه ارسال شده بودن، به یکباره، ناپدید شدن و احتمالاً مربوط میشه به راهکار اپنسی برای شناسایی و حذف این انافتیهای مخرب.
این مشکل امنیتی روز ۲۶ سپتامبر امسال گزارش شده و در کمتر از یک ساعت [ظاهراً] برطرف شده، اما چیزی که هست اینه که وقتی پای پول درمیون باشه این مدل از تهدیدات همواره بهعنوان ریسکهای بالقوه در اطراف ما وجود دارن و تنها راه اینه که آگاهی بیشتری نسبت به مفاهیم داشته باشیم و سعی کنیم با دقت جزییات رو بررسی کنیم و هرچیزی رو به این راحتیا امضا نکنیم. ?