زمینه
امروز صبح به وقت پکن، @zachxbt در کانال خود پیامی منتشر کرد مبنی بر اینکه «برخی از کاربران Trust Wallet گزارش دادهاند که در چند ساعت گذشته وجوهی از آدرسهای ولت آنها سرقت شده است.» متعاقباً، حساب رسمی Trust Wallet نیز بیانیه رسمیای منتشر کرد که خطر امنیتی در نسخه 2.68 افزونه مرورگر Trust Wallet را تأیید کرد و به همه کاربرانی که از نسخه 2.68 استفاده میکنند توصیه کرد فوراً آن را غیرفعال کرده و به نسخه 2.69 ارتقا دهند.

تاکتیکها و تکنیکها
پس از دریافت اطلاعات، تیم امنیتی SlowMist بلافاصله تحلیل نمونههای مرتبط را آغاز کرد. ابتدا نگاهی به مقایسه کد هسته نسخههای منتشر شده قبلی 2.67 و 2.68 میاندازیم:


با مقایسه تفاوتی (diff) دو نسخه کد، کد مخرب زیر که توسط هکر اضافه شده بود کشف شد:

کد مخرب تمام ولتهای موجود در پلاگین را پیمایش کرده و برای هر ولت کاربر یک درخواست «دریافت عبارت بازیابی» ارسال میکند تا عبارت بازیابی رمزگذاری شده کاربر را به دست آورد. در نهایت، با استفاده از رمز عبور یا passkeyPassword که کاربر هنگام باز کردن قفل ولت وارد کرده است، عبارت بازیابی را رمزگشایی میکند. اگر رمزگشایی موفقیتآمیز باشد، عبارت بازیابی کاربر به دامنه مهاجم `api.metrics-trustwallet[.]com` ارسال میشود.

ما همچنین اطلاعات دامنه مهاجم را تحلیل کردیم. مهاجم از دامنه زیر استفاده کرده بود: metrics-trustwallet.com.

بر اساس تحقیق، این دامنه مخرب در تاریخ 2025-12-08 ساعت 02:28:18 ثبت شده و ارائهدهنده خدمات دامنه NICENIC INTERNATIONAL است.
اولین درخواست به api.metrics-trustwallet[.]com در 21 دسامبر 2025 ثبت شده است.

این زمان تقریباً دقیقاً با زمانی که در کد 22 دسامبر درب پشتی جاسازی شده بود مطابقت دارد.
ما کل فرآیند حمله را از طریق ردیابی و تحلیل کد بازتولید کردیم:
تحلیل پویا نشان میدهد که پس از باز کردن قفل ولت، میتوان دید مهاجمان فیلد خطا را با اطلاعات عبارت بازیابی در R1 پر میکنند.

منبع این داده خطا از طریق فراخوانی تابع GET_SEED_PHRASE به دست میآید. در حال حاضر، Trust Wallet از دو روش باز کردن قفل پشتیبانی میکند: رمز عبور و passkeyPassword. هنگام باز کردن قفل، مهاجم رمز عبور یا passkeyPassword را به دست آورده، سپس GET_SEED_PHRASE را فراخوانی میکند تا عبارت بازیابی (کلید خصوصی نیز مشابه است) ولت را دریافت کند و سپس عبارت بازیابی را در “errorMessage” قرار میدهد.

کد زیر از emit برای فراخوانی GetSeedPhrase برای بازیابی دادههای عبارت بازیابی و پر کردن آن در فیلد خطا استفاده میکند.

تحلیل ترافیک با استفاده از BurpSuite نشان داد که پس از به دست آوردن عبارت بازیابی، آن در فیلد errorMessage بدنه درخواست کپسوله شده و به سرور مخرب (https://api.metrics-trustwallet.com) ارسال میشود که با تحلیل قبلی مطابقت دارد.

فرآیند فوق حمله سرقت عبارت بازیابی/کلید خصوصی را تکمیل میکند. علاوه بر این، به نظر میرسد مهاجمان با کد منبع گسترده آشنایی دارند و از پلتفرم تحلیل محصول end-to-end متنباز PostHogJS برای جمعآوری اطلاعات ولت کاربران استفاده کردهاند.
تحلیل داراییهای سرقت شده
(https://t.me/investigations/296)
بر اساس آدرسهای هکر افشا شده توسط ZachXBT، آمارهای ما نشان میدهد که تا زمان نگارش این متن، تقریباً 33 بیتکوین (به ارزش حدود 3 میلیون دلار) از داراییها در بلاکچین بیتکوین، حدود 431 دلار در بلاکچین سولانا و حدود 3 میلیون دلار در بلاکچینهای مختلف شامل شبکه اصلی اتریوم و لایه 2 سرقت شده است. پس از سرقت، مهاجمان بخشی از داراییها را با استفاده از صرافیهای متمرکز و پلهای متقاطع زنجیرهای مختلف انتقال داده و مبادله کردند.


جمعبندی
این حادثه درب پشتی ناشی از تغییر مخرب کد منبع داخلی Trust Wallet (منطق سرویس تحلیل) بود، نه معرفی یک بسته عمومی شخص ثالث دستکاری شده (مانند یک بسته npm مخرب). مهاجمان مستقیماً کد خود برنامه را تغییر دادند و از کتابخانه قانونی PostHog برای هدایت دادههای تحلیلی به یک سرور مخرب استفاده کردند. بنابراین، ما دلیلی داریم که باور کنیم این یک حمله APT حرفهای بوده و مهاجمان احتمالاً قبل از 8 دسامبر کنترل دستگاهها یا مجوزهای استقرار توسعهدهندگان Trust Wallet را به دست آورده بودند.
پیشنهادات:
1. اگر افزونه ولت Trust Wallet را نصب کردهاید، به عنوان پیشنیاز عیبیابی و انجام هر اقدامی، فوراً از اینترنت قطع شوید.
2. فوراً کلید خصوصی/عبارت بازیابی خود را صادر کرده و افزونه ولت Trust Wallet را حذف کنید.
3. پس از پشتیبانگیری از کلید خصوصی/عبارت بازیابی خود، وجوه خود را در اسرع وقت به یک ولت دیگر انتقال دهید.

(https://t.me/investigations/296)