نقص در تلگرام دسکتاپ به جاوااسکریپت پنهان اجازه سرقت پیام‌ها از فایل‌های خروجی HTML را می‌داد

اخبار داغ فناوری اطلاعات و امنیت شبکه

دو سال و چهار ماه یک نقص XSS بدون شناسایی در کد تلگرام باقی مانده بود

پژوهشگران امنیتی از یک آسیب‌پذیری در تلگرام دسکتاپ خبر داده‌اند که به یک پیام ارسال‌شده از سوی ربات (Bot) اجازه می‌داد جاوااسکریپت پنهانی را درون گفت‌وگوهایی که کاربران به فایل HTML خروجی می‌گیرند، جاسازی کند. این یافته که توسط شرکت امنیتی ExPatch کشف شده، در گزارشی که در تاریخ ۱۲ سپتامبر منتشر شده، تشریح شده است.


چگونگی کارکرد این نقص

در ظاهر تلگرام، پیام حاوی این کد مخرب کاملاً عادی به نظر می‌رسید و تنها یک دکمه لینک نمایش می‌داد. اما اسکریپت جاسازی‌شده تنها زمانی اجرا می‌شد که فردی فایل خروجی (Export) این گفت‌وگو را در یک مرورگر وب باز می‌کرد. در آن لحظه، این اسکریپت می‌توانست تمام پیام‌های موجود در آن فایل را به یک سرور تحت کنترل مهاجم کپی کرده یا محتوای نمایش‌داده‌شده در صفحه را بازنویسی کند.

تلگرام یک وصله برای این مشکل را در ماه جولای منتشر کرد، اما به‌روزرسانی خود اپلیکیشن، فایل‌هایی که پیش‌تر با نسخه‌های قدیمی‌تر استخراج (Export) شده‌اند را به‌روزرسانی نمی‌کند؛ به این معنا که فایل‌های HTML قدیمی همچنان می‌توانند حامل این اسکریپت مخرب باشند.

قابلیت خروجی HTML در تلگرام دسکتاپ

تلگرام دسکتاپ، اپلیکیشن رسمی تلگرام برای ویندوز، macOS و لینوکس، قابلیت ذخیره یک گفت‌وگوی منفرد یا تمام گفت‌وگوهای یک حساب کاربری را به‌صورت صفحات HTML که در مرورگر باز می‌شوند، فراهم می‌کند. ربات‌ها نیز می‌توانند ردیف‌هایی از دکمه‌ها را زیر پیام‌های خود اضافه کنند که تلگرام آن‌ها را «صفحه‌کلید درون‌خطی» (Inline Keyboard) می‌نامد و ربات، متن نمایش‌داده‌شده روی هر دکمه را انتخاب می‌کند.

پژوهشگران این حادثه، دنیس روستیلوف و الکساندر روستیلوف، دریافتند تا پیش از انتشار وصله، کد خروجی‌گیری، متن این دکمه‌ها را بدون هیچ‌گونه فرارگذاری (Escaping) مستقیماً درون صفحه HTML می‌نوشت.

فرارگذاری، فرایندی است که کاراکترهایی مانند < را به‌گونه‌ای تبدیل می‌کند که مرورگر آن‌ها را به‌عنوان متن ساده نمایش دهد، نه این‌که آن‌ها را به‌عنوان کد تفسیر کند؛ فرایندی که کد خروجی‌گیری تلگرام آن را روی متن پیام، نام فرستنده و سایر فیلدها اعمال می‌کرد، اما نه روی متن دکمه‌ها.

پیامی که نیازی به حضور مستقیم ربات ندارد

بر اساس یافته‌های این پژوهشگران، یک ربات می‌توانست یک تگ اسکریپت را در متن یک دکمه قرار دهد و آن را با کاراکترهای نامرئی پر کند تا در نسخه‌ای از تلگرام دسکتاپ که آزمایش کرده بودند، دکمه کاملاً خالی به نظر برسد.

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


گزارش‌دهی مسئولانه و آزمایش محدود به حساب‌های شخصی

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

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

کد خروجی‌گیری تلگرام دسکتاپ، فایل‌های خروجی طولانی را به فایل‌های ۱,۰۰۰ پیامی تقسیم می‌کند؛ بنابراین هر فایل، حداکثر محتوای خود را افشا می‌کند، نه کل گفت‌وگو یا کل حساب کاربری تلگرام.

بازنویسی صفحه و ساخت فرم‌های جعلی

این اسکریپت همچنین می‌توانست صفحه را به‌طور کامل بازنویسی کند. در نمایش عملی این پژوهشگران، اسکریپت کل فایل خروجی را با یک فرم جعلی «تأیید هویت» تلگرام جایگزین کرد.

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


امتیاز شدت و شرایط لازم برای بهره‌برداری

پژوهشگران این آسیب‌پذیری را با امتیاز ۸.۲ از ۱۰ در مقیاس CVSS 3.1 ارزیابی کرده‌اند. تا تاریخ ۱۴ سپتامبر، هیچ امتیازی از سوی تلگرام یا پایگاه داده ملی آسیب‌پذیری آمریکا (NVD) برای این نقص ثبت نشده است.

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

پژوهشگران تنها قابلیت خروجی HTML تلگرام دسکتاپ را بررسی کرده‌اند و به فرمت خروجی JSON یا قابلیت‌های خروجی‌گیری سایر اپلیکیشن‌های تلگرام نپرداخته‌اند.

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


زمان‌بندی وصله و دامنه نسخه‌های آسیب‌دیده

وصله این مشکل، در کامیت 8457d13a توسط جان پرستون، توسعه‌دهنده تلگرام دسکتاپ، اعمال شد که فرارگذاری غایب را اضافه می‌کند. این کامیت در تاریخ ۳۰ ژوئن نوشته شد و در تاریخ سوم جولای به نسخه بتای 6.9.4 و در تاریخ ۱۴ جولای به نسخه پایدار 7.0.1 رسید؛ نخستین نسخه‌های اصلاح‌شده منتشرشده روی گیت‌هاب.

خط کد بدون فرارگذاری، از نسخه پایدار 4.15.1 در مارس ۲۰۲۴، یعنی حدود دو سال و چهار ماه، در نسخه‌های پایدار این اپلیکیشن حضور داشته است.


توصیه‌های پژوهشگران به کاربران

پژوهشگران به کاربران توصیه کرده‌اند:

تا زمان به‌روزرسانی اپلیکیشن، دلیلی برای ساخت فایل‌های خروجی HTML تازه وجود ندارد، چراکه تنها فایل‌های تولیدشده توسط کد قدیمی، حامل این نقص هستند.

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


نبود اطلاعیه رسمی و نبود شناسه CVE

یادداشت‌های انتشار نسخه‌های ۶.۹.۴ و ۷.۰.۱، فایل تغییرات (Changelog) این اپلیکیشن و اطلاعیه رسمی تلگرام در تاریخ ۱۴ جولای درباره این به‌روزرسانی، هیچ‌کدام به این وصله اشاره‌ای نکرده‌اند و مخزن گیت‌هاب تلگرام دسکتاپ نیز هیچ اطلاعیه امنیتی برای آن فهرست نکرده است.

همچنین هیچ شناسه CVE‌ای برای این آسیب‌پذیری ثبت نشده است. پژوهشگران اشاره کرده‌اند که تا تاریخ ۱۱ سپتامبر، جست‌وجوی رسانه The Hacker News در پایگاه‌های داده عمومی آسیب‌پذیری در تاریخ ۱۴ سپتامبر، هیچ نتیجه‌ای پیدا نکرده است.

مکاتبه با تلگرام و امتناع از انتشار عمومی

پژوهشگران اعلام کرده‌اند تلگرام در تاریخ اول جولای این نقص را تأیید کرده و مبلغ ۵۰۰ دلار جایزه شکار باگ پیشنهاد داده که این پژوهشگران آن را رد کرده و درخواست کرده‌اند به یک نهاد خیریه اهدا شود. آن‌ها درخواست کرده‌اند تاریخ انتشار هماهنگی تعیین شود و پیشنهاد داده بودند تا زمان انتشار وصله سکوت کنند.

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

پژوهشگران این پاسخ را به‌معنای امتناع از اجازه انتشار حتی پس از رفع مشکل تفسیر کرده‌اند. آن‌ها اعلام کرده‌اند هیچ توافق‌نامه عدم افشا (NDA) گزارش آن‌ها را پوشش نمی‌داده و در تاریخ ۱۲ سپتامبر، پس از انتشار وصله، گزارش خود را منتشر کرده‌اند.

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


چرا این حادثه اهمیت دارد؟

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

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

سوم، اختلاف نظر میان پژوهشگران و تلگرام درباره زمان‌بندی انتشار عمومی این یافته‌ها، یک بار دیگر بحث دیرینه‌ای در جامعه امنیت سایبری را برجسته می‌کند: مرز میان افشای مسئولانه و حق پژوهشگران برای اطلاع‌رسانی عمومی درباره آسیب‌پذیری‌هایی که پیش‌تر رفع شده‌اند، کجاست؟ نبود هرگونه اطلاعیه رسمی یا شناسه CVE از سوی تلگرام برای این نقص، این پرسش را حتی برجسته‌تر می‌کند.


توصیه‌های امنیتی


جمع‌بندی

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

برچسب ها: Inline Keyboard, ExPatch, امنیت_اطلاعات, امنیت_سایبری, HTML, Cyberattack, cybersecurity, news

نوشته شده توسط تیم خبر.

چاپ