گزارش ۰۲ — imo Messenger

لینکی که اطلاعات
شما را فاش می‌کند.

می‌گویید نیویورک هستید، اما یک لینک در چت کافی است تا imo آدرس IP واقعی شما را آشکار کند و موقعیتتان تا حدود شهر مشخص شود. حتی لینک را باز نمی‌کنید. نه کلیکی لازم است، نه راه‌اندازی سرور. برنامه‌ای با بیش از ۵۰۰ میلیون نصب.

نویسنده: عباس حسینی·پژوهش مستقل امنیتی·سازنده: PageBites, Inc.

پیش‌نمایش لینک بی‌خطر به نظر می‌رسد: یک کادر کوچک زیر آدرس وب. اما برای ساختن آن، یک دستگاه باید صفحه را دریافت کرده باشد. از نظر حریم خصوصی، سؤال اصلی همین است: کدام دستگاه؟ داستان زیر یک شب عادی میا در خانه را نشان می‌دهد؛ جایی که پاسخ imo به این سؤال خوشایند نیست.

میا روی مبل پیامی را می‌خواند و در جواب می‌گوید سفر است
سلام میا، امروز همدیگه رو ببینیم؟
ببخش، این هفته نیویورک هستم.
تصویر ۱ — چیزی که میا می‌گوید

میا در خانه‌اش در برلین روی مبل نشسته است. یوناس پیشنهاد می‌دهد همدیگر را ببینند، اما میا حوصله ندارد. برای همین می‌گوید سفر است: «این هفته نیویورک هستم.»

میا لینک را باز نمی‌کند، اما درخواست پیش‌نمایش خودکار در سرور ثبت می‌شودwebhook.site/aXk9بدون کلیک
تصویر ۲ — درخواستی که بی‌خبر ارسال می‌شود

یوناس یک لینک رایگان از webhook.site می‌فرستد. میا لینک را در چت می‌بیند، اما روی آن نمی‌زند. همین کافی است: imo خودکار از گوشی او لینک را دریافت می‌کند و IP او آشکار می‌شود. بدون کلیک، بدون راه‌اندازی سرور و بدون بدافزار.

یوناس لاگ درخواست را کنار نقشه‌ای با موقعیت تقریبی شهر می‌خواند؛ نقطه دقیق مشخص نشده است
نیویورک؟
که این‌طور، برلینه!
تصویر ۳ — چیزی که نقشه نشان می‌دهد

روی صفحه یوناس، موقعیت تقریبی این IP به یک شهر می‌رسد: برلین، نه نیویورک. در این داستان، همان شهری که میا در آن است.

میا گفت
نیویورک
اما
گوشی میا نشان داد
برلین، آلمان
فقط با یک لینک در چت
میا با نگرانی به گوشی نگاه می‌کند؛ یک درخواست ثبت‌شده شهر احتمالی او را نشان داده است
تو که برلینی!
از کجا می‌دونی من کجام؟
تصویر ۴ — بخش نگران‌کننده ماجرا

میا موقعیتش را به اشتراک نگذاشته بود. فقط یک پیام را دید و روی هیچ لینکی نزد. با این حال، اطلاعاتش آشکار شد. مسئله اصلی دروغ کوچک او نیست؛ این است که اصلاً حق انتخابی نداشت. هرکسی که با او چت می‌کند ممکن بود همین کار را انجام دهد.

چرا مهم است

موقعیتی که اجازه نداده‌اید
به اشتراک گذاشته شود.

آدرس IP فقط یک عدد نیست؛ می‌تواند سرنخ‌هایی درباره شهر، شبکه و موقعیت تقریبی شما بدهد. با تکرار این کار، ممکن است درباره حضور شما در خانه یا جابه‌جایی‌هایتان هم اطلاعاتی به دست بیاید. اینجا برای فرستنده هزینه‌ای ندارد: یک لینک رایگان و پیام‌رسانی که به جای شما پاسخ می‌دهد.

Signal، WhatsApp و iMessage با دریافت پیش‌نمایش در سرور یا فقط روی دستگاه فرستنده، از این افشا جلوگیری می‌کنند. اما imo درخواست را از دستگاه گیرنده می‌فرستد؛ کسی که نباید بدون انتخاب خودش به لینک مهاجم وصل شود.

گزارش فنی

imo Messenger — یافته‌ها و بررسی فنی

نمونه اثبات و روش بازتولید در GitHub ↗

خلاصه و شدت آسیب‌پذیری

imo Messenger، محصول PageBites, Inc.، در Android، iOS، macOS و Windows آزمایش شد. این گزارش دو یافته را منتشر می‌کند. مشاهده سوم، یعنی استفاده از User-Agent جعلی Facebook، بخشی از F-PREVIEW است و جداگانه امتیازدهی نشده؛ چون به‌تنهایی یک رفتار است، نه آسیب‌پذیری.

شناسهیافتهCWECVSS 3.1شدت
F-PREVIEWافشای IP و فراداده از طریق پیش‌نمایش لینک، بدون کلیک200/3194.3متوسط
F-STORAGEذخیره اطلاعات احراز هویت بدون رمزگذاری3126.2متوسط
F-UAدرخواست با هویت جعلی facebookexternalhit، بررسی‌شده در F-PREVIEW451—اطلاعات تکمیلی
F-PREVIEW · CWE-200 / CWE-319

افشای IP و فراداده بدون کلیک از طریق پیش‌نمایش لینک

متوسط · CVSS 4.3

شرح

با دریافت پیام حاوی URL، برنامه گیرنده برای ساخت پیش‌نمایش یک درخواست HTTP از نوع GET به آن آدرس می‌فرستد. درخواست از دستگاه گیرنده ارسال می‌شود و IP واقعی، User-Agent و وضعیت آنلاین او را به کنترل‌کننده لینک نشان می‌دهد. گزینه‌ای برای غیرفعال کردن این رفتار وجود ندارد و نتیجه هم کش نمی‌شود؛ هر بار که چت باز شود، درخواست تکرار می‌شود. User-Agent درخواست نیز facebookexternalhit/1.1 Facebot Twitterbot/1.0 است. یک سرویس رایگان ثبت درخواست مثل webhook.site کافی است؛ مهاجم به زیرساخت شخصی نیاز ندارد.

request log behind the link
$ GET /t/aXk9 HTTP/1.1 Cf-Connecting-IP: 91.64.xx.xx ← recipient's real IP └─ geolocates to: Berlin, DE User-Agent: facebookexternalhit/1.1 Facebot Twitterbot/1.0 X-Forwarded-For: 91.64.xx.xx [=] recipient-side fetch — zero taps, zero consent [=] control: WhatsApp → sender-side fetch (no recipient IP) [=] control: Telegram → server-side fetch (datacenter IP)

نمونه نمایشی از درخواست ثبت‌شده. IP نمونه است؛ آزمایش‌های واقعی با یک آدرس موقت ثبت درخواست انجام شدند و مبدأ درخواست در سمت گیرنده، با مقایسه با WhatsApp و Telegram تأیید شد.

نسخه‌های تحت تأثیر

imo Messenger در iOS نسخه 2026.1.3، macOS نسخه 2.27 و نسخه جاری Android در زمان آزمایش، یعنی ۱ مارس ۲۰۲۶. Windows تحت تأثیر این مورد نیست، چون نسخه آن پیش‌نمایش لینک را روی دستگاه نمی‌سازد. نسخه اصلاح‌شده‌ای در دسترس نیست.

چرا این موضوع در imo اهمیت بیشتری دارد

در imo می‌توان از طریق گروه یا شماره تلفن با دیگران ارتباط گرفت، حتی بدون درخواست قبلی آن‌ها. مهاجم لازم نیست مخاطب تأییدشده باشد؛ یک گروه مشترک یا حتی یک پاسخ می‌تواند برای رساندن لینک و فعال شدن این رفتار کافی باشد.

رفتار مورد انتظار

  • دریافت لینک از طریق پروکسی سمت سرور، مثل Signal، WhatsApp و iMessage؛ یا
  • ساخت پیش‌نمایش فقط در دستگاه فرستنده و قرار دادن اطلاعات آن در پیام رمزگذاری‌شده؛ یا
  • فعال شدن پیش‌نمایش فقط با رضایت آگاهانه کاربر و توضیح روشن درباره افشای IP.

جزئیات امتیاز CVSS 3.1

AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N امتیاز پایه: 4.3، متوسط

اثر اثبات‌شده به افشای IP و User-Agent محدود است و در دسته C:Low قرار می‌گیرد. بنابراین حتی با نیاز بسیار کم به تعامل کاربر، امتیاز در حد متوسط باقی می‌ماند. اگر درخواست بدون باز کردن گفتگو هم ارسال شود، مقدار تعامل به UI:N و امتیاز به 5.3 می‌رسد؛ باز هم متوسط.

F-STORAGE · CWE-312

ذخیره اطلاعات احراز هویت بدون رمزگذاری

متوسط · CVSS 6.2

شرح

اطلاعات احراز هویت، شامل شماره تلفن، کوکی نشست، UDID و توکن‌ها، بدون رمزگذاری در داده‌های محلی برنامه ذخیره می‌شوند: در LevelDB روی macOS و در یک فایل داده روی Windows. در Windows، کلید AES-CBC هم کنار داده رمزگذاری‌شده و به‌صورت آشکار قرار دارد. این کار عملاً حفاظت رمزگذاری را از بین می‌برد؛ هرکس بتواند فایل‌ها را بخواند، می‌تواند داده را رمزگشایی کند.

پیامد

مهاجمی که امکان خواندن فایل‌های محلی را دارد، می‌تواند اطلاعات احراز هویت، از جمله توکن نشست فعال، را بخواند. این دسترسی ممکن است در دستگاه گم‌شده یا سرقت‌شده بدون رمزگذاری کامل دیسک، نسخه پشتیبان رمزگذاری‌نشده در فضای مشترک، بدافزار با دسترسی کاربر یا استخراج جرم‌شناسی داده‌ها وجود داشته باشد. اینکه آیا می‌توان توکن را برای ورود به جای کاربر، بدون احراز هویت دوباره، استفاده کرد به سازوکار اتصال نشست در سرورهای imo بستگی دارد؛ این موضوع را آزمایش نکرده‌ام.

جزئیات امتیاز CVSS 3.1

AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N امتیاز پایه: 6.2، متوسط

اثر بر محرمانگی زیاد است، چون اطلاعات احراز هویت کاملاً قابل خواندن‌اند. اثری بر یکپارچگی و دسترس‌پذیری نشان داده نشده است. نیاز به دسترسی محلی، یعنی AV:Local، امتیاز پایه را در محدوده متوسط نگه می‌دارد.

توضیح امتیازهای شدت

چرا امتیازها را بالاتر اعلام نکرده‌ام امتیاز پایه CVSS از مسیر حمله، تعامل لازم و اثر بر محرمانگی، یکپارچگی و دسترس‌پذیری به دست می‌آید؛ نه از نگران‌کننده بودن عنوان گزارش. افشای IP در دسته C:Low است. بدون کلیک بودن فقط معیار تعامل را تغییر می‌دهد، نه میزان اثر را. ذخیره اطلاعات بدون رمزگذاری نیز به دسترسی محلی نیاز دارد؛ بنابراین AV:Local امتیاز آن را در حد متوسط نگه می‌دارد. هر دو یافته واقعی و نیازمند اصلاح‌اند، اما شدتشان متوسط است. امتیازی که بتوان از آن دفاع کرد، بهتر از امتیاز اغراق‌آمیز است.

روند گزارش و انتشار


این گزارش برای پژوهش و بهبود حفاظت از داده‌ها و حریم خصوصی نوشته شده است. بدافزار یا ابزار آماده سوءاستفاده در آن وجود ندارد؛ نمایش مشکل فقط با یک آدرس ساده ثبت درخواست انجام می‌شود.