28 اکتبر، در کنفرانس OffensiveCon توکیو، محقق Saifeldeen Aziz گزارشی درباره آسیب‌پذیری‌های zero-click در استیکرهای متحرک تلگرام ارائه داد. این آسیب‌پذیری‌ها به گونه‌ای هستند که کاربر نیازی به هیچ کلیکی ندارد؛ کافی است که کلاینت، استیکر ارسالی را رندر کند. طبق اعلامیه، در کتابخانه rlottie که کلاینت‌های تلگرام برای نمایش این استیکرها از آن استفاده می‌کنند، چندین memory-corruption bug (خطای خرابی حافظه) پیدا شده است. همچنین، بررسی سرور برای استیکرها با استفاده از خطاهای منطقی در نحوه تحویل آن‌ها، قابل دور زدن بوده است. به گفته نویسنده، این زنجیره حمله برای تلگرام در iOS منجر به code execution (اجرای کد) می‌شود. این موضوع بیشتر از همه صاحبان آیفون و آی‌پد را تحت تأثیر قرار می‌دهد، زیرا در Android و دسکتاپ، استیکرها توسط موتور جدید تلگرام رندر می‌شوند، اما در iOS همچنان از rlottie استفاده می‌شود.

درباره این گزارش چه می‌دانیم

عنوان این گزارش «Stickers r-lot-tie Handle: Vulns, Bypasses, and Telegram's Zero-Click Attack Surface» است و در برنامه روز دوم کنفرانس، 28 اکتبر ساعت 10:30 صبح به وقت توکیو قرار داشت. برگزارکنندگان در ساعت 01:32 UTC، در حین سخنرانی، عکسی از صحنه منتشر کردند. هنوز هیچ ضبط، اسلاید، تحلیل عمومی یا شماره CVE برای یافته‌های Aziz منتشر نشده است، بنابراین تمام اطلاعات موجود درباره محتوای آن، از طریق اعلامیه اولیه است.

بر اساس اعلامیه، این تحقیق حدود یک سال به طول انجامیده و شامل سه مرحله است:

  • فازینگ rlottie. فازینگ (fuzzing) به معنای تغذیه خودکار میلیون‌ها فایل دستکاری شده به یک برنامه برای یافتن کرش‌ها است؛ در اینجا این کار توسط یک language model (مدل زبانی) انجام شده است. این فرآیند چندین memory-corruption bug را کشف کرد که طبق اعلامیه، کلاینت‌های تلگرام در iOS، Android و دسکتاپ را تحت تأثیر قرار می‌دهند.
  • دور زدن بررسی سرور. سرور تلگرام استیکرها را بررسی می‌کند و فایل‌های مشکوک را مسدود می‌سازد – مدل تهدید بر همین اساس استوار بود. در اعلامیه، خطاهای منطقی جداگانه‌ای در نحوه تحویل و بررسی استیکرها و چندین روش برای دور زدن محافظت‌ها در سرور و کلاینت توضیح داده شده است.
  • زنجیره حمله علیه iOS. همه این موارد در یک exploit (اکسپلویت) جمع‌آوری شده‌اند که منجر به code execution در تلگرام برای iOS می‌شود؛ نویسنده محدودیت‌های اکسپلویت را به طور جداگانه بررسی می‌کند.

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

چرا استیکر بدون کلیک خطرناک است

یک استیکر متحرک، فایل TGS است: یک JSON فشرده شده با gzip در فرمت Lottie، که انیمیشن در آن با خطوط وکتور توصیف شده است. کلاینت به محض اینکه استیکر وارد ناحیه قابل مشاهده می‌شود (در چت، در پیش‌نمایش گفتگو، در واکنش‌ها، در ایموجی‌های وضعیت سفارشی)، آن را با استفاده از یک کتابخانه بومی رندر (rasterizes) می‌کند. بنابراین، یک خطا در renderer (رندرکننده) یک سطح حمله بدون نیاز به تعامل کاربر است و تنها فیلتر بین فرستنده و کد آسیب‌پذیر، سرور تلگرام است.

از اینجا سوالی مطرح می‌شود که اعلامیه با آن به پایان می‌رسد: اگر امنیت کلاینت به این بستگی دارد که ارائه‌دهنده تصمیم بگیرد کدام فایل به کد آسیب‌پذیر برسد، پس این چیست – یک اقدام حفاظتی، یک ریسک معماری یا چیزی نزدیک‌تر به یک backdoor (بک‌دور)؟

پرونده ZDI

این گزارش ادامه بحثی است که در بهار آغاز شد. 26 مارس، Zero Day Initiative به تلگرام درباره خطایی در rlottie اطلاع داد که امکان نوشتن داده‌ها قبل از شروع بافر اختصاص یافته و اجرای کد را فراهم می‌کرد. 31 مارس، تلگرام پاسخ داد که آسیب‌پذیری با بررسی سرور برطرف شده است، و 14 آوریل، درخواست یک زنجیره کامل تا اجرای کد را مطرح کرد. 15 اکتبر، ZDI بولتن ZDI-26-757 را به عنوان یک آسیب‌پذیری بدون اصلاحیه، با امتیاز CVSS 7.0 منتشر کرد؛ در بهار، زمانی که این موضوع برای اولین بار گزارش شد، امتیاز 9.8 ذکر شده بود (SecurityAffairs، CyberInsider). گزارش Aziz به عنوان رد استدلال تلگرام ساخته شده است: کدی که غیرقابل دسترس تلقی می‌شد، قابل دسترس از آب درآمد.

خود rlottie برای تلگرام هدف جدیدی نیست. در سال 2020، Shielder در آن 13 خطا از جمله CVE-2021-31322 را کشف کرد؛ این خطاها در نسخه‌های 7.1 در پاییز 2020 اصلاح شدند و تحلیل آنها در فوریه 2021 منتشر شد. در سپتامبر 2026، استیکری در چت‌ها پخش شد که برنامه را در تمام کلاینت‌ها به جز نسخه وب، کرش می‌کرد.

تلگرام چه تغییراتی در کد ایجاد می‌کند

تلگرام یک renderer اختصاصی Lottie را با استفاده از Rust می‌نویسد – tlottie. در توضیحات آن به صراحت آمده است که JSON انیمیشن به عنوان ورودی غیرقابل اعتماد در نظر گرفته می‌شود و با یک فورک rlottie مربوط به سال 2019 که کلاینت‌ها از آن استفاده می‌کنند، مقایسه می‌شود.

در کدهای منبع تلگرام برای Android 13.1.1، دیگر rlottie بومی وجود ندارد – بلکه tlottie کامپایل شده قرار گرفته است؛ Android تا نسخه 12.10.0 به آن منتقل شده بود و دسکتاپ نیز در سپتامبر این کار را انجام داد.

در تلگرام برای iOS، tlottie در 11 سپتامبر اضافه شد – به عنوان موتور دوم در کنار rlottie، نه به جای آن. استیکرها، ایموجی‌ها، واکنش‌ها و صفحه کلید استیکرها در هر بار رندر، موتور را انتخاب می‌کنند و سرور می‌تواند آنها را با پرچم ios_killswitch_disable_tlottie به rlottie بازگرداند. همچنین در 50 مکان دیگر – رابط کاربری ثانویه، صفحه‌های قبل از ورود، پنجره «اشتراک‌گذاری»، خروجی گرفتن از ویرایشگر رسانه – همیشه rlottie رندر می‌کند. اینکه آیا این تغییرات با یافته‌های Aziz مرتبط هستند، از کد مشخص نیست؛ در اعلامیه آمده است که کد رندرینگ آسیب‌پذیر در کلاینت‌های رسمی باقی می‌ماند.