Vào ngày 28 tháng 10, tại hội nghị OffensiveCon ở Tokyo, nhà nghiên cứu Saifeldeen Aziz đã trình bày một báo cáo về các lỗ hổng zero-click trong sticker động của Telegram — tức là những lỗ hổng mà người dùng không cần thực hiện bất kỳ thao tác nào: chỉ cần ứng dụng client hiển thị sticker được gửi đến là đủ. Theo bản tóm tắt, trong thư viện rlottie, mà các ứng dụng client của Telegram sử dụng để hiển thị các sticker này, đã tìm thấy một số lỗi hỏng bộ nhớ (memory-corruption bugs), và việc kiểm tra sticker phía máy chủ đã bị qua mặt bởi các lỗi logic trong quá trình phân phối chúng. Đối với Telegram trên iOS, chuỗi tấn công, theo tác giả, có thể dẫn đến thực thi mã (code execution). Điều này ảnh hưởng chủ yếu đến người dùng iPhone và iPad: vì trên Android và desktop, sticker đã được hiển thị bởi một engine mới của Telegram, trong khi trên iOS, rlottie vẫn đang được sử dụng.

Những gì đã biết về báo cáo

Báo cáo có tiêu đề «Stickers r-lot-tie Handle: Vulns, Bypasses, and Telegram's Zero-Click Attack Surface» và nằm trong chương trình của ngày thứ hai hội nghị, vào lúc 10:30 sáng ngày 28 tháng 10 theo giờ Tokyo. Các nhà tổ chức đã đăng tải một bức ảnh từ sân khấu vào lúc 01:32 UTC, trong thời gian diễn thuyết. Hiện tại chưa có bản ghi, slide, phân tích công khai hay số CVE cho những phát hiện của Aziz, vì vậy tất cả những gì được biết về nội dung đều dựa trên bản tóm tắt.

Theo bản tóm tắt, nghiên cứu đã diễn ra khoảng một năm và bao gồm ba bước:

  • Fuzzing rlottie. Fuzzing là quá trình tự động đưa hàng triệu tệp bị biến dạng vào chương trình để tìm kiếm các sự cố; ở đây, nó được thực hiện bởi một mô hình ngôn ngữ (language model). Quá trình này đã tìm thấy một số lỗi hỏng bộ nhớ mà, theo bản tóm tắt, ảnh hưởng đến các ứng dụng client của Telegram trên iOS, Android và desktop.
  • Vượt qua kiểm tra phía máy chủ. Máy chủ Telegram kiểm tra sticker và không cho phép các tệp đáng ngờ đi qua — đây là cơ sở của mô hình mối đe dọa. Bản tóm tắt mô tả các lỗi logic riêng biệt trong cách sticker được phân phối và kiểm tra, cùng với một số cách vượt qua các biện pháp bảo vệ trên máy chủ và trong ứng dụng client.
  • Chuỗi tấn công chống lại iOS. Tất cả được kết hợp thành một exploit có thể thực thi mã trong Telegram dành cho iOS; tác giả sẽ phân tích riêng các hạn chế của exploit này.

Không có các bước tái tạo trong bản tóm tắt, và bài viết này cũng không có.

Tại sao sticker nguy hiểm mà không cần nhấp chuột

Sticker động là một tệp TGS: một tệp JSON nén bằng gzip theo định dạng Lottie, trong đó hoạt ảnh được mô tả bằng các đường viền vector. Ứng dụng client sẽ tự động rasterize nó bằng thư viện gốc ngay khi sticker xuất hiện trong vùng hiển thị: trong cuộc trò chuyện, trong bản xem trước hội thoại, trong các phản ứng, trong các biểu tượng cảm xúc trạng thái tùy chỉnh. Do đó, một lỗi trong bộ hiển thị (renderer) là một bề mặt tấn công không cần sự tương tác của người dùng, và bộ lọc duy nhất giữa người gửi và mã dễ bị tổn thương là máy chủ Telegram.

Từ đó đặt ra câu hỏi, mà bản tóm tắt kết thúc bằng: nếu bảo mật của ứng dụng client dựa vào việc nhà cung cấp quyết định tệp nào sẽ đến được mã dễ bị tổn thương, thì đây là một biện pháp bảo vệ, một rủi ro kiến trúc hay một thứ gì đó gần giống với backdoor.

Vụ việc ZDI

Báo cáo này tiếp nối một cuộc tranh cãi bắt đầu vào mùa xuân. Ngày 26 tháng 3, Zero Day Initiative (ZDI) đã thông báo cho Telegram về một lỗi trong rlottie cho phép ghi dữ liệu trước khi bắt đầu vùng đệm được cấp phát và thực thi mã. Ngày 31 tháng 3, Telegram trả lời rằng lỗ hổng đã được khắc phục bằng cách kiểm tra trên máy chủ, và ngày 14 tháng 4, họ yêu cầu chuỗi tấn công đầy đủ để thực thi mã. Ngày 15 tháng 10, ZDI đã công bố bản tin ZDI-26-757 như một lỗ hổng chưa được vá, với điểm CVSS 7.0; vào mùa xuân, khi vụ việc lần đầu được đưa tin, điểm được nhắc đến là 9.8 (SecurityAffairs, CyberInsider). Báo cáo của Aziz được xây dựng như một sự bác bỏ lập luận của Telegram: mã được cho là không thể tiếp cận lại hóa ra có thể tiếp cận được.

Bản thân rlottie của Telegram không phải là mục tiêu mới. Năm 2020, Shielder đã tìm thấy 13 lỗi trong đó, bao gồm CVE-2021-31322; chúng đã được sửa trong các phiên bản 7.1 vào mùa thu năm 2020, và phân tích được công bố vào tháng 2 năm 2021. Vào tháng 9 năm 2026, một sticker gây treo ứng dụng trên tất cả các ứng dụng client, trừ phiên bản web, đã lan truyền trong các cuộc trò chuyện.

Telegram thay đổi gì trong mã nguồn

Telegram đang viết một bộ hiển thị Lottie riêng bằng Rust — tlottie. Trong mô tả của nó, có ghi rõ rằng JSON của hoạt ảnh được coi là đầu vào không đáng tin cậy, và nó được so sánh với một bản fork rlottie năm 2019 mà các ứng dụng client đang sử dụng.

Trong mã nguồn của Telegram dành cho Android 13.1.1 không còn rlottie gốc nữa — thay vào đó là tlottie đã được biên dịch; Android đã chuyển sang nó từ phiên bản 12.10.0, desktop thì vào tháng 9.

Trong Telegram dành cho iOS, tlottie đã được thêm vào vào ngày 11 tháng 9 — như một engine thứ hai bên cạnh rlottie, chứ không phải thay thế nó. Sticker, biểu tượng cảm xúc, phản ứng và bàn phím sticker chọn engine mỗi khi hiển thị, và máy chủ có thể chuyển chúng trở lại rlottie bằng cờ ios_killswitch_disable_tlottie. Ngoài ra, ở 50 nơi khác — giao diện phụ, màn hình trước khi đăng nhập, cửa sổ "Chia sẻ", xuất từ trình chỉnh sửa phương tiện — luôn hiển thị bằng rlottie. Không thể thấy từ mã nguồn liệu những chỉnh sửa này có liên quan đến những phát hiện của Aziz hay không; bản tóm tắt nói rằng mã hiển thị dễ bị tổn thương vẫn còn trong các ứng dụng client chính thức.